Docker & Container 이해하기
Docker & Container 란?
- Docker란?
Docker는 애플리케이션의 실행에 필요한 환경을 하나의 이미지로 모아두고, 그 이미지를 사용하여 다양한 환경에서 애플리케이션 실행 환경을 구축 및 운용하기 위한 오픈소스 플랫폼입니다. - 컨테이너란?
Docker 이미지로 부터 생성되며, 호스트 OS상에 논리적인 구획을 만들고, 애플리케이션을 작동시키기 위해 필요한 라이브러리나 애플리케이션을 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것입니다.- 호스트 OS의 리소스를 논리적으로 분리시키고, 여러 개의 컨테이너가 공유하여 사용함
- 컨테이너는 오버헤드가 적기 때문에 가볍고 고속으로 작동 함 (시작 및 종료 사용되는 리소스 작음)
가상화 기술과 컨테이너 기술 비교
- 가상 머신(VM)
- 하드웨어 기반의 여러 게스트 운영 체제
- 하이퍼바이저를 통해 에뮬레이션됨
- 운영체제 및 다양한 라이브러리가 같이 올라가기 때문에 크기가 큼 (GB)
- 컨테이너
- 애플리케이션 수준 구성
- 커널 하나를 공유하는 여러 가상 환경을 에뮬레이션함
- 애플리케이션 및 파일 시스템만 올라가기 때문에 크기가 작음 (MB)
Docker 아키텍처
Client
클라이언트인 CLI(Docker)를 통해 각 커맨드로 데몬 프로세스와 통신합니다.
- docker 이미지 만들기: docker image build (빌드)
- docker 이미지 공유: docker image push/pull (공유)
- docker 컨테이너 작동 : docker container run (실행)
Docker_Host
- Docker daemon
다른 Docker 데몬과 통신하거나 Docker API요청을 기다리고 이미지, 컨테이너, 네트워크, 볼륨 등을 관리하는 역할을 합니다. - Images
Docker컨테이너를 구성하는 파일 시스템과 실행할 애플리케이션 설정을 하나로 합친 것으로, 컨테이너를 생성하는 템플릿 역할을 합니다. - Containers
Docker 이미지를 기반으로 생성되며, 파일 시스템과 애플리케이션이 구체화 되어 실행되는 상태입니다.
Registry
- Docker 이미지 저장소로 기본적으로 Docker Hub라는 퍼블릭 레지스트리로 설정되어 있고 프라이빗 레지스트리도 생성할 수 있습니다. docker datacenter(DDC) 를 사용하는 경우, Docker Trusted Registry(DTR) 로 부터 pull, push 할 수 있습니다.
Docker 이미지와 컨테이너의 관계
이미지 변경 (레이어)
도커 이미지는 여러 레이어로 구성되어 있습니다. 예를 들어, application A라는 베이스 이미지가 있다고 가정해보겠습니다.
- application A
실행 파일과 라이브러리 등을 포함한 베이스 이미지입니다. - application A'
기존 이미지 위에 일부 파일(코드, 설정 등)을 수정하면 새로운 레이어가 추가됩니다. 이때 도커는 전체를 다시 만드는 게 아니라 변경된 부분만 새로운 레이어로 덧붙입니다. - application A"
다시 또 수정이 이루어지면, 또 하나의 변경 레이어가 추가됩니다.
이처럼 도커 이미지는 기존 레이어 + 변경 레이어의 누적 구조로 구성됩니다. 변경 사항이 누적될수록 여러 레이어가 겹쳐지며, 실제 이미지는 계층 구조를 가지게 됩니다.
컨테이너 실행 (프로세스 관점)
도커 컨테이너가 실행되면 도커 엔진은 해당 이미지의 **모든 레이어를 합쳐서 읽기 전용(Read-Only)**으로 마운트한 후, 여기에 하나의 읽기-쓰기 가능한 레이어를 최상단에 덧붙입니다.
- 이 최상단 레이어가 바로 컨테이너가 동작하면서 변경하는 파일, 로그 등이 저장되는 공간입니다.
- 따라서 컨테이너 내에서 파일을 수정하면, 실제로는 이 writable 레이어에만 적용되고, 이미지 자체는 변경되지 않습니다.
정리
- 도커 이미지는 레이어 방식으로 효율적이고 재사용 가능한 구조를 갖습니다.
- 컨테이너는 이미지의 모든 레이어 + 실행 중 발생하는 변경 사항을 포함하는 writable 레이어로 구성됩니다.
- 이 구조 덕분에 도커는 이미지 버전 관리와 컨테이너 실행을 빠르고 유연하게 할 수 있습니다.
'Infra' 카테고리의 다른 글
[Kubernetes] Kubernetes Deployment 이해하기 (0) | 2025.07.15 |
---|---|
[Kubernetes] Kubernetes란 무엇인가? (0) | 2025.07.15 |
[Kubernetes]Kubernetes 설치 및 설정 (rocky8 Linux 기준) (1) | 2025.07.09 |
[Docker] Dockerfile 구성하기 (1) | 2025.07.03 |
[Docker] Docker 명령어 정리 (1) | 2025.07.01 |