architecture

Docker Architecture

doc

  • client-server architecture
    • Docker Client가 Docker Daemon에게 building, running, distributing 등을 명령한다.
    • client와 daemon은 같은 시스템에 존재할 수도 있고, remote로 접근 가능하다.

Docker Daemon

docker daemon (dockerd)은 docker api request를 처리한다. image, container, network, volume 등의 Docker Objects를 관리한다.

Docker Client

유저는 docker client (docker)를 사용하여 Docker와 상호작용할 수 있다. docker run 등의 command를 docker api를 통해서 dockerd에게 명령한다. client는 여러개의 Daemon와 소통 가능하다.

Docker Registries

ex) Docker hub

Docker Registriy는 Docker image를 저장한다. Docker hub를 기본으로 하지만, 3rd party, private registry를 사용 가능하다.

docker pull, docker run를 사용할 때, 필요한 image들은 registry에서 가져온다. docker push 명령어를 통해서 registry에 저장한다.

Docker Objects

Images

Docker container를 생성하기 위한 read-only template

image는 다른 image를 기반으로 생성될 수 있다. ex) ubuntu image => ubuntu image + web application + 설정 값

image를 만들기 위해선 문법에 맞춰서 Dockerfile을 작성해야한다. Dockerfile의 각 statements는 layer를 생성한다. Dockerfile이 수정되고 다시 빌드 하면 변경된 layer만 다시 빌드한다. 이러한 layering을 통해서 도커 이미지는 가볍고 빠르다.

Containers

runnable instance of image

container는 하나 이상의 networks에 연결 가능하고 Storage에 연결할 수 있다. 또한 특정 시점의 컨테이너 상태를 기반으로 새로운 이미지를 생성할 수 있다.

기본적으로 컨테이너는 다른 컨테이너나 호스트 머신과 격리 되어있다. 사용자가 network, storage를 붙여서 격리를 낮추고 의존성을 부여할 수 있다.

영구 저장을 하기 위해서는 volume을 마운트 하는 등의 영구 저장소를 활용해야한다.