본문 바로가기
개발 - Coding/Infra

도커 컨테이너의 생애주기와 조작 실습

by dev_jinyeong 2023. 1. 12.

컨테이너 생애주기 개요

도커 컨테이너는 이전 글에서 설명했던 것처럼 일회용품처럼 쓰고 버리는 방식으로 활용한다.

컨테이너가 만들어지고 버리는 과정은 컨테이너의 생애주기라고 말한다.

컨테이너의 생애주기는 생성, 실행, 정지, 폐기 네 가지로 나뉜다.

도커 컨테이너 생애주기

도커 컨테이너 생애주기와 관련된 명령어

컨테이너의 생성은 docker (container) run 으로 실행할 수 있다.

이는 축약된 명령어로 docker container create, docker container start, docker image pull 세 가지 명령어가 한꺼번에 수행되는 방식이다.

docker container create은 컨테이너의 생성, docker container start은 컨테이너의 실행, docker image pull은 컨테이너를 만들기 위한 이미지 가져오기 명령어이다.

컨테이너 정지는 docker (container) stop으로 할 수 있다.

컨테이너 삭제는 docker (container) rm으로 할 수 있다.

컨테이너 목록을 출력하는 명령어

컨테이너 생애주기를 관리하려면 어떤 컨테이너가 존재하는지 알아야 할 필요가 있다.

컨테이너의 목록 출력은 docker ps 또는 docker container ls로 가능하다.

명령어 동작
docker (container) run 컨테이너 생성 및 실행
docker container create 컨테이너 생성
docker container start 컨테이너 실행
docker image pull 도커 이미지 불러오기
docker (container) stop 컨테이너 종료
docker (container) rm 컨테이너 삭제
docker ps 또는 docker container ls 컨테이너 목록 불러오기

도커 명령어의 인자

위에서 살펴본 명령어들은 이대로만 쓰이는 것이 아니라 여러 인자를 붙여 실행된다.

인자를 붙여 실행할 경우 원하는 옵션을 붙여서 컨테이너를 조작할 수 있다.

예를 들어 docker ps 명령어는 -a를 붙여 모든 컨테이너를 조회할 수 있다.

-a 인자를 붙이지 않을 경우 현재 실행중인 컨테이너만 조회할 수 있다.

아파치 웹 서버를 이용해서 웹 페이지 띄우기

1. 이미지 가져오기, 컨테이너 생성, 컨테이너 실행

 

docker run --name apache-webserver -d httpd 를 입력한다.

  • --name은 컨테이너의 이름을 지정하는 인자이다.
  • -d는 detached로 백그라운드 실행을 의미한다. -d=true나  -d로 명시되지 않았을 경우 foreground 상태로 실행된다. 이 경우 input과 output이 console에 출력되게 된다.
  • httpd는 도커 이미지 이름을 명시하는 것이다. httpd는 아파치 이미지이다.

다음과 같은 결과를 확인할 수 있다.

Unable to find image 'httpd:latest' locally
latest: Pulling from library/httpd
934ce60d1040: Pull complete 
e0c9391b348d: Pull complete 
e106b5ae0073: Pull complete 
d1798dacff3a: Pull complete 
9ddc7322f175: Pull complete 
Digest: sha256:ee2117e77c35d3884c33e18398520c8817879b3b15d9faca93652eb3794e8950
Status: Downloaded newer image for httpd:latest
72526a0d0ed3390b633b00d9b774db0949881e352fdeda6c9379f24a1ebba8ba

아무런 이미지를 다운로드하지 않은 상태이므로 먼저 httpd 이미지를 다운로드한다.

단, 버전을 명시하지 않았으므로 가장 최신 버전인 httpd:latest를 다운로드한다.

이미지를 다운로드한 다음에는 이미지를 바탕으로 컨테이너를 생성한다.

마지막에는 컨테이너 ID가 출력된다.

 

2. 실행중인 컨테이너 확인

 

 

docker ps 또는 docker container ls를 이용해서 실행중인 컨테이너를 확인한다.

다음과 같은 결과를 확인할 수 있다.

앞에서부터 살펴보면 CONTAINER ID는 말 그대로 컨테이너의 아이디를 나타낸다.

실제로는 64글자이지만 여기서는 12글자만 출력된다.

IMAGE는 컨테이너를 생성한 도커 이미지의 이름이다.

COMMAND는 컨테이너 실행 시에 실행하도록 설정된 프로그램의 이름이다.

CREATED는 컨테이너 생성 후 경과된 시간이다.

STATUS는 컨테이너의 현재 상태이다.

PORTS는 컨테이너에 할당된 포트 번호이다. 아파치의 경우 80이 기본 포트이므로 80으로 출력된다.

NAMES는 컨테이너 이름이다.

 

3. 실행중인 컨테이너 종료

 

docker stop apache-webserver 또는 docker container stop apache-webserver를 이용해 컨테이너를 종료한다.

종료할 경우 컨테이너 이름이 출력된다.

apache-webserver

4. 컨테이너 종료 확인

 

컨테이너가 종료되었는지 docker ps -a 또는 docker container ls -a로 확인할 수 있다.

컨테이너가 종료되었으므로 STATUS에 종료되었다고 뜨는 것을 확인할 수 있다.

 

5. 컨테이너 삭제

 

docker rm apache-webserver 또는 docker container rm apache-webserver로 컨테이너를 삭제할 수 있다.

컨테이너 종료와 동일하게 컨테이너 이름이 출력된다.

apache-webserver

 

6. 이미지 삭제

 

마지막으로 사용했던 이미지를 docker image rm httpd를 이용해서 지울 수 있다.

다음과 같은 결과를 확인할 수 있다.

Untagged: httpd:latest
Untagged: httpd@sha256:ee2117e77c35d3884c33e18398520c8817879b3b15d9faca93652eb3794e8950
Deleted: sha256:f86ee7d363b18d95c98c77235fc32f6dbf1bd99ad69e1a4160d9047f520f320a
Deleted: sha256:abd2e6582f94bac7924c8770971d8fa4540f8767b03d52cba7fb4dfe5d36812e
Deleted: sha256:f2372e9aae0bcb9118c13241df47dcfa85b04883ff867d27d850f3727f34427b
Deleted: sha256:422dbb594c3ecc7e51ad4f9d53db0b2db7f0bfb9e834750d74c96b3e5742b467
Deleted: sha256:4308bb6033634dee7bac4308a5f7f9548f1ddff2e61e3e5d0d1a94ae24913681
Deleted: sha256:afd7e44a4e086678d666c3721e0e45dc85045db6952832135ea2d32e1a4db966