본문 바로가기

카테고리 없음

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커맨드를 이용하여 상세하게 확인할 수 있습니다.

감사합니다.