Docker(도커) 기본 사용법


안녕하세요. 남산돈가스입니다.


오늘은 지난 포스팅에 이어서 docker 명령어의 기본적인 사용법에 대해서 알아보도록 하겠습니다.

일단, 기본적으로, 실행하는 환경에 docker가 설치되어 있으셔야 합니다. 만약 설치가 되어있지 않다면,

Linux환경에서 Docker(도커) 설치 및 컨테이너 실행하기 를 참고하셔서, Docker를 설치하시기 바랍니다.


- Docker 버전 확인하기 (version)

도커가 설치 되었는 지, 현재 버전을 확인하고 싶은 경우, version 명령어를 이용하여 확인할 수 있습니다.

root@ip-172-31-0-7:~# docker version
Client:
 Version:      18.05.0-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   f150324
 Built:        Wed May  9 22:16:25 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.05.0-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   f150324
  Built:        Wed May  9 22:14:32 2018
  OS/Arch:      linux/amd64
  Experimental: false


- Docker 이미지 검색하기 (search)

실제 도커 환경에서 실행할 이미지를 search 명령어를 이용해 검색할 수 있습니다.

예를 들어, ubuntu 이미지를 검색하고 싶으면,

root@ip-172-31-0-7:~# docker search ubuntu
NAME                                                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ubuntu                                                    Ubuntu is a Debian-based Linux operating sys…   7868                [OK]
dorowu/ubuntu-desktop-lxde-vnc                            Ubuntu with openssh-server and NoVNC            190                                     [OK]
rastasheep/ubuntu-sshd                                    Dockerized SSH service, built on top of offi…   156                                     [OK]
ansible/ubuntu14.04-ansible                               Ubuntu 14.04 LTS with ansible                   93                                      [OK]
ubuntu-upstart                                            Upstart is an event-based replacement for th…   87                  [OK]
neurodebian                                               NeuroDebian provides neuroscience research s…   50                  [OK]
ubuntu-debootstrap                                        debootstrap --variant=minbase --components=m…   38                  [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5      ubuntu-16-nginx-php-phpmyadmin-mysql-5          36                                      [OK]
nuagebec/ubuntu                                           Simple always updated Ubuntu docker images w…   23                                      [OK]

명령어를 통해 다양하게 제공되는 ubuntu linux 이미지를 확인할 수 있습니다.

- Docker 이미지 다운받기 (pull)

위에서 search 명령을 통해 Docker 이미지를 검색하였고, 해당 이미지를 내 도커 환경에 다운받고 싶다면 pull 명령을 이용하여 image를 다운받을 수 있습니다.

위의 ubuntu 이미지를 다운받아 보겠습니다.

root@ip-172-31-0-7:~# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete
Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Status: Downloaded newer image for ubuntu:latest


- 다운받은 이미지 확인하기 (images)

위에서 pull 명령을 이용하여 ubuntu 이미지파일을 다운받았습니다. 그렇다면, 다운받은 이미지 파일을 확인하고 싶으면 어떻게 해야할까요?

images 명령을 이용하여 나의 도커환경에서 다운받은 이미지들의 목록을 확인할 수 있습니다.

root@ip-172-31-0-7:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
sebp/elk            latest              64b786a0b7d9        8 days ago          1.49GB
ubuntu              latest              113a43faa138        2 weeks ago         81.2MB


- Docker 실행하기 (run)

나의 도커환경에 도커이미지까지 다운받았으면, 이제 이 이미지를 가지고 실제 docker를 실행할 수 있습니다. run 명령을 이용하여 도커 이미지를 구동할 수 있습니다.

옵션설명
-ddetached mode 흔히 말하는 백그라운드 모드
-p호스트와 컨테이너의 포트를 연결 (포워딩)
-v호스트와 컨테이너의 디렉토리를 연결 (마운트)
-e컨테이너 내에서 사용할 환경변수 설정
–name컨테이너 이름 설정
–rm프로세스 종료시 컨테이너 자동 제거
-it-i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
–link컨테이너 연결 [컨테이너명:별칭]
위 옵션을 이용하여, 각 이미지의 성격에 맞게 사용하면 됩니다.

저는 위에서 다운받은 ubuntu 이미지를 실행하겠습니다.

root@ip-172-31-0-7:~# docker run ubuntu
root@ip-172-31-0-7:~#

컨테이너는 정상적으로 실행 되었지만 ubuntu 라는 컨테이너에게 어떤 것을 하라고 명령어를 전달하지 않았기 때문에 컨테이너는 생성 되자마자 종료됩니다. 컨테이너는 프로세스이기 때문에 실행중인 프로세스가 없으면 컨테이너는 종료됩니다.

이번에는 위 run 명령에 --rm (프로세스를 종료 시 컨테이너가 자동으로 제거) 옵션과 -it (터미널 입력을 받을 수 있게 하는 옵션) 을 추가하여 /bin/bash 명령을 추가하여 ubuntu를 run 해보겠습니다.

root@ip-172-31-0-7:~# docker run --rm -it ubuntu /bin/bash
root@68929520ebaf:/# cat /etc/issue
Ubuntu 18.04 LTS \n \l

root@68929520ebaf:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@68929520ebaf:/#

위 결과처럼, ubuntu 컨테이너로 접속하여, root 계정으로 변경 된 것을 확인할 수 있습니다.


- Docker 목록 확인하기 (ps)

ps명령어를 이용하여, Docker의 목록을 확인할 수 있습니다.

먼저 옵션없이 그냥 ps 명령만을 입력하면, 현재 실행 중인 컨테이너의 목록을 보여줍니다.

root@ip-172-31-0-7:~# docker start ubuntu
ubuntu
root@ip-172-31-0-7:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4ace84730009        ubuntu              "/bin/bash"         5 minutes ago       Up 2 seconds                            ubuntu

여기에 -a 옵션을 붙여보겠습니다.

root@ip-172-31-0-7:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
965339f6a760        ubuntu              "/bin/bash"         12 seconds ago      Exited (127) 2 seconds ago                        quizzical_bohr
8e5764cdf867        ubuntu              "/bin/bash"         25 seconds ago      Exited (130) 20 seconds ago                       eloquent_curran
4ace84730009        ubuntu              "/bin/bash"         7 minutes ago       Up 2 minutes                                      ubuntu

-a 옵션을 붙여보니, STATUS 를 보면 종료 되었거나 현재 실행 중인 컨테이너의 목록을 모두 보여주고 있는 것을 확인할 수 있습니다. 컨테이너는 종료 되어도 삭제 되지 않고 남아있습니다. 종료된 건 다시 시작할 수 있고 컨테이너의 읽기/쓰기 레이어는 그대로 존재합니다.

- 컨테이너 종료하기 (stop)

현재 실행 중인 컨테이너를 종료하고 싶으면, stop 명령어를 이용합니다.

root@ip-172-31-0-7:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4ace84730009        ubuntu              "/bin/bash"         10 minutes ago      Up 5 minutes                            ubuntu
root@ip-172-31-0-7:~# docker stop ubuntu
ubuntu
root@ip-172-31-0-7:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

위 처럼 현재 실행 중이었던 ubuntu 컨테이너를 확인한 뒤, docker stop 명령어를 이용하여 ubuntu 컨테이너를 stop 한 뒤, ps로 현재 실행 중인 컨테이너를 확인했는데, 아무것도 없는 것을 확인하실 수 있습니다.

- 컨테이너 시작하기 (start)

위에서 ps -a 명령을 이용하면, 종료 된 컨테이너를 확인할 수 있다고 설명했었습니다. 그렇다면 이 종료 된 컨테이너를 다시 시작하려면 start 명령을 이용하여 시작할 수 있습니다.

root@ip-172-31-0-7:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
965339f6a760        ubuntu              "/bin/bash"         7 minutes ago       Exited (127) 7 minutes ago                       quizzical_bohr
8e5764cdf867        ubuntu              "/bin/bash"         7 minutes ago       Exited (130) 7 minutes ago                       eloquent_curran
4ace84730009        ubuntu              "/bin/bash"         14 minutes ago      Exited (0) 3 minutes ago                         ubuntu
root@ip-172-31-0-7:~# docker start ubuntu
ubuntu
root@ip-172-31-0-7:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4ace84730009        ubuntu              "/bin/bash"         14 minutes ago      Up 2 seconds                            ubuntu

ps -a 에서 종료되어있는 ubuntu 컨테이너를 start명령으로 실행했고, ps 명령을 통해 다시 실행 중으로 확인할 수 있습니다.

- 컨테이너 삭제하기 (rm)

컨테이너를 삭제하기 위해선, rm 명령을 이용하면 됩니다. 여기서 주의할 점은, 삭제하려고 하는 컨테이너는 실행중인 컨테이너일 수 없습니다. 반드시 stop명령을 통해 컨테이너를 종료한 뒤 삭제해야 합니다.

ps -a 명령을 이용하여 종료 된 컨테이너를 확인한 뒤 해당 컨테이너를 삭제하겠습니다.

root@ip-172-31-0-7:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
965339f6a760        ubuntu              "/bin/bash"         11 minutes ago      Exited (127) 11 minutes ago                       quizzical_bohr
8e5764cdf867        ubuntu              "/bin/bash"         11 minutes ago      Exited (130) 11 minutes ago                       eloquent_curran
4ace84730009        ubuntu              "/bin/bash"         18 minutes ago      Up 3 minutes                                      ubuntu
root@ip-172-31-0-7:~# docker rm eloquent_curran
eloquent_curran
root@ip-172-31-0-7:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
965339f6a760        ubuntu              "/bin/bash"         11 minutes ago      Exited (127) 11 minutes ago                       quizzical_bohr
4ace84730009        ubuntu              "/bin/bash"         18 minutes ago      Up 3 minutes                                      ubuntu

eloquent_curran이라는 ubuntu컨테이너를 삭제한 뒤 ps -a 명령을 통해서 실제 해당 컨테이너가 삭제 된 것을 확인할 수 있습니다.

- Docker 이미지 삭제하기 (rmi)

도커이미지를 삭제할 경우 rmi 명령을 이용합니다. 이 또한 역시, 해당 이미지로 run 되어있는 컨테이너가 있는 경우 삭제되지않습니다. 아래 처럼 ps -a 명령을 이용하여 IMAGE가 ubuntu로 되어있는 컨테이너를 모두 rm(삭제) 하여야만 rmi 명령으로 이미지를 삭제할 수 있습니다. 이미지를 삭제한 뒤 images 명령어를 입력하면, ubuntu 이미지가 삭제된 것을 확인할 수 있습니다.

root@ip-172-31-0-7:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4ace84730009        ubuntu              "/bin/bash"         20 minutes ago      Up 5 minutes                            ubuntu
root@ip-172-31-0-7:~# docker stop ubuntu
ubuntu
root@ip-172-31-0-7:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
965339f6a760        ubuntu              "/bin/bash"         13 minutes ago      Exited (127) 13 minutes ago                       quizzical_bohr
4ace84730009        ubuntu              "/bin/bash"         20 minutes ago      Exited (0) 3 seconds ago                          ubuntu
root@ip-172-31-0-7:~# docker rm quizzical_bohr ubuntu
quizzical_bohr
ubuntu
root@ip-172-31-0-7:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
root@ip-172-31-0-7:~# docker rmi ubuntu
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Deleted: sha256:113a43faa1382a7404681f1b9af2f0d70b182c569aab71db497e33fa59ed87e6
Deleted: sha256:a9fa410a3f1704cd9061a802b6ca6e50a0df183cb10644a3ec4cac9f6421677a
Deleted: sha256:b21f75f60422609fa79f241bf80044e6e133dd0662851afb12dacd22d199233a
Deleted: sha256:038d2d2aa4fb988c06f04e3af208cc0c1dbd9703aa04905ade206d783e7bc06a
Deleted: sha256:b904d425ea85240d6af5a6c6f145e05d5e0127f547f8eb4f68552962df846e81
Deleted: sha256:db9476e6d963ed2b6042abef1c354223148cdcdbd6c7416c71a019ebcaea0edb
root@ip-172-31-0-7:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
sebp/elk            latest              64b786a0b7d9        8 days ago          1.49GB



여기까지 해서, docker 환경에서 사용할 수 있는 가장 기본적인 명령어 사용법에 대해서 알아보았습니다.

추가적인 명령들은 --help커맨드를 이용하여 상세하게 확인할 수 있습니다.

감사합니다.

댓글

주간 인기글

남산 케이블카 이야기

Kotlin, Java 그 다음?

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

[Angular] 모델, 값이 바뀌었는데 화면 template 이 업데이트 되지 않을 때 조치 팁

안드로이드에서 당겨서 새로고침(SwipeRefreshLayout) 쉽게 구현하기