Docker는 클라이언트-서버 아키텍처를 사용한다.
Docker 클라이언트는 Docker 데몬과 통신하며, 이 데몬은 Docker 컨테이너를 빌드, 실행 및 배포하는 작업을 수행한다. Docker 클라이언트와 데몬은 REST API, UNIX 소켓 또는 네트워크 인터페이스를 사용하여 통
신한다. 이때 또 다른 Docker 클라이언트는 Docker Compose로, 컨테이너 세트루 고성된 애플리케이션으로 작업할 수 있따.

Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크, 볼륨과 같은 Docker 객체를 관리한다. 데몬은 다른 데몬과 통신하여 Docker 서비스를 관리할 수도 있다.
많은 사용자가 Docker와 상호작용하는 주요 방법으로, docker run과 같은 명령을 사용하여 도킹된 이미지를 실행할 수 있다.
Docker 이미지를 저장하는 곳으로, Docker Hub는 누구나 사용할 수 있는 공개 레지스트리이며 Docker는 기본적으로 Docker Hub에서 이미지를 찾는다. 이때 개인 레지스트리를 직접 실행할 수도 있다.
이미지 : Docker 컨테이너를 만드는 지침이 포함된 읽기 전용 템플릿. 다른 이미지를 기반으로 하며 정의를 더 추가하는 형태로 만들 수도 있다.
ex) ubuntu 이미지를 기반으로 한 Apache 웹서버와 애플리케이션, 애플리케이션을 실행하는 데 필요한 구성 세부 정보를 설치하는 이미지 빌드
컨테이너 : 이미지의 실행 가능한 인스턴스.
Docker 이미지 : 붕어빵 틀
Docker 컨테이너 : 붕어빵 틀로 여러 개 찍어내기
❓Dockerfile이 이미지를 빌드하면 알아서 컨테이너도 실행이 되는걸까?
이미지 빌드와 컨테이너 실행은 별개의 단계이다. 이미지는 컨테이너를 실행하기 위한 템플릿 역할만 하고, 실제로 컨테이너를 실행하려면 별도의 docker run 명령을 통해 실행해야 한다.
이미지 빌드 단계 : Dockerfile을 작성한 뒤, docker build 명령을 사용하여 Dockerfile을 기반으로 이미지를 빌드한다. 이 단계에서는 이미지가 생성될 뿐, 컨테이너는 아직 실행되지 않는다.
컨테이너 실행 단계 : 빌드된 이미지를 기반으로 컨테이너를 실행하려면 docker run 명령을 사용한다. 이때 이미지로부터 새로운 컨테이너가 생성되고, 이미지에 정의된 환경과 애플리케이션이 컨테이너 내에서 실행된다.
➡️ 이때 CI/CD 파이프라인에 Docker 이미지 빌드와 컨테이너 실행 단계를 포함시켜 자동화하는 것이다.
app 컨테이너, db 컨테이너 등 여러 컨테이너를 연결하여 실행할 수 있다. 이 경우 네트워크를 관리해야 하고, 컨테이너를 해당 네트워크에 연결하는 데 필요한 모든 플래그 등을 관리해야 한다.
Dockerfile vs. Compose 파일
Dockerfile은 컨테이너 이미지를 빌드하는 지침을 제공하는 반면 Compose 파일은 실행 중인 컨테이너를 정의한다. Compose 파일은 특정 서비스에 사용할 이미지를 빌드하기 위해 Dockerfile을 참조하는 경우가 많다.
수업자료