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 명령을 이용하여 도커 이미지를 구동할 수 있습니다.
옵션 | 설명 |
---|---|
-d | detached 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커맨드를 이용하여 상세하게 확인할 수 있습니다.
감사합니다.
댓글
댓글 쓰기