도커 이미지와 컨테이너
도커 구성요소
- Client: 지난 문서에서 설치했던 docker 명령어가 client 역할을 수행한다.
- Docker Host: docker engine인 docker daemon은 우분상에 깔려있고, docker engine이 띄워져 있는 서버를 docker host라고 한다. 이 host는 이미지와 컨테이너를 관리한다. 이미지는 어떻게 관리될까? 이미지는 직접 build하는 방법이 있고, docker pull을 통해 remote에서 가져오는 방법이 있다. 이미지를 통해 컨테이너를 만든다.
- Registry: 이미지 저장소, 이미지 저장소에서 받은 이미지들을 local docker host에 저장할 수 있다.
이미지와 컨테이너
이미지와 컨테이너는 도커에서 사용하는 가장 기본적인 단위이다. 이미지:컨테이너는 1:N의 관계이다.
- 이미지: 컨테이너를 만들 때 필요한 요소로, 컨테이너의 목적에 맞는 바이너리와 의존성이 설치되어 있다. 예를 들어 우리가 가상머신을 설치할 때에도 ami 이미지나 iso 이미지를 필요로 한다. 이미지는 여러 개의 계층으로 된 바이너리 파일로 존재한다.
- 컨테이너: 호스트 및 다른 컨테이너로부터 격리된 시스템 자원과 네트워크를 사용하는 프로세스이다. 이미지를 읽기 전용으로 사용하여 변경사항은 컨테이너 계층에 저장한다. 즉, 컨테이너에서 어떤 작업을 하든 이미지는 영향을 받지 않는다. 이 때문에 이미지와 컨테이너는 1:N의 관계를 가질 수 있다.
도커가 이미지를 만들 때 사용하는 파일이 Dockerfile이다. 이 Dockerfile로 build 를 하면 도커 이미지가 만들어진다. 도커 이미지를 도커 런 명령어를 통해 실행시키면 도커 컨테이너가 된다.
이미지 이름 형식
저장소이름/이미지이름:이미지태그
- myfolder/nginx -> 태그를 생략하면 latest 버전
- myfolder/nginx:1.21
- nginx:1.21 -> 저장소이름을 생략하면 기본 저장소인 도커 허브로 인식
- nginx
도커 이미지 저장소 (Image Repository)
이미지 저장소는 도커 이미지를 관리하고 공유하기 위한 서버 어플리케이션이다. 이미지 저장소는 크게 public(공개형) 과 private(비공개형)으로 나눌 수 있다.
- public(공개형): dockerhub, QUAY
- private (비공개형): AWS ECR, harbor, docker registry를 띄워서 비공개로 사용 (아래 그림 참조)