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 를 추가하여 변경이 가능하도록 한다. 이를 쉽게 이해하기 위해서 아래 이미지를 참고하면 된다.
Brief explanation of Container Layer and 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 된다.


AWSKRUG Container Hands-On #1 - 모두의 Docker

댓글

이 블로그의 인기 게시물

About Kafka Basic

About JVM Warm up

About ZGC

Spring Boot Actuator readiness, liveness probes on k8s

About G1 GC

sneak peek jitpack

About idempotent

C 언어 구조체의 포인터 멤버 변수

Synology NAS에 MariaDB 10에 Mysql workbench로 원격접속하기

About Websocket minimize data size and data transfer cost on cloud