도커 컨테이너의 생애주기
도커 컨테이너는 실행 중, 정지, 파기 3가지 상태를 갖는다.
실행 중 상태
docker container run 명령으로 Dockerfile에 포함된 인스트럭션에 정의된 애플리케이션(컨테이너)을 최초 실행한 시점의 상태는 실행 중이다.
실행이 끝나면 정지 상태가 된다.
정지 상태
컨테이너를 정지시키면 디스크에 종료 시점의 상태가 저장돼 남는다.
그러므로 정지시킨 컨테이너를 다시 실행할 수 있다.
파기 상태
정지 상태의 컨테이너는 파기하지 않는 이상 디스크에 그대로 남아있다.
컨테이너를 자주 생성하고 정지해야 한다면 디스크를 차지하는 용량이 늘어나므로 불필요한 컨테이너를 파기하는 것이 좋다.
다만 한 번 파기한 컨테이너는 다시 실행할 수 없다.
docker container run - 컨테이너 생성 및 실행
docker container run 명령은 도커 이미지로부터 컨테이너를 생성하고 실행하는 명령이다.
docker container run [옵션] 이미지명[:태그] [명령] [명령인자...]
docker container run [옵션] 이미지ID [명령] [명령인자...]
example/echo:latest 이미지를 기반으로 컨테이너를 백그라운드에서 실행한다면 다음과 같이 할 수 있다.
$ docker container run -d -p 9000:8080 example/echo:latest
$ curl http://localhost:9000/
Hello Docker!!
-d 옵션은 백그라운드에서 실행하는 것을 의미한다.
-p 9000:8080은 9000 포트로 들어오는 요청을 8080포트로 보낸다는 포트포워딩을 의미한다.
docker container run 명령 인자
docker container run 명령에 명령인자를 전달하면 Dockerfile에 정의했던 CMD 인스트럭션을 오버라이드 할 수 있다.
$ docker image pull alpine:3.7
$ docker container run -it alpine:3.7 uname -a
Linux 76adrd55c245 5.15.167.4-microsoft-standard-WSL2 #1 SMP Wed Oct 5 00:21:55 UTC 2024 x86_64 Linux
-i는 컨테이너와의 표준 입력을 열어준다.
-t는 TTY(터미널) 환경을 활성화하여 명령줄 환경을 제공한다.
즉, -it는 터미널에서 컨테이너의 입력 환경을 조작한다는 것이다.
uname는 시스템 정보를 출력하는 명령어이고, -a는 모든 시스템 정보를 출력하므로 Alpine Linux의 이미지의 시스템 정보가 출력된다.
컨테이너에 이름 붙이기
컨테이너 정지 등 컨테이너를 다루는 명령을 실행할 때는 컨테이너 ID 등으로 컨테이너를 특정해줘야 한다.
컨테이너 ID 대신 쉽게 특정할 수 있는 방법이 이름을 붙이는 것이다.
docker container run --name [컨테이너명] [이미지명][:태그명]
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19cec0a51947 ubuntu:latest "/bin/bash" 35 seconds ago Up 3 seconds laughing_chebyshev
$ docker container run -t -d --name poloopy ubuntu:latest
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d88cfe2c718 ubuntu:latest "/bin/bash" 7 seconds ago Up 7 seconds poloopy
19cec0a51947 ubuntu:latest "/bin/bash" About a minute ago Up About a minute laughing_chebyshev
이러한 이름 붙이기는 많은 컨테이너를 생성, 실행하고 정지, 파기하는 운영환경에서는 적절하지 않다.
도커 명령에서 자주 사용되는 옵션
- -i: 컨테이너 쪽의 셸에 들어가 명령을 실행할 수 있는 옵션
- -t: 터미널 기능을 활성화. 보통 -it 옵션으로 함께 사용한다.
- -rm: 컨테이너를 파기하는 옵션
- -v: 호스트와 컨테이너 간의 디렉터리나 파일을 공유하는 옵션
docker container ls
실행 중이거나 종료된 컨테이너 목록 보기
docker container ls [옵션]
docker container stop
실행중인 컨테이너를 종료한다.
docker container stop 컨테이너ID_또는_컨테이너명
docker container restart
정지 상태 컨테이너는 해당 명령으로 재시작할 수 있다.
docker container restart 컨테이너ID_또는_컨테이너명
docker container rm
정지 상태 컨테이너를 완전히 파기한다.
docker container rm 컨테이너ID_또는_컨테이너명
docker container cp
컨테이너끼리 혹은 컨테이너와 호스트간에 파일을 복사하기 위한 명령
- 컨테이너 안에 있는 파일을 현재 작업 디렉터리로 복사하는 경우
docker container cp [옵션] 컨테이너ID_또는_컨테이너명:원본파일 호스트_파일위치
컨테이너 안의 /echo/main.go 파일을 호스트의 현재 작업 파일로 복사
docker container cp echo:/echo/main.go .
- 호스트쪽에서 컨테이너로 파일을 복사하는 경우
docker container cp [옵션] 호스트_원본파일 컨테이너ID_또는_컨테이너명:파일위치
docker container cp dummy.txt echo:/tmp
docker container exec
실행중인 컨테이너에서 원하는 명령을 실행할 수 있다.
** 이 글은 도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문 책을 공부한 내용을 담고 있습니다.
'Infra > Docker' 카테고리의 다른 글
도커 이미지 다루기 (0) | 2024.12.07 |
---|---|
컨테이너로 애플리케이션 실행하기 (1) | 2024.12.06 |