코드/dev

도커(Docker) 컨테이너(Container)

미로처럼 2025. 4. 21. 10:21
728x90

Docker Container는 애플리케이션과 그 실행에 필요한 모든 것(코드, 라이브러리, 설정 등)을 담고 있는, 격리된 실행 환경이다.

 

도커 컨테이너는 프로세스의 라이프 사이클을 관리한다.

프로세스가 생성되고 운영되고 제거되기까지 생애주기를 관리를 하기 위해 필요한 것이 격리이다.

 

 

컨테이너 안의 프로세스는 제한된 자원내에서 제한된 사용자만 접근 가능하다. 

컨테이너는 Host OS 시스템 커널을 사용한다.

 

가상머신과 컨테이너의 차이

 

Hypervisor란 단일 물리적 머신에서 여러개의 가산 머신을 실행할 수 있게 해주는 소프트웨어이다.

 

HostOS 에서는 직접 실행하거나 컨테이너 안에서 실행되나 동일한 시스템으로 인식된다.

 

위와 같이 독립적인 파일시스템이 생성된다.

 

 

 

특징

 

 

  • 독립적인 실행 환경: 컨테이너 안에는 애플리케이션을 실행하는 데 필요한 모든 것(코드, 라이브러리, 시스템 도구, 런타임 등)이 담겨 있습니다. 마치 캡슐처럼 외부 환경과는 완전히 분리되어 있어서, 어떤 환경에서든 동일하게 실행될 수 있습니다.
  • 가볍고 빠름: 가상 머신(VM)과는 달리, 컨테이너는 운영체제(OS) 커널을 공유하기 때문에 훨씬 가볍고 빠르게 실행됩니다. 새로운 컨테이너를 시작하거나 중지하는 데 몇 초밖에 걸리지 않아요.
  • 이식성: 개발 환경에서 만든 컨테이너 이미지를 그대로 테스트 환경, 운영 환경 등 어떤 Docker 환경에서도 실행할 수 있습니다. 마치 포장된 제품처럼 어디든 쉽게 옮겨갈 수 있죠.
  • 확장성: 필요에 따라 컨테이너를 쉽게 복제하고 확장할 수 있습니다. 트래픽이 증가하면 컨테이너 수를 늘리고, 줄어들면 줄이는 방식으로 유연하게 대처할 수 있습니다.
  • 자원 효율성: 하나의 호스트 OS 위에서 여러 개의 컨테이너가 독립적으로 실행되므로, 시스템 자원을 효율적으로 사용할 수 있습니다.

 

 

사용하는 이유 

  • 개발과 배포의 일관성 유지: 개발 환경과 운영 환경의 차이로 인해 발생하는 문제를 줄여줍니다.
  • 빠른 배포 및 롤백: 애플리케이션 배포와 이전 버전으로의 롤백이 간편하고 빠르게 이루어집니다.
  • 애플리케이션 격리 및 보안 강화: 각 컨테이너는 독립적으로 실행되므로, 하나의 컨테이너에 문제가 발생해도 다른 컨테이너에 영향을 주지 않습니다.
  • 마이크로서비스 아키텍처 구현 용이: 작은 기능 단위로 분리된 마이크로서비스들을 각각의 컨테이너로 관리하고 배포하기에 용이합니다.

 

도커 컨테이너 네트워크

컨테이너 생성시 독자적인 파일시스템이 생성되는데  컨테이너 안에 맥 주소와 IP 주소가 할당된다. 

 

도커 컨테이너 실행 시 파일시스템

 

 

 

1.컨테이너를 생성하면, veth가 생성되고 컨테이너 내의 eth0과 연결됩니다.

2.컨테이너들의 veth들은 docker0를 통해 컨테이너들간에 통신이 가능합니다.

3.컨테이너는 gateway인 docker0를 거쳐 외부와 통신합니다.

 

 

컨테이너 IP를 일일이 확인하기 어렵고, 외부로 오는 요청은 Host NIC로 온다 이 2문제를 해결하기 위해 포트포워딩을 활용.

 

Host OS의 80 포트번호를 사용하는 소켓 파일과 컨테이너 내의 80 포트번호를 사용하는 소켓 파일을 연결.

728x90