Docker images와 Container

2022. 1. 16. 20:46DevOps/Docker & kubernetes

먼저 Docker의 구성요소에 대해 알아보도록 하자.

 

3파트로 나누어서 설명할 수 있는데 이전 파트에서 생성했던 docker에 관한것은 Client라고 볼 수 있다.

그리고 이것이 설치된 도커 엔진(deamon)은 host에 설치가 되어 있는데 이것을 바탕으로 컨테이너와 이미지를 관리한다.

images를 관리하기 위해서는 Registry(이미지저장소)를 활용하여 build를 해서 직접 관리하거나 pull을 하여 리모드에서 가져오는 방법이 있다. 이런 이미지를(타인에게 공유받은것, 혹은 자신이 만든것)을 가져와서 실행을 하게 되면 컨테이너가 된다.

도커 이미지와 컨테이너는 도커에서 가장 기본적인 단위이며 중요한 개념이다. 이미지는 컨테이너를 실행할때 필요한 요소로 컨테이너의 목적에 맞는 바이너리와 의존성 등이 설치되어 있으며 여러 개의 계층으로 이루어진 바이너리 파일로 형성되어 있다.

 

컨테이너는 이미지를 통해 만들어진 프로세스 라고 보면 된다. 호스트와 다른 컨테이너로부터 격리되어있으며 격리된 시스템 자원과 네트워크를 사용하는 프로세스이다. 이미지는 읽기 전용으로만 사용하기 때문에 컨테이너 상에서 어떠한 작업을 하더라도 이미지에 영향을 미치지 않는다. 그렇기에 이미지와 컨테이너는 1:N관계를 지니고 있다.

 

도커 이미지의 이름 구성은 4가지 형식을 띈다

 

usernmae/nginx:1.21

모든 구성요소가 들어간 이미지 형식이다. 저장소 이름/이미지 이름/이미지 태그(버전 등) 형식이다.

=> 어떤 저장소에서 어떤 이미지를 어떤 버전으로 가저올 것이다.를 저장할 수 있다.

 

usernmae/nginx

저장소이름/이미지이름의 형식이다.

테그가 생략이 되어있기에 최신 리비전을 가리키는 lastest로 인식한다.

 

nginx:lats

이미지이름/이미지 태그의 형식이다.

저장소 이름이 생략되어 있기에 기본 저장소인 도커 허브로 인식하게 된다.

 

nginx

이미지이름의 형식이다.

모두 생략했기 때문에 도커 허브에서 최신 버전을 가져올때 사용할 수 있는 명령어이다.

 

기본적으로 도커 이미지는 로컬에서도 사용이 가능하지만 다른 외부 저장소가 없으면 조금 사용하기 곤란하다. 그렇기에 AWS ECR이나 docker hub등을 사용해서 관리하는것이 좋다.