[docker] 03. container 의 life cycle
- -
이번 포스트에서는 pull로 가져온 이미지를 container를 통해 실행하는 방법을 살펴보자. docker hub를 통해 pull 명령으로 가져온 이미지는 아래의 절차에 따라 사용 가능하다.
- run: image를 이용하는 container를 생성 한다. 이때 자동으로 start가 불리면서 process가 시작된다.
- start: container의 process를 시작한다. 하나의 container에서 여러 개의 process를 동작시킬 수 있다.
- stop: 동작중인 process를 중지시키며 container를 중지하는 것은 아니다.
- rm: container를 삭제한다. 기본적으로는 동작중인 process가 있다면 삭제할 수 없다.
- rmi: image 자체를 삭제한다.
다음 포스트에서는 관련 명령어들을 docker desktop 기반으로 처리하는 방법을 알아보고 마지막에 command line 형태로 정리해보자.
docker desktop으로 container 시작하기
docker desktop 활용
docker desktop을 이용해서 container 상에서 image를 실행해보자. docker desktop을 실행 후 images에서 httpd에 커서를 올려보면 버튼들이 나타난다.
먼저 [RUN]앞의 […]을 클릭하면 이미지 생성 과정을 알 수 있는 Inspece, 새로 이미지를 가져오는 Pull, 현재 이미지를 등록하는 Push to Hub와 함께 이미지를 삭제할 수 있는 [Remove]가 보인다.
[Run]을 선택하면 기본 설정을 이용해서 Container를 실행시킬 수 있다.
하지만 바로 [Run]을 실행하면 컨테이너의 이름이 자동 생성되서 관리가 어렵기 때문에 이름을 지정하는 것이 좋다. [Optional Settings]를 클릭하면 아래처럼 여러가지 설정 내용이 나오는데 [Container Name]항목에 my_ws와 같은 이름을 주고 [Run]을 클릭해보자.
동작 확인
docker desktop의 [Containers/Apps] 항목에는 방금 실행시킨 my_ws가 동작하고 있는 것을 알 수 있다. 하나의 이미지를 이용해 여러 개의 container를 생성할 수 있는데 아래는 my_ws, your_ws라는 두 개의 container를 생성한 모습이다.
컨테이너 위에 커서를 올리면 여러가지 작업을 할 수 있는 메뉴가 표시된다.
이 화면은 여러 가지 동작을 내포하고 있다.
먼저 컨테이너를 클릭하면 실행 로그(LOGS)를 보거나 현재의 설정을 조사하거나(INSPECT), CPU, MEMORY, 네트워크, 디스크 성능에 대한 정보(STATS)를 알 수 있다.
컨테이너 제어
또한 아래의 버튼들을 이용해서 컨테이너를 제어할 수 있다.
- CLI: 컨테이너의 콘솔에 접근하는 command line interface
- STOP: 컨테이너 동작 중지
- RESTART: STOP --> START
- DELETE: 컨테이너 삭제
컨테이너를 stop 시키면 아래와 같이 회색으로 반전된다. 다음은 your_ws를 중지시킨 상태이다.
이제 기존의 STOP 자리에 START 버튼이 표시되었고 다시 시작하려면 이 버튼을 클릭하면 된다.
command line으로 container 실행하기
개인적으로 GUI를 정말 사랑하지만 왠지 linux 관련 기술들은 cli 기반의 명령들을 알아두는 편이 맘이 편하다.
docker run
새로운 container를 실행시키기 위해서는 docker run 명령을 사용한다.
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
여기서 options 항목에 대표적으로 --name 으로 container의 이름을 지정할 수 있다. 따라서 httpd 이미지를 이용해서 my_ws_2라는 이름의 컨테이너를 실행하키기 위해서는 아래의 명령을 사용할 수 있다.
C:\Users\itsmeyjc>docker run --name my_ws_2 httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.4. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.4. Set the 'ServerName' directive globally to suppress this message
[Sun Aug 29 12:18:12.824918 2021] [mpm_event:notice] [pid 1:tid 140225578972288] AH00489: Apache/2.4.48 (Unix) configured -- resuming normal operations
[Sun Aug 29 12:18:12.825111 2021] [core:notice] [pid 1:tid 140225578972288] AH00094: Command line: 'httpd -D FOREGROUND'
컨테이너 중지
실행중인 container를 중지 시킬 때는 stop 명령을 사용한다.
docker stop [OPTIONS] CONTAINER [CONTAINER...]
다음 예는 cli에서 실행한 my_ws_2의 동작을 중지시킨 모습이다.
C:\Users\itsmeyjc>docker stop my_ws_2
my_ws_2
현재 실행중인 컨테이너 확인
현재 동작하는 container를 확인하기 위해서는 ps 명령을 사용한다.
docker ps [OPTIONS]
기본적으로 docker ps를 사용하면 현재 start 상태의 container들만 표현된다. 따라서 현재 활성화 된 my_ws만 출력된다.
C:\Users\itsmeyjc>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba5297d1bb4f httpd:latest "httpd-foreground" 5 hours ago Up 5 hours 80/tcp my_ws
stop 상태의 container 들까지 모두 보고 싶을 때는 -a 옵션을 사용한다. 이제 my_ws 뿐 아니라 your_ws, my_ws_2까지 모두 출력된다.
C:\Users\itsmeyjc>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
984ba54118e5 httpd "httpd-foreground" 9 minutes ago Exited (0) 4 minutes ago my_ws_2
eabffb305881 httpd:latest "httpd-foreground" 4 hours ago Exited (0) 3 minutes ago your_ws
ba5297d1bb4f httpd:latest "httpd-foreground" 5 hours ago Up 5 hours 80/tcp my_ws
container 재시작
멈춰있던 container를 다시 시작하려면 start 명령을 사용한다.
docker start [OPTIONS] CONTAINER [CONTAINER...]
다음은 my_ws_2를 다시 실행한 후 ps 명령으로 살펴본 예이다.
C:\Users\itsmeyjc>docker start my_ws_2
my_ws_2
C:\Users\itsmeyjc>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
984ba54118e5 httpd "httpd-foreground" 13 minutes ago Up 12 seconds 80/tcp my_ws_2
ba5297d1bb4f httpd:latest "httpd-foreground" 5 hours ago Up 5 hours 80/tcp my_ws
컨테이너 삭제
마지막으로 container를 삭제하기 위해서는 rm 명령을 사용한다.
docker rm [OPTIONS] CONTAINER [CONTAINER...]
다음 예는 my_ws_2를 삭제하는 모습이다. 참고로 container가 실행 중일 경우는 먼저 container를 죽이고 나서 삭제해주는 것이 좋다.
C:\Users\itsmeyjc>docker rm my_ws_2 # 동작중이므로 바로 삭제할 수 없다.
Error response from daemon: You cannot remove a running container 984ba54118e5df9aeb31273c87d18badaa46a7499983410725fbe9e2ee14933d. Stop the container before attempting removal or force remove
C:\Users\itsmeyjc>docker stop my_ws_2
my_ws_2
C:\Users\itsmeyjc>docker rm my_ws_2
my_ws_2
이미지 자체의 삭제
container가 아닌 이미지 자체를 삭제하려면 rmi 명령을 사용할 수 있다.
docker rmi [OPTIONS] IMAGE [IMAGE...]
여기서는 굳이 삭제하지는 않겠다.
'tools & libs > 도커' 카테고리의 다른 글
[docker] 06. redis 및 redisinsight 설치 (0) | 2023.11.15 |
---|---|
[docker] 05. mysql 설치 (0) | 2021.09.02 |
[docker] 04. container 활용 (0) | 2021.09.01 |
[docker] 02. docker 이미지와 pull로 가져오기 (0) | 2021.08.30 |
[docker] 01. docker 설치 (0) | 2021.08.29 |
소중한 공감 감사합니다