도커의 주된 목적은 컨테이너를 실행하는 거예요.
오늘은 도커 컨테이너의 시작, 정지, 확인, 삭제 등과 같은 것을 하는 방법을 알아볼 거예요.
먼저 도커가 잘 실행되고 있는지 확인해볼게요.
docker version
### result
➜ ~ docker version
Client: Docker Engine - Community
Version: 20.10.7
API version: 1.41
Go version: go1.13.15
Git commit: f0df350
Built: Wed Jun 2 11:58:10 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.7
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: b0f5bc3
Built: Wed Jun 2 11:56:35 2021
OS/Arch: linux/amd64
Experimental: false
도커 클라이언트와 서버 버전이 잘 나오네요.
도커를 사용해서 컨테이너를 실행시키려면 도커 이미지가 필요해요. 도커 이미지는 다음에 좀 더 자세하게 알아보기로 하고 우선은 도커 이미지를 다운로드하고 확인하는 방법을 알아볼게요.
우선 docker 명령어를 통해 이미지를 찾는 방법이에요.
➜ ~ docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 6671 [OK]
ansible/centos7-ansible Ansible on Centos7 134 [OK]
...
## Search for OFFICIAL images
➜ ~ docker search --filter is-official=true centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 6671 [OK]
Docker Hub Container Image Library | App Containerization
Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your teams' container applications.
hub.docker.com
웹에서는 Tags까지 자세하게 볼 수 있어요
자 이제 내가 원하는 도커 이미지를 버전까지 확인했으니 이제 이미지를 로컬로 다운받고 잘 다운로드하였는지 확인해볼게요.
➜ ~ docker image pull centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
➜ ~ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 8652b9f0cb4c 8 months ago 204MB
그럼 이제 다운로드한 이미지로 컨테이너를 실행하는 방법을 확인해볼게요. 몇 가지 방법이 있는데 복잡하지만 간단하고 쉬운 방법먼저 할게요.
➜ ~ docker container run -d -i -t centos:7
5a0876073b746bb4ee095a1add18a84bb24bae643e591d6585ca9dee49ff2d23
➜ ~ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a0876073b74 centos:7 "/bin/bash" About a minute ago Up About a minute amazing_galois
docker container run 명령어는 새로운 컨테이너에서 뒤에 인자로 따라오는 명령어를 실행하게 하는 도커 명령어예요. 우선 -d는 detached 모드로 실행하게 하는 옵션이에요 이 옵션을 주면 컨테이너 ID를 출력해주고 컨테이너는 백그라운드에서 돌아가게 돼요. -i 옵션은 interactive 하게 STDIN을 열어놓으라는 뜻이에요. 그리고 마지막으로 -t 옵션은 PSEUDO-TTY를 할당해주는 옵션이에요. 그리고 centos:7은 아시다시피 이미지:태그예요. 그럼 컨테이너가 실행할 명령은 따로 준 게 없네요? 맞아요 그런데 이 centos 이미지를 만들 때 기본적으로 넣어놓은 거예요 그래서 내가 다른 명령어를 넣지 않으면 기본적으로 /bin/bash가 실행되는데 앞에 있는 옵션들에 의해서 TTY도 열고 거기에 붙어서 bash가 실행되는 거예요. 확인해볼게요.
➜ ~ docker container exec 5a0876073b74 ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 11828 1656 pts/0 Ss+ 13:43 0:00 /bin/bash
root 15 0.0 0.0 51732 1700 ? Rs 13:47 0:00 ps aux
docker container exec 명령은 컨테이너에 명령을 전달하는 명령어예요 ps aux 명령어를 통해 보니까 PTS/0 TTY에 /bin/bash 명령어가 실행 중인 걸 볼 수 있어요.
자 그럼 이제 컨테이너를 만들어보고 실행도 시켜봤으니 꺼볼게요.
➜ ~ docker container stop amazing_galois
amazing_galois
➜ ~ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a0876073b74 centos:7 "/bin/bash" 11 minutes ago Exited (137) 33 seconds ago amazing_galois
docker container stop 명령어를 통해서 컨테이너를 멈췄는데 이번에는 도커가 자기 마음대로 지어준 컨테이너의 이름을 가지고 컨테이너를 멈춰봤어요. 그리고 확인을 할 때 실행 중이 아닌 컨테이너는 ls 명령어 뒤에 -a 옵션을 줘야 보여요.
이제 다시 컨테이너를 다시 시작할 건데 시작하기 전에 이름을 좀 바꿔줄게요.
➜ ~ docker container rename amazing_galois mycentos7
➜ ~ docker container start mycentos7
mycentos7
➜ ~ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a0876073b74 centos:7 "/bin/bash" 14 minutes ago Up 36 seconds mycentos7
그럼 이제 컨테이너를 삭제해볼게요. 컨테이너를 삭제할 때는 먼저 컨테이너를 종료시키고 삭제해야 돼요.
➜ ~ docker container stop mycentos7
mycentos7
➜ ~ docker container rm mycentos7
mycentos7
➜ ~ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
여기까지 컨테이너 생성 시작 정지 삭제를 어떻게 하는지 알아봤어요
detach mode나 interactive pseudo-tty 등에 대한 자세한 건 다음에 알아볼게요. 왜냐하면 나도 아직 잘 몰라서요.