본문 바로가기
docker

[Docker] Image와 Container의 관계, 이미지로 컨테이너 빌드하기

by dev여름 2024. 9. 15.
반응형

이 글은 Udemy 강의 Docker & Kubernetes: The Practical Guide [2024 Edition]을 수강하며 정리한 내용입니다.

 

Image vs Container

Container

모든것을 포함하는 작은 패키지 : 웹사이트, node 서버!

어떤 애플리케이션을 구동할 때 필요한 모든것 ⇒ 소프트웨어의 실행 단위

Image

컨테이너를 위한 템플릿/청사진

이미지에는 코드와, 코드를 실행하는데 필요한 도구가 들어있으며 실제 실행은 컨테이너에서 한다.

컨테이너와 이미지의 관계

이미지에는 모든 설치 지침과 코드가 포함되어있다.

다른 머신, 다른 서버에서 같은 이미지를 구동시킬 수 있다.

⇒ 즉, 하나의 이미지여러 컨테이너를 구동시킬 수 있다.

비유가 적절한건지는 모르겠으나 내가 이해한 바로 다시 비유를 해보자면

이미지는 레시피, 컨테이너는 이 레시피로 만든 요리의 개념인 것 같다.

 

 

이미지를 사용해 컨테이너 빌드하기 1 - Docker Hub

도커 이미지는 docker hub에서 필요한 이미지를 찾을수도 있고, 직접 빌드를 할수 있기도 하다.

먼저 docker hub의 node.js 이미지를 사용하고 실행하는 실습부터 진행한다.

node 이미지는 node 어플리케이션 컨테이너를 생성할 수 있도록 하는 이미지이다.

docker run node

run 명령어는 node.js를 위한 이미지(docker hub에 존재하는)를 갖고 컨테이너를 생성하는 명령어이다.

node 이미지가 내 로컬에 없기 때문에 Hub에서 이미지를 내려받고 컨테이너를 빌드한다.

(이미지를 내려받는다고 해서 우리 컴퓨터에 노드가 설치되는게 전혀 아니다. 도커 환경에만 설치됨)

컨테이너 생성이 잘 되었는지 확인해보자.

docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

엉? 아무것도 없네?

docker ps -a

CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS                          PORTS     NAMES
3d8b3cbcaeb8   node      "docker-entrypoint.s…"   About a minute ago   Exited (0) About a minute ago             thirsty_aryabhata

docker ps -a 는 종료된 컨테이너까지 모두 보여준다. Exited상태인걸 보니 컨테이너가 종료되었다.

현재 실습으로 진행하고 있는 node의 경우 컨테이너 내부에서 실행할 수 있는 interactive shell 이 존재하는데, 위의 docker run 명령은 컨테이너에서 아무런 상호작용을 하지 않고 종료되었다.

컨테이너는 주변 환경과 분리되어 실행되는 특성이 있기 때문에, 애플리케이션에서 뭔가를 하려면 컨테이너 내부에 접속을 해야한다.

이번에는 -it 옵션과 함께 컨테이너를 실행한다. -it옵션은 docker에게 해당 컨테이너에서 interactive session을 실행하겠다는 의미이다.

docker run -it node

Welcome to Node.js v22.8.0.
Type ".help" for more information.
> 7-3
4

노드 애플리케이션이 컨테이너에서 실행되고 있을때 Status가 Running으로 뜨고 있다.

컨테이너 종료를 하려면 ctrl + C를 두번 누른다.

다시 docker ps -a로 컨테이너 확인을 해보면, IMAGE 부분에 같은 node라는 이미지로 컨테이너가 실행되었다가 종료된 것을 확인할 수 있다.

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS     NAMES
48f80cff1528   node      "docker-entrypoint.s…"   5 minutes ago    Exited (0) 3 minutes ago              vigorous_davinci
3d8b3cbcaeb8   node      "docker-entrypoint.s…"   18 minutes ago   Exited (0) 18 minutes ago             thirsty_aryabhata

 

글이 너무 길어져서 <이미지를 사용해 컨테이너 빌드하기 2>는 다음 글에서 정리한다.

 

 

함께 보면 좋은 글

2024.09.14 - [docker] - [Docker] Container란? 컨테이너의 필요성, VM과 차이

 

[Docker] Container란? 컨테이너의 필요성, VM과 차이

이 글은 Udemy 강의 Docker & Kubernetes: The Practical Guide [2024 Edition]을 수강하며 정리한 내용입니다. Docker란? Container란?Docker란?컨테이너를 만들고 관리하는 기술컨테이너란?소프트웨어의 표준화된 단

dev.hasummer.com

 

반응형