임대일

2.2 도커(Docker) 이미지와 컨테이너: 이미지와 컨테이너 본문

도커/개발자를 위한 쉬운 도커

2.2 도커(Docker) 이미지와 컨테이너: 이미지와 컨테이너

limdae94 2024. 5. 30. 13:43
 

개발자를 위한 쉬운 도커 | 데브위키 - 인프런

데브위키 | 현업 개발자가 도커를 사용한 경험을 녹여낸 새로운 커리큘럼으로 기존 교재 및 강의와 차별된 강의를 제공합니다. 단순한 명령어 사용법이 아닌 도커를 왜 사용해야하는지 대한 근

www.inflearn.com

 

1. 프로그램과 프로세스

이번 시간에는 이미지를 컨테이너로 실행한다. 실행하는 과정에서 이미지와 컨테이너의 차이에 대해 학습한다.
먼저 프로그램과 프로세스의 차이에 대해서 학습한다.

 

프로그램과 프로세스

 

노트북을 새로 구매하고 크롬 브라우저를 사용한다고 생각해보자. 먼저 구글에서 크롬 설치 파일을 다운받아서 크롬을 설치할 것이다. 그러면 크롬 애플리케이션은 C 드라이브의 특정 경로에 설치되는데, 이 시점에서 사용자는 프로그램이 파일 시스템의 공간을 차지하도록 설치한 것이다. 프로그램인 상태에서는 CPU 와 메모리 같은 컴퓨터의 리소스를 사용하지 않고, 오로지 스토리지의 디스크 공간만 차지하는 상태이다.

크롬 설치
여러 개의 크롬 실행

 

파일 형태의 프로그램을 실행하면 프로세스가 된다. 하지만 이 크롬 브라우저 창을 여러 개를 실행할 수도 있다. 그리고 크롬 브라우저를 아주 많이 띄우게 되면 컴퓨터가 느려질 것이다. 각 프로세스들이 CPU 와 메모리를 사용하고 있기 때문이다. 따라서 프로그램은 디스크에 저장되어서 실행 가능한 상태 파일이다. 이 프로그램을 실제로 실행해서 실행 중인 상태인 것이 바로 프로세스이다.

 

2. 이미지와 컨테이너

이미지와 컨테이너

 

프로그램 한 개는 여러 개의 프로세스로 실행시킬 수 있는데, 각 프로세스는 OS에서 CPU와 메모리를 할당받아서 사용한다. 이미지와 컨테이너의 관계도 해당 프로그램과 프로세스의 관계와 동일하게 이해하면 된다. 이미지는 프로그램이 실행되기 위한 환경이 모두 포함되어 있는 파일 시스템이고, 해당 이미지를 실행한 것이 바로 컨테이너이다.

 

컨테이너를 실행시키리면 해당하는 이미지를 가지고 있어야 한다. 이미지는 압축 파일의 형태로 호스트 머신의 특정 경로에 위치한다. 하나의 이미지로 여러 개의 컨테이너를 실행할 수도 있고, 동일한 이미지에서 실행한 컨테이너는 내부에서 모두 동일한 프로세스로 실행된다. 그리고 이미지인 상태에서는 디스크 공간만 차지하게 된다.

이미지를 컨테이너화

 

이미지를 컨테이너로 실행하는 순간부터 CPU 와 메모리를 사용하게 된다. 일반적인 프로세스와 차이가 있다면 컨테이너는 가상화 기술이기 때문에 이미지를 컨테이너로 실행할 때는 격리된 공간이 만들어진다는 것이다. 그리고 이 격리된 공간에서 이미지는 사전에 지정해 놓은 프로그램을 프로세스로 실행한다.

 

정리하자면 이미지를 컨테이너로 실행시키는 것은 이미지에 저장되어 있는 모든 요소들을 격리된 공간으로 만든 다음에 격리된 공간 안에서 프로그램을 프로세스로 실행시키는 단계를 거치는 것이다. 이번 실습에서는 로컬 디스크에 저장되어 있는 도커 이미지를 조회할 수 있는 도커 이미지 ls 명령에 대해 학습한다.

 

3. docker image ls

docker image ls (이미지명)

  • docker image ls (이미지명): 로컬 이미지 조회

실습용 PC에 다운로드 되어 있는 이미지를 도커 이미지 ls 명령을 사용해서 조회할 수 있다.
도커 이미지 ls 명령 다음에 이미지의 이름을 입력하면 특정 이름을 갖는 이미지만 조회할 수도 있다.

 

docker image ls

docker image ls

 

현재 PC에 있는 이미지가 조회되는 것을 확인할 수 있는데, 이전 파트에서 Nginx를 실행했었기 때문에 온라인에서 다운받았던 Nginx 이미지를 확인할 수 있다. 다음으로 Docker 이미지 ls 뒤에 nginx라는 이미지 이름을 입력하면 여러 개의 이미지가 있을 때에도 nginx 이미지만 조회할 수 있다.

docker image ls nginx

  • docker image ls nginx: 특정 이미지 조회

위의 그림 출력 결과를 살펴보면 다음과 같다.

  • REPOSITORY: 이미지의 이름을 의미
  • TAG: 이미지의 버전
  • IMAGE ID: 이미지 고유 식별 번호
  • CREATE: 생성일자
  • SIZE: 파일 크기

 

4. 하나의 이미지로 여러 컨테이너 실행

docker run -d --name {컨테이너명} 이미지명, docker ps, docker rm -f

  • docker run -d --name {컨테이너명} 이미지명: 컨테이너 실행
  • docker ps: 실행 중인 컨테이너 리스트 조회
  • docker rm -f: 실행 중인 컨테이너 삭제

하나의 이미지로 여러 컨테이너를 실행할 수 있다. 이번 실습에서는 동일한 Nginx 웹 서버 3개를 실행한다. docker run 명령을 확인하면 --name 옵션을 통해서 컨테이너의 이름을 지정할 수 있다. docker run -d --name {컨테이너명} 이미지명 에서 컨테이너명은 시스템 내에서 중복될 수 없고, -d 옵션을 사용하면 컨테이너의 로그가 터미널을 점유하지 않고 컨테이너를 백그라운드로 실행시킬 수 있다. 이전 실습에서 nginx 이미지를 실행하고 콘솔창에 출력된 로그가 더이상 출력되지 않는다는 것이다.

 

그리고 docker ps는 실행 중인 컨테이너 리스트 조회이다. ps는 프로세스(Process)의 줄임말이다. 그리고 docker rm 명령을 사용하면 컨테이너를 삭제할 수 있다고 지난 시간에 학습했는데, 이 rm 명령으로는 실행 중인 컨테이너를 삭제할 수 없다. 그래서 실행 중인 컨테이너를 삭제하려면 docker rm 뒤에 -f 옵션을 함께 작성해야 한다.

 

 

docker run -d --name multinginx1 nginx

nginx 컨테이너 백그라운드 실행 및 실행

docker run -d --name multinginx1 nginx 으로 nginx 웹 서버가 포함된 세 개의 컨테이너를 백그라운드에서 실행한다.

 

docker ps

실행 중인 컨테이너 확인하기

docker ps 으로 실행된 컨테이너를 확인한다. 실행 중인 컨테이너의 고유 식별 번호(Container ID)가 모두 다르다는 것을 확인한다. 그리고 각 컨테이너가 사용하는 이미지는 nginx 이며 컨테이너가 생성된 시간과 컨테이너가 사용하는 포트 그리고 컨테이너의 이름을 확인할 수 있다.

 

docker rm multinginx1

docker rm nultinginx1

  • docker rm multinginx1: 컨테이너 삭제
  • docker rm -f multinignx1: 실행 중인 컨테이너 삭제

실행 중인 컨테이너를 docker rm multinginx1 명령으로 종료를 시도하면 에러 메시지를 응답받고 해당 컨테이너는 종료되지 않는다. 실행 중인 컨테이너를 종료하기 위해 해당 컨테이너를 종료하거나 -f 옵션을 함께 작성해야 한다는 메시지를 콘솔창에서 확인할 수 있다.

 

docker rm -f multinginx1 multinginx2 multinginx3

실행 중인 컨테이너 삭제하기

  • docker rm -f multinginx1 multinginx2, multinignx3: 실행 중인 여러 컨테이너 삭제하기

docker rm 명령은 여러 개의 컨테이너도 한 번에 삭제가 가능하다. 띄어쓰기를 기준으로 삭제할 컨테이너명을 작성하면 된다. 다음 시간에는 이미지의 메타데이터에 대해 학습한다.