Docker 아키텍처
Docker는 크게 Docker Daemon, Docker Client, Docker Registry로 분리되어 있습니다.
Docker Daemon (dockerd)
- Docker Host라고 부르기도 합니다.
- Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크, 볼륨 등의 도커 오브젝트를 관리합니다.
Docker Client (docker)
- Docker 서버와 통신하기 위한 가장 중요한 기능을 수행합니다.
- docker run 명령어 수행 시 Docker Client가 해당 명령어를 REST API Call로 변환하여 Docker Daemon(
dockerd
)로 전송합니다.
Docker Registry
- Docker 이미지를 저장하는 저장소 역할을 합니다.
- default로 퍼블릭 docker registry인 Docker Hub를 사용합니다. 사용자가 프라이빗 레지스트리를 구축하여 사용할 수도 있습니다.
docker pull
, docker run
과 같은 명령어를 사용하면 사용자가 요청한 이미지를 docker registry에서 찾아서 가져오게 됩니다.
docker push
명령어 사용 시 docker는 이미지를 registry에 저장하게 됩니다.
Docker 내부에서 Docker 사용하기
Docker 내부에서 Docker를 사용하는 방법에는 크게 2가지가 있습니다.
Docker in Docker (DinD)
도커 내에서 도커 데몬을 추가로 실행하는 방식입니다. 실제 데몬을 동작시켜야 하기 때문에 --privileged
옵션을 사용하여 추가 권한을 부여하는 것이 필요합니다.