도커 컨테이너

도커의 주된 목적은 컨테이너를 실행하는 거예요. 

오늘은 도커 컨테이너의 시작, 정지, 확인, 삭제 등과 같은 것을 하는 방법을 알아볼 거예요.

 

먼저 도커가 잘 실행되고 있는지 확인해볼게요.

 

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]

https://hub.docker.com

 

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 등에 대한 자세한 건 다음에 알아볼게요. 왜냐하면 나도 아직 잘 몰라서요.