[Docker] 도커 아키텍처

도커는 클라이언트 - 서버 아키텍처를 사용합니다. 도커 클라이언트는 도커 데몬과 통신하여 도커 컨테이너를 빌드, 실행 및 배포하는 데 도움을 줍니다. 클라이언트는 데몬과 같은 시스템에서 실행되거나 원격으로 클라이언트와 데몬을 연결할 수 있습니다.

도커 데몬이란

도커 데몬은 다른 데몬과 통신하여 모든 서비스를 관리합니다. 데몬은 도커 API 요청을 통해 이미지, 컨테이너, 네트워크, 볼륨과 같은 도커 객체를 관리합니다.

도커 클라이언트

도커 클라이언트를 통해 사용자는 도커와 상호작용할 수 있습니다. 도커 명령어는 도커 API를 사용합니다. 클라이언트는 도커 터미널에서 명령어를 실행하면 터미널은 데몬에게 명령을 전달합니다. 클라이언트의 주요 목적은 도커 레지스트리에서 이미지를 가져오고, 호스트에서 실행하는 방법을 제공하는 것입니다. 클라이언트가 주로 사용하는 명령어는 docker build, docker pull, docker run입니다.

도커 호스트

여러 컨테이너를 실행하는 주체입니다. 데몬, 이미지, 컨테이너, 네트워크, 스토리지로 구성됩니다.

도커 레지스트리

모든 도커 이미지는 도커 레지스트리에 저장됩니다. 공개 레지스트리는 도커 허브에서 누구나 사용할 수 있습니다. 또한 개인 레지스트리를 운영할 수 있습니다. docker run 또는 docker pull 명령어를 사용하여 구성된 레지스트리에서 필요한 이미지를 가져올 수 있습니다. 이미지는 docker push 명령어를 사용하여 구성된 레지스트리에 푸시됩니다.

도커 객체

도커를 사용할 때 이미지를 생성하고, 컨테이너, 볼륨, 네트워크 및 기타 객체를 사용합니다.

도커 이미지

이미지는 도커 컨테이너를 생성하기 위한 지침입니다. 애플리케이션을 저장하고 전달하는 데 사용됩니다.

도커 컨테이너

컨테이너는 도커 이미지를 기반으로 생성된 실행 준비된 애플리케이션입니다. 도커 API 또는 CLI를 사용하여 컨테이너 시작, 중지, 삭제 또는 이동할 수 있습니다. 컨테이너는 이미지에서 정의된 리소스만 액세스할 수 있으며, 추가 액세스는 이미지 빌드 시 정의됩니다.

도커 스토리지

컨테이너의 쓰기 가능한 레이어 내에서 데이터를 저장할 수 있지만 이를 위해서 스토리지 드라이버가 필요합니다. 스토리지 드라이버는 도커 호스트에서 이미지와 컨테이너를 제어하고 관리합니다.

도커 스토리지 유형

  • 데이터 볼륨: 도커 호스트 파일 시스템의 디렉토리나 파일로서, 컨테이너의 파일 시스템에 직접 마운트될 수 있습니다.
  • 볼륨 컨테이너: 실행 중인 컨테이너가 생성한 데이터 상태를 유지하기 위해 도커 볼륨 파일 시스템이 도커 컨테이너에 마운트됩니다. 컨테이너 수명 주기와 독립적으로 호스트에 저장됩니다. 이를 통해 컨테이너 간 파일 시스템을 교환하고 데이터를 백업하기가 쉬워집니다.
  • 디렉토리 마운트: 호스트 디렉토리를 컨테이너의 볼륨으로 마운트할 수 있습니다.
  • 스토리지 플러그인: 도커 볼륨 플러그인을 사용하여 컨테이너를 아마존 EBS와 같은 외부 볼륨과 통합할 수 있습니다. 이를 통해 컨테이너의 상태를 유지할 수 있습니다.

도커 네트워킹

네트워킹은 도커 컨테이너에 완전한 격리를 제공합니다. 사용자는 여러 네트워크에 도커 컨테이너를 연결할 수 있습니다. 이는 필요한 OS 인스턴스를 줄여줍니다.

도커 네트워크 유형

  • 브리지: 기본 네트워크 드라이버입니다. 동일한 도커 호스트에서 여러 컨테이너가 통신할 때 사용할 수 있습니다.
  • 호스트: 컨테이너와 호스트 간에 격리가 필요 없을 때 사용됩니다.
  • 오버레이: Swarm 서비스 간의 통신을 가능하게 합니다.
  • None: 모든 네트워킹을 비활성화합니다.
  • macvlan: 컨테이너에 물리적 주소처럼 보이는 MAC 주소를 할당합니다.