Install Docker
Install Docker
Get Docker Engine
다음 공식 링크를 참조하기 바란다. (https://docs.docker.com/install/linux/docker-ce/ubuntu/)
- Docker repository 를 사용하는 것을 권장함
- DEB 패키지를 사용하여 수동으로 설치 및 업그레이드를 관리할 수 있음 (인터넷에 접속이 불가한 경우 유용)
- 스크립트를 사용하여 설치할 수 있음
1. SET UP THE REPOSITORY
1-1) apt
패키지를 업데이트 한다:
sudo apt update
1-2) apt
를 통해 업데이트 할 수 있도록 패키지를 설치한다:
sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
1-3) GPG key 를 추가한다:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 이상이 발생하는 경우 다음을 통해 키를 확인한다.
sudo apt-key fingerprint 0EBFCD88
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
1-4) docker repository 를 설정한다:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
2. INSTALL DOCKER ENGINE
2-1) apt
패키지를 업데이트 한다:
sudo apt update
2-2) docker engine 최신 버전을 설치한다:
sudo apt-get install docker-ce docker-ce-cli containerd.io
- 특정 버전을 사용하는 경우 다음을 확인한다:
apt-cache madison docker-ce
docker-ce | 5:18.09.1~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:18.09.0~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.06.1~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.06.0~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
...
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
- docker 를 root 권한으로 실행할 수 있도록 한다:
sudo usermod -aG docker $USER
3. REMOVE DOCKER
3-1) docker engine 패키지를 제거한다:
sudo apt purge docker-ce
3-2) 모든 이미지, 컨테이너, 볼륨을 삭제한다:
- 호스트 이미지, 컨테이너, 볼륨, 사용자 정의 구성 파일은 자동으로 제거되지 않기 때문
sudo rm -rf /var/lib/docker
Docker Commands
1. SEARCH IMAGE
Docker 는 기본적으로 Docker Hub (URL: https://hub.docker.com/) 을 통해 image 를 공유한다. 대부분의 리눅스 배포판, 오픈소스 등의 image 는 이미 Docker Hub 에서 제공한다.
docker search
명령을 사용하면 Docker Hub 의 image 를 검색할 수 있는데 랭킹을 구성해서 높은 순서대로 25 개의 리스트가 검색된다. (모든 버전이 검색되는 것은 아님)
$ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 10530 [OK]
dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 393 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 243 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 210 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 105 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 98 [OK]
neurodebian NeuroDebian provides neuroscience research s… 64 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 50 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components=m… 42 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images w… 24 [OK]
i386/ubuntu Ubuntu is a Debian-based Linux operating sys… 19
1and1internet/ubuntu-16-apache-php-5.6 ubuntu-16-apache-php-5.6 14 [OK]
1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 13 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mariadb-10 ubuntu-16-nginx-php-phpmyadmin-mariadb-10 11 [OK]
1and1internet/ubuntu-16-nginx-php-5.6 ubuntu-16-nginx-php-5.6 8 [OK]
1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4 ubuntu-16-nginx-php-5.6-wordpress-4 7 [OK]
1and1internet/ubuntu-16-apache-php-7.1 ubuntu-16-apache-php-7.1 6 [OK]
darksheer/ubuntu Base Ubuntu Image -- Updated hourly 5 [OK]
1and1internet/ubuntu-16-nginx-php-7.0 ubuntu-16-nginx-php-7.0 4 [OK]
pivotaldata/ubuntu A quick freshening-up of the base Ubuntu doc… 3
pivotaldata/ubuntu16.04-build Ubuntu 16.04 image for GPDB compilation 2
1and1internet/ubuntu-16-sshd ubuntu-16-sshd 1 [OK]
1and1internet/ubuntu-16-php-7.1 ubuntu-16-php-7.1 1 [OK]
pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 1
smartentry/ubuntu ubuntu with smartentry 1 [OK]
대표적으로 ‘ubuntu’ 를 검색해보면 그 결과는 위와 같다. 결과에서 ‘/’ 로 나누어 지는 부분은 사용자들이 만들어 공개한 이미지이다.
Docker Hub 페이지에서 ‘ubuntu’ 를 검색할 수 있다. 검색의 결과는 다음 링크 에서 확인가능하며 ‘Docker Official Images’ 를 선택하면 세부 정보를 확인할 수 있다. 예를들어 ubuntu image Tags 탭을 보면 현재 버전정보를 확인할 수 있다.
2. PULL IMAGE
docker pull
명령을 사용하여 image 를 다운로드 받을 수 있는데 ‘검색’ 후 원하는 image Name 과 Tag 를 사용하면 된다.
‘search’ 과정에서 검색한 ‘ubuntu’ 를 예로들면 다음과 같다:
$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
5c939e3a4d10: Pull complete
c63719cdbe7a: Pull complete
19a861ea6baf: Pull complete
651c9d2d6c4f: Pull complete
Digest: sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
‘Using default tag: latest’ 구문에서 볼 수 있듯 tag 정보를 사용하지 않으면 자동적으로 최신 tag 가 적용되는 것을 확인할 수 있다.
또한 아래와 같이 다양한 구성으로 image 를 받을 수 있다:
$ docker pull ubuntu:latest
$ docker pull ubuntu:18.04
$ docker pull smartentry/ubuntu
image 이름에서 ‘smartentry/unbuntu’ 와 같이 ‘/’ 앞에 사용자를 지정하면 해당 사용자가 Docker Hub 에 push 한 image 를 다운로드 하게 된다.
공식 image 의 경우 사용자 지정을 사용하지 않는다.
3. CHECK DOCKER IMAGE LIST
docker pull
명령어로 다운로드 받은 image 가 호스트에 정상적으로 반영되었는지 확인하기 위해 docker images
명령어를 사용한다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ccc6e87d482b 5 weeks ago 64.2MB
$ docker images ubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ccc6e87d482b 5 weeks ago 64.2MB
docker images <image Name>
을 사용하면 image Name 에 해당하는 정보만 출력된다. 이름은 같지만 태그가 다른 이미지도 확인할 수 있다.
4. RUN CONTAINER
호스트에 다운로드 된 image 를 이용하여 Container 를 실행시키기 위해서는 docker run
명령어를 사용한다.
$ docker run -i -t --name test ubuntu /bin/bash
root@f3ca7c49d662:/#
명령어 구성은 docker run <옵션> <image Name> <task>
형식을 사용한다. 위 예제는 ‘ubuntu’ image 를 사용하여 Container 를 생성하고 ‘/bin/bash’ 를 실행하는 의미인데 세부적인 내용은 다음과 같다:
-i
(interactive),-t
(Pseudo-tty) 옵션: ‘bash’ 쉘에 입출력을 위해 대기--name
옵션: Container Name 설정 (Name 지정이 없으면 자동생성)
호스트와 격리된 Container 가 생성되었다는 의미이며 ‘bash’ 쉘에서 대기상태이기 때문에 linux 명령어들을 적용하여 동작하는지 확인한다.
root@f3ca7c49d662:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@f3ca7c49d662:/# cd home/
root@f3ca7c49d662:/home# cd ..
root@f3ca7c49d662:/# cd usr/
bin/ games/ include/ lib/ local/ sbin/ share/ src/
root@f3ca7c49d662:/# cd usr/local/
bin/ etc/ games/ include/ lib/ man/ sbin/ share/ src/
‘bash’ 쉘에 exit
를 입력하면 쉘에서 빠져나오게 되며 이 의미는 ‘ubuntu’ image 에서 ‘/bin/bash’ 실행이 종료되어 Container 가 정지 (STOP) 된다는 의미이다.
root@f3ca7c49d662:/usr/local/bin# exit
exit
$
5. CHECK CONTAINER LIST
호스트에서 만들어진 Container 목록은 docker ps
명령을 사용하여 확인할 수 있다.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3ca7c49d662 ubuntu "/bin/bash" 15 minutes ago Exited (0) About a minute ago test
docker ps <option>
형식으로 구성되어 있는데 -a
옵션은 모든 Container 목록 (정지, 실행) 을 출력하는 의미이며 옵션이 없으면 실행중인 Container 만 출력한다.
위 예에서 Container 생성에 ‘–name’ 으로 지정한 Container Name 인 ‘test’ 를 확인할 수 있다.
6. CONTAINER START
정지한 Container 를 시작하기 위해 docker start
명령어를 사용한다.
$ docker start test
test
docker start <Container Name | Container ID>
형식을 사용한다.
‘start’ 명령이 정상 동작하는지 확인하기 위해 Container 목록을 출력하여 상태를 확인한다.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3ca7c49d662 ubuntu "/bin/bash" 20 minutes ago Up 15 seconds test
‘test’ 이름의 Container 가 ‘Up 15 seconds’ 임을 확인할 수 있다.
7. CONTAINER RESTART
Container 를 재실행 시키기 위해 docker restart
명령어를 사용한다.
$ docker restart test
test
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3ca7c49d662 ubuntu "/bin/bash" 35 minutes ago Up 5 seconds test
8. CONNECTION CONTAINER
Container 가 시작된 후 Container 에 접속하기 위해 docker attach
명령어를 사용한다.
$ docker attach test
root@f3ca7c49d662:/#
docker attach <Container Name | ID>
형식을 사용하는데 주의할 점이 있다.
위 예에서는 ‘/bin/bash’ 를 실행하였기 때문에 명령어를 입력할 수 있지만 application 을 실행하는 경우라면 출력만 확인하게 된다.
쉘에서 ‘exit, ctrl+D’ 를 사용하면 Container 가 정지되며 빠져나오게 되며 ‘ctrl+P, ctrl+Q’ 를 입력하면 Container 를 정지하지 않고 빠져나오게 된다.
root@f3ca7c49d662:/# read escape sequence
9. TASK RUN
외부에서 Container 의 ‘task’ 를 실행시키기 위해 docker exec
명령어를 사용한다.
$ docker exec test echo "Hello World"
Hello World
docker exec <Container Name | ID> <task> <parameter>
형식으로 구성되는데 Container 가 실행중인 상태에서만 동작한다.
위 예에서는 ‘test’ 라는 이름의 Container 내부에 ‘echo’ 라는 task 를 실행하고 파라메터로 ‘Hello World’ 를 지정한 동작을 보여준다.
이를 사용하면 실행중인 Container 에 apt install
, ‘git clone` 등의 명령으로 패키지를 설치하거나 실행할 수 있다.
$ docker exec -i -t test /bin/bash
root@f3ca7c49d662:/# apt update
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:3 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [823 kB]
Get:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:5 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:6 http://archive.ubuntu.com/ubuntu bionic/restricted amd64 Packages [13.5 kB]
Get:7 http://archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages [186 kB]
Get:8 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [11.3 MB]
Get:9 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [31.0 kB]
Get:10 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [836 kB]
Get:11 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [7348 B]
Get:12 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1344 kB]
Get:13 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [1124 kB]
Get:14 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [1350 kB]
Get:15 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [44.7 kB]
Get:16 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [11.4 kB]
Get:17 http://archive.ubuntu.com/ubuntu bionic-backports/main amd64 Packages [2496 B]
Get:18 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [4252 B]
Fetched 17.6 MB in 28s (639 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
18 packages can be upgraded. Run 'apt list --upgradable' to see them.
root@f3ca7c49d662:/# apt install git
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
ca-certificates git-man krb5-locales less libasn1-8-heimdal libbsd0 libcurl3-gnutls libedit2 liberror-perl libexpat1 libgdbm-compat4 libgdbm5 libgssapi-krb5-2
libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal libhx509-5-heimdal libk5crypto3 libkeyutils1 libkrb5-26-heimdal libkrb5-3
libkrb5support0 libldap-2.4-2 libldap-common libnghttp2-14 libperl5.26 libpsl5 libroken18-heimdal librtmp1 libsasl2-2 libsasl2-modules libsasl2-modules-db
libsqlite3-0 libssl1.0.0 libssl1.1 libwind0-heimdal libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxmuu1 multiarch-support netbase openssh-client
openssl patch perl perl-modules-5.26 publicsuffix xauth
Suggested packages:
gettext-base git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn gdbm-l10n krb5-doc krb5-user
libsasl2-modules-gssapi-mit | libsasl2-modules-gssapi-heimdal libsasl2-modules-ldap libsasl2-modules-otp libsasl2-modules-sql keychain libpam-ssh monkeysphere
ssh-askpass ed diffutils-doc perl-doc libterm-readline-gnu-perl | libterm-readline-perl-perl make
The following NEW packages will be installed:
ca-certificates git git-man krb5-locales less libasn1-8-heimdal libbsd0 libcurl3-gnutls libedit2 liberror-perl libexpat1 libgdbm-compat4 libgdbm5
libgssapi-krb5-2 libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal libhx509-5-heimdal libk5crypto3 libkeyutils1
libkrb5-26-heimdal libkrb5-3 libkrb5support0 libldap-2.4-2 libldap-common libnghttp2-14 libperl5.26 libpsl5 libroken18-heimdal librtmp1 libsasl2-2
libsasl2-modules libsasl2-modules-db libsqlite3-0 libssl1.0.0 libssl1.1 libwind0-heimdal libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxmuu1
multiarch-support netbase openssh-client openssl patch perl perl-modules-5.26 publicsuffix xauth
0 upgraded, 54 newly installed, 0 to remove and 18 not upgraded.
Need to get 18.9 MB of archives.
After this operation, 103 MB of additional disk space will be used.
Do you want to continue? [Y/n]
10. STOP CONTAINER
실행중인 Container 를 정지하기 위해 docker stop
명령어를 사용한다.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3ca7c49d662 ubuntu "/bin/bash" About an hour ago Up 32 minutes test
$ docker stop test
test
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker stop <Container Name | ID>
형식을 사용하며 실행중인 Container 리스트를 확인하면 비어있는 리스트를 확인할 수 있다.
11. REMOVE CONTAINER
생성된 Container 를 삭제하기 위해서 docker rm
명령어를 사용한다.
$ docker rm test
test
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker rm <Container Name | ID>
형식으로 docker ps -a
명령어로 확인하면 아무것도 없는 것을 확인할 수 있다.
12. REMOVE IMAGE
Container 의 image 삭제는 docker rmi
명령어를 사용한다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ccc6e87d482b 5 weeks ago 64.2MB
$ docker rmi ubuntu:latest
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
Deleted: sha256:ccc6e87d482b79dd1645affd958479139486e47191dfe7a997c862d89cd8b4c0
Deleted: sha256:d1b7fedd4314279a7c28d01177ff56bcff65300f6d41655394bf5d8b788567f6
Deleted: sha256:340bed96497252624f5e4b0f42accfe7edbb7a01047e2bb5a8142b2464008e73
Deleted: sha256:6357c335cdfcc3a120e288bbd203bf4c861a14245ce5094634ee097e5217085b
Deleted: sha256:43c67172d1d182ca5460fc962f8f053f33028e0a3a1d423e05d91b532429e73d
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker rmi <Image Name | ID>:<TAG>
형식으로 구성되며 docker images
명령어로 확인하면 image 가 없는 것을 확인할 수 있다.
docker rmi <Image Name>
과 같이 ‘image Name’ 만 지정하는 경우 TAG 에 상관없이 같은 이름을 모두 삭제한다.