Docker overview - image, container, engine
Image 와 Container 의 이해
이미지 - 컨테이너를 생성할 때 필요한 요소이며, 여러 개의 계층으로 된 바이너리 파일로 존재하며, 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용된다.
컨테이너 - 이미지를 읽기 전용으로 사용하되 이미지에서 변경된 사항만 컨테이너 계층에 저장하므로 컨테이너에 무엇을 하든지 원래 이미지는 영향을 받지 않는다.
- Image 는 특정 Application 에 필요한 코드와 라이브러리와 의존성 등을 가진 불변(Immutable, unchangeable) 파일이다.
- Image 는 read-only template 이다. 특정 시점의 가상 환경 혹은 Application 을 나타내는 일종의 스냅샷으로 이해할 수 있다.
→ 이러한 Docker 의 훌륭한 특징 중의 하나로, 개발자들이 안정적이고 단일한 환경에서 test 하고 실험할 수 있는 환경을 만들어 낸다.
- Container 는 Image 를 단지 run 한 것이다. Container 를 생성하게 되면, 불변한 Image 의 최상단에 Writable Image Layer 를 추가하여 변경이 가능하도록 한다. 이를 쉽게 이해하기 위해서 아래 이미지를 참고하면 된다.

Image 와 Container 는 면밀히 관련되어 있다. Image 는 Container 없이 존재할 수 없으며, Container 는 존재하기 위해서 Image 를 run 해야 한다. 따라서, Container 는 Image 에 의존적이고, run-time 환경을 생성하기 위해서 Image 를 사용한다. Image 와 Container 의 개념은 Docker 의 근본적인 component 로써 존재한다.
정확하게 일치하는 개념은 아니지만, 객체 지향 관점에서 Docker 의 생태계를 비추어 볼 때 유사한 지점이 있다. Image 를 class 에 비유할 수 있으며, Container 를 해당 class 의 Instance 로 비추어 볼 수 있을 것 같다.
Docker Engine
Docker Engine 은 client-server Application 이다.
docker ps → /usr/ bin/docker → /var/run/docker.sock → docker daemon
- Docker daemon
dockerd 는 volumes, networks, containers, images 같은 Docker Objects 들을 관리하고 Docker API 요청을 받고 있다. daemon 은 또한 다른 daemon 과의 통신이 가능하다.
- Docker client
CLI 를 통해 docker 명령어를 사용하여 Docker 와 상호작용을 할 수 있다. docker run 과 같은 명령어를 사용했을 때, client 는 해당 명령어를 dockerd 에 전송한다. docker 명령어는 Docker API 를 사용한다. client 는 하나 이상의 daemon 과 통신이 가능하다.
- Docker registires
docker image 들을 저장하는 공간이다. Docker Hub 는 public registry 로 누구나 사용이 가능하고, Docker 는 default 로 Docker Hub 에서 image 를 찾는다. docker pull 혹은 docker run 명령어를 사용했을 때, 필요한 Image 를 registry 로 부터 가져온다. 또한 docker push 명령어를 사용했을 때, 해당 이미지는 설정된 registry 로 push 된다.

댓글
댓글 쓰기