티스토리 뷰
지난 포스팅까지 다양한 Docker 명령어들을 살펴보았는데요.
이번 포스팅에는 자주 사용하지는 않지만 유용한 Docker 명령어들을 한번씩 되짚어보고 응용하는 방법에 대해 살펴볼까 합니다.
docker run, docker push, docker pull, docker ps, docker images, docker build 정도의 명령어는 어느정도 숙달되었다고 판단되지만, 검토하는 측면에서 한번 더 살펴볼께요.
Management Commands:
container Manage containers
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
volume Manage volumes
Commands:
attach Attach to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
현재 docker에서 사용 가능한 명령어 리스트입니다.
하나씩 지워가면서 따라해 봐요.
1) docker pull (도커 레지스트리에서 이미지 또는 저장소 가져오기)
일반적으로 사용하는 docker pull의 경우 특정 이미지를 가져오도록 이미지:태그 형태로 가져오기도 하지만, 해당 레포지토리의 모든 태그를 다운로드 받을 수 있는 --all-tags라는 옵션을 활용할 수도 있습니다.
[root@kubemaster ~]# docker pull --all-tags nara0617/my-apache2
Trying to pull repository docker.io/nara0617/my-apache2 ...
2.0: Pulling from docker.io/nara0617/my-apache2
1ab2bdfe9778: Pull complete
174a8e3bca83: Pull complete
c8e4c9e94892: Pull complete
4568916ecf2d: Pull complete
533f5cf513cb: Pull complete
Digest: sha256:90cca2f9c32ad25afa180da6b14f35de9990cb02b9007350a5bccef4cac1e1c9
latest: Pulling from docker.io/nara0617/my-apache2
f5d23c7fed46: Pull complete
b083c5fd185b: Pull complete
bf5100a89e78: Pull complete
98f47fcaa52f: Pull complete
622a9dd8cfed: Pull complete
1db365e6469d: Pull complete
Digest: sha256:f3b7575cb17091534b8916f49aa373c4e1f469338facc231e50c4b3a0aca0a9a
Status: Downloaded newer image for docker.io/nara0617/my-apache2
[root@kubemaster ~]# docker pull nara0617/my-apache2:2.0
Trying to pull repository docker.io/nara0617/my-apache2 ...
2.0: Pulling from docker.io/nara0617/my-apache2
Digest: sha256:90cca2f9c32ad25afa180da6b14f35de9990cb02b9007350a5bccef4cac1e1c9
Status: Image is up to date for docker.io/nara0617/my-apache2:2.0
[root@kubemaster ~]#
2) docker inspect (도커 이미지에 대한 상세 정보 확인)
[root@kubemaster docker_image]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myubuntuimage 1.0 c3c3c6aa74fa 8 minutes ago 120 MB
docker.io/nara0617/my-apache2 2.0 7d85cc3b2d80 12 days ago 154 MB
docker.io/nara0617/my-apache2 latest b38072c5ab70 4 weeks ago 154 MB
docker.io/ubuntu 16.04 5e13f8dd4c1a 5 weeks ago 120 MB
[root@kubemaster docker_image]# docker inspect docker.io/nara0617/my-apache2:latest
[
{
"Id": "sha256:b38072c5ab70e5e2769bb4e74766d446359d3d411f82ce7ad030110e73ea69d0",
"RepoTags": [
"docker.io/nara0617/my-apache2:latest"
],
"RepoDigests": [
"docker.io/nara0617/my-apache2@sha256:f3b7575cb17091534b8916f49aa373c4e1f469338facc231e50c4b3a0aca0a9a"
],
"Parent": "",
"Comment": "",
"Created": "2019-08-04T00:41:41.696888816Z",
"Container": "16386db468d92738ba57580836dd4d6cf732f4da57d720165153831e3da47cfe",
"ContainerConfig": {
"Hostname": "7a58968f2cd2",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"HTTPD_PREFIX=/usr/local/apache2",
"HTTPD_VERSION=2.4.39",
"HTTPD_SHA256=b4ca9d05773aa59b54d66cd8f4744b945289f084d3be17d7981d1783a5decfa2",
"HTTPD_PATCHES="
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) COPY dir:71004c6d987ac54f0e961be1fb2cdd9b79012472f199eea8b534e410e77d1292 in /usr/local/apache2/htdocs/ "
],
"ArgsEscaped": true,
"Image": "sha256:d9fd730e1bdafe4d0947dfcc321f5cc62dfbe2dc1cb10af32356a45f9f31c1cc",
"Volumes": null,
"WorkingDir": "/usr/local/apache2",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"DockerVersion": "1.13.1",
"Author": "nrson <nara0617@gmail.com>",
"Config": {
"Hostname": "7a58968f2cd2",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"HTTPD_PREFIX=/usr/local/apache2",
"HTTPD_VERSION=2.4.39",
"HTTPD_SHA256=b4ca9d05773aa59b54d66cd8f4744b945289f084d3be17d7981d1783a5decfa2",
"HTTPD_PATCHES="
],
"Cmd": [
"httpd-foreground"
],
"ArgsEscaped": true,
"Image": "sha256:d9fd730e1bdafe4d0947dfcc321f5cc62dfbe2dc1cb10af32356a45f9f31c1cc",
"Volumes": null,
"WorkingDir": "/usr/local/apache2",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 153726564,
"VirtualSize": 153726564,
"GraphDriver": {
"Name": "overlay2",
"Data": {
"LowerDir": "/var/lib/docker/overlay2/b787ce7386ffecc9a00f1e5a45fcd81db8d209ca1c38e7b3816cbbd7f0acd46e/diff:/var/lib/docker/overlay2/75c048094146bc01c3a6e35ba8b672e0e889483f8745dc02293c8eb27a422904/diff:/var/lib/docker/overlay2/fb57d13d82bd90770de76d0516c14acc077b2dca734bd06879f65121b704933e/diff:/var/lib/docker/overlay2/38959dc965709ab76f1e37d9276d153cbcf141648901aca02ac40412bcb6e360/diff:/var/lib/docker/overlay2/06cbc2f9f8e7ba7f8924fc28bdf4126a35a357d4b7660f883c07350465447e40/diff",
"MergedDir": "/var/lib/docker/overlay2/0894f7968d066a4f12bc34f4eba28da1baa38ce050702d5ad1279637c51555b7/merged",
"UpperDir": "/var/lib/docker/overlay2/0894f7968d066a4f12bc34f4eba28da1baa38ce050702d5ad1279637c51555b7/diff",
"WorkDir": "/var/lib/docker/overlay2/0894f7968d066a4f12bc34f4eba28da1baa38ce050702d5ad1279637c51555b7/work"
}
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:d8a33133e477d367977987129313d9072e0ec80894ed4c52c2d88186f354c29a",
"sha256:9d542ac296cc63d9107e42921ce14af4f03be163d952a8d4a3ecc9575dea73b3",
"sha256:bfaa5f9c3b5110d51d9e2195608d7746229f83d706f83b9e7db43de4350dbc6f",
"sha256:bea448567d6cd3a401f200000f5a3df6e662ffc162594342d5e227ab41cbfb8a",
"sha256:635721fc6973a1af99852613c36567fa92dff981533dfd7cd738346c5f8630be",
"sha256:5b84d0f3e4ad4cc9203f2f957a190adc4ab2f68955506322ee15994571f730e8"
]
}
}
]
[root@kubemaster docker_image]#
docker inspect를 통해 해당 docker image가 어떠한 정보로 만들어졌는지 역 추적해 볼 수 있습니다.
위에 빨간색으로 표시한 부분들은 실제 도커 파일이 어떻게 구성되었는지 추정할 수 있는 매우 중요한 정보들입니다.
Created 생성 날짜와 ExposedPorts, Env를 통한 Apache 구성 정보 확인 그리고 CMD, ENTRYPOINT와 같은 기동 시점의 실행 정보들 WorkDir과 Volume 정보 등을 모두 확인 할 수 있습니다.
docker inspect를 잘 활용하면, 실제 Dockerfile을 어떻게 작성했으며, 해당 이미지는 어떻게 기동해야 하는지 찾아 갈 수 있을 것입니다.
3) docker start & docker stop (하나 이상의 도커 이미지를 기동하거나 종료)
[root@kubemaster docker_image]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f03d3a1e0cdd myubuntuimage:1.0 "/bin/bash" 5 seconds ago Up 3 seconds hopeful_edison
[root@kubemaster docker_image]# docker stop f03d3a1e0cdd
f03d3a1e0cdd
[root@kubemaster docker_image]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f03d3a1e0cdd myubuntuimage:1.0 "/bin/bash" 22 seconds ago Exited (0) 5 seconds ago hopeful_edison
[root@kubemaster docker_image]# docker start f03d3a1e0cdd
f03d3a1e0cdd
[root@kubemaster docker_image]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f03d3a1e0cdd myubuntuimage:1.0 "/bin/bash" 30 seconds ago Up 2 seconds hopeful_edison
[root@kubemaster docker_image]#
위와 같이 docker image를 start 하거나 stop하여 불필요한 resource를 사용하는 이미지를 중지 시키고 다시 기동할 수 있습니다.
대체로 docker stop & docker rm으로 바로 이미지를 제거하는 경우가 많은데 docker stop 상태에서는 리소스 낭비를 줄일 수 있으니 항상 rm으로 지울 필요는 없습니다.
4) docke rm & docker rmi (하나 이상의 도커 컨테이너 또는 도커 이미지를 삭제)
[root@kubemaster docker_image]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f03d3a1e0cdd myubuntuimage:1.0 "/bin/bash" 30 seconds ago Up 2 seconds hopeful_edison
[root@kubemaster docker_image]# docker rm f03d3a1e0cdd
Error response from daemon: You cannot remove a running container f03d3a1e0cdd1e3302af617271abb80fceebd9e601742601b9c7f2e878103010. Stop the container before attempting removal or use -f
[root@kubemaster docker_image]# docker stop f03d3a1e0cdd
f03d3a1e0cdd
[root@kubemaster docker_image]# docker rm f03d3a1e0cdd
f03d3a1e0cdd
[root@kubemaster docker_image]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@kubemaster docker_image]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myubuntuimage 1.0 c3c3c6aa74fa 21 minutes ago 120 MB
docker.io/nara0617/my-apache2 2.0 7d85cc3b2d80 12 days ago 154 MB
docker.io/nara0617/my-apache2 latest b38072c5ab70 4 weeks ago 154 MB
docker.io/ubuntu 16.04 5e13f8dd4c1a 5 weeks ago 120 MB
[root@kubemaster docker_image]# docker rmi myubuntuimage:1.0
Untagged: myubuntuimage:1.0
Deleted: sha256:c3c3c6aa74fab40caceceb71e21f236164de1b6a75b8cd35477df29e69fb8e61
[root@kubemaster docker_image]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nara0617/my-apache2 2.0 7d85cc3b2d80 12 days ago 154 MB
docker.io/nara0617/my-apache2 latest b38072c5ab70 4 weeks ago 154 MB
docker.io/ubuntu 16.04 5e13f8dd4c1a 5 weeks ago 120 MB
[root@kubemaster docker_image]#
위와 같이 docker rm은 docker container를 삭제하는 명령어이며, docker rmi는 docker image를 삭제하는 명령어입니다.
docker rm을 수행하기 위해서는 해당 docker image가 stop 상태이어야 가능하여, docker rm 수행 전 docker stop을 먼저 진행해야 합니다.
docker rmi는 image:tag 형태로 삭제가 가능하며, tag를 생략할 경우 latest tag를 찾아 삭제를 시도합니다.
5) docker attach & docker exec (Running 중인 Container에 연결 및 명령어 실행)
[root@kubemaster docker_image]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11df16f0a7a0 docker.io/ubuntu:16.04 "/bin/bash" 46 minutes ago Up 1 second myubuntu
[root@kubemaster docker_image]# docker attach myubuntu
root@11df16f0a7a0:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:20 ? 00:00:00 /bin/bash
root 12 1 0 16:20 ? 00:00:00 ps -ef
root@11df16f0a7a0:/# exit
exit
[root@kubemaster docker_image]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11df16f0a7a0 docker.io/ubuntu:16.04 "/bin/bash" 46 minutes ago Exited (0) 1 second ago myubuntu
[root@kubemaster docker_image]# docker start myubuntu
myubuntu
[root@kubemaster docker_image]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11df16f0a7a0 docker.io/ubuntu:16.04 "/bin/bash" 46 minutes ago Up 1 second myubuntu
[root@kubemaster docker_image]# docker exec -it myubuntu /bin/bash
root@11df16f0a7a0:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:20 ? 00:00:00 /bin/bash
root 11 0 0 16:21 ? 00:00:00 /bin/bash
root 22 11 0 16:21 ? 00:00:00 ps -ef
root@11df16f0a7a0:/# exit
exit
[root@kubemaster docker_image]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11df16f0a7a0 docker.io/ubuntu:16.04 "/bin/bash" 49 minutes ago Up 2 minutes myubuntu
[root@kubemaster docker_image]#
docker attach와 docker exec 모두 docker container에 접속하기 위한 용도로 사용된다는 공통점이 있습니다.
다만 docker attach의 경우 Container의 PID 1번을 가져와 실행하는 역할을 수행하며, 컨테이너가 /bin/bash를 사용하여 시작되었을 경우 콘솔에 접속하게 됩니다. 위의 경우 docker attach로 접근 시 /bin/bash로 기동 된 1번 Init PID에 /bin/bash가 기동되어 있으며, attach는 이를 통해 콘솔로 접근하였습니다. 따라서 해당 콘솔에서 벗어 날 경우 (exit) init pid가 kill이 되어 해당 컨테이너는 중지됩니다. 또한 여러 콘솔에서 동시에 attach로 접근할 경우 모두 동일한 콘솔에 접속한 상태로 인식되어 (모두 PID 1번의 /bin/bash를 공유) 하나의 쉘 인스턴스만 사용할 수 있습니다.
docker exec의 경우 docker container에 접속함과 동시에 별도의 명령어를 전달합니다. 위의 경우 docker exec -it myubuntu /bin/bash를 수행하면 /bin/bash가 명령어로 컨테이너에 전달되어 11 pid의 별도 /bin/bash 프로세스가 기동되며 이를 통해 콘솔에 접근하였습니다. 따라서 해당 콘솔에 벗어 날 경우에도 컨테이너는 죽지 않고 유지됩니다. 또한 신규 프로세스를 생성하기 때문에 여러 클라이언트가 접근할 경우 각각 별도의 쉘 인스턴스를 제공합니다.
일반적으로 이와 같은 이유로 인해 일회용으로 사용을 제한하기 위할 경우 attach를 사용하고, 그 밖의 경우에는 exec로 접근하는 경우가 일반적입니다.
6) docker build (Dockerfile을 참조하여 도커 이미지 생성)
[root@kubemaster docker_image]# docker build --rm -t myubuntuimage:1.0 .
Sending build context to Docker daemon 3.072 kB
Step 1/2 : FROM ubuntu:16.04
---> 5e13f8dd4c1a
Step 2/2 : MAINTAINER Nara Son <nara0617@gmail.com>
---> Using cache
---> 41106a99e161
Successfully built 41106a99e161
[root@kubemaster docker_image]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myubuntuimage 1.0 41106a99e161 59 seconds ago 120 MB
docker.io/nara0617/my-apache2 latest b38072c5ab70 4 weeks ago 154 MB
docker.io/ubuntu 16.04 5e13f8dd4c1a 6 weeks ago 120 MB
[root@kubemaster docker_image]#
docker build를 통해 docker image를 생성할 수 있습니다.
--rm 옵션의 경우 이미지 생성에 성공하였을 경우 임시 컨테이너를 삭제하는 옵션이며, -t 옵션의 경우 tag 저장소입니다.
일반적으로 tag 이름은 docker_registry/repository/imagename:tag 형태로 작성합니다.
7) docker run (Docker Process를 기동)
[root@CIServer ~]# docker run -it -d -p 80:80 -e APACHE_HOME=/opt/apache -v /ContainerData:/HostData --name myapache httpd:latest
Unable to find image 'httpd:latest' locally
Trying to pull repository docker.io/library/httpd ...
latest: Pulling from docker.io/library/httpd
000eee12ec04: Pull complete
32b8712d1f38: Pull complete
f1ca037d6393: Pull complete
c4bd3401259f: Pull complete
51c60bde4d46: Pull complete
Digest: sha256:ac6594daaa934c4c6ba66c562e96f2fb12f871415a9b7117724c52687080d35d
Status: Downloaded newer image for docker.io/httpd:latest
03e4e50ff480a80e23ce67b823a01e2d67b8e036fd4dd47948aa3f44007a982c
[root@CIServer ~]#
docker run 명령어를 통해 docker image를 기동할 수 있습니다.
-d 옵션은 container를 daemon으로 기동하는 옵션이며, -p 옵션은 호스트 os와 container 간 port를 연결하는 옵션입니다.
-e 옵션은 environment를 적용하는 옵션이며, --name은 container의 이름을 지정할 수 있습니다.
-v 옵션은 HostData와 ContainerData를 공유하는 용도로 사용합니다. 이를 활용하면 컨테이너 간의 파일을 공유할 수 있습니다.
[root@CIServer ~]# docker exec -it myapache bash
root@03e4e50ff480:/usr/local/apache2# env
HOSTNAME=03e4e50ff480
PWD=/usr/local/apache2
HTTPD_VERSION=2.4.41
HOME=/root
HTTPD_PATCHES=
TERM=xterm
HTTPD_SHA256=133d48298fe5315ae9366a0ec66282fa4040efa5d566174481077ade7d18ea40
SHLVL=1
APACHE_HOME=/opt/apache
PATH=/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HTTPD_PREFIX=/usr/local/apache2
_=/usr/bin/env
root@03e4e50ff480:/usr/local/apache2#
8) docker commit (docker container 기반 images 생성)
[root@CIServer sysconfig]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/httpd latest 2ae34abc2ed0 2 days ago 165 MB
docker.io/jenkins latest cd14cecfdb3a 16 months ago 696 MB
[root@CIServer sysconfig]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
03e4e50ff480 httpd:latest "httpd-foreground" 31 minutes ago Up 31 minutes 0.0.0.0:80->80/tcp myapache
[root@CIServer sysconfig]# docker commit myapache httpd:v1.0
sha256:0fe8bdfe6399bf27e46f1fef4cbbd52bbe449981302556722efd716772fc5991
[root@CIServer sysconfig]#
[root@CIServer sysconfig]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd v1.0 0fe8bdfe6399 10 seconds ago 165 MB
docker.io/httpd latest 2ae34abc2ed0 2 days ago 165 MB
docker.io/jenkins latest cd14cecfdb3a 16 months ago 696 MB
[root@CIServer sysconfig]#
위와 같이 설정할 경우 myapache라는 기동 중인 Container를 기반으로 httpd:v1.0이라는 이미지를 생성합니다.
이를 기반으로 Base이미지를 기반으로 커스터마이징 된 이미지를 생성하고 관리할 수 있습니다.
9) docker export / import (docker image와 container를 tar 파일로 추출)
[root@CIServer sysconfig]# docker export myapache >> apache.tar
[root@CIServer sysconfig]# ls -la apache.tar
-rw-r--r--. 1 root root 167010816 Dec 2 00:43 apache.tar
[root@CIServer sysconfig]# docker import apache.tar https:v1.1
sha256:35b0914eb5716b6ad7bffbe7ae5601ee65d5468bb65473c0568c4624dd507748 [root@CIServer sysconfig]# docker export a7fce4baf6a6 | docker import - httpd:v1.1
sha256:83db3564935410c73aa5c5721dc93ec87ad58b4ee690873914298ba6d624e24c
[root@CIServer sysconfig]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd v1.1 83db35649354 7 seconds ago 162 MB
httpd v1.0 0fe8bdfe6399 58 minutes ago 165 MB
docker.io/httpd latest 2ae34abc2ed0 2 days ago 165 MB
docker.io/jenkins latest cd14cecfdb3a 16 months ago 696 MB
[root@CIServer sysconfig]#
docker export 명령어를 통해 docker container를 tar 파일로 추출할 수 있습니다.
docker import 명령어를 통해 docker cotnaienr를 적용할 수 있습니다.
docker export와 import의 조합으로 이미지의 불필요한 파티션을 줄이고 이미지 경량화를 수행할 수 있습니다.
10) docker save / load (docker image를 tar 파일로 추출)
[root@CIServer sysconfig]# docker save https:v1.1 -o save.tar
[root@CIServer sysconfig]# ls -la save.tar
-rw-------. 1 root root 167019008 Dec 2 01:08 save.tar
[root@CIServer sysconfig]# docker load -i save.tar
Loaded image: https:v1.1
[root@CIServer sysconfig]#
docker save와 load를 사용하여 docker 이미지를 추출하고 로드할 수 있습니다. docker export의 경우 컨테이너 이미지를 추출할 수 있지만, save는 도커 이미지만 추출이 가능합니다.
11) docker cp (host os의 파일을 docker container 내부로 복사, docker container 내부의 파일을 host os로 복사)
[root@nrson ~]# docker run -itd --name httpd httpd
591280164e3bca15959ad84cf1f58d4d941ec25d34c152544441c930e2275320
[root@nrson ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
591280164e3b httpd "httpd-foreground" 4 seconds ago Up 3 seconds 80/tcp httpd
[root@nrson ~]# docker cp test/upload.sh httpd:/usr/local/apache2
[root@nrson ~]# docker exec -it httpd bash
root@591280164e3b:/usr/local/apache2# ls -la
total 36
drwxr-xr-x. 1 www-data www-data 35 Dec 8 10:54 .
drwxr-xr-x. 1 root root 21 Nov 23 00:33 ..
drwxr-xr-x. 2 root root 276 Nov 23 00:36 bin
drwxr-xr-x. 2 root root 167 Nov 23 00:36 build
drwxr-xr-x. 2 root root 78 Nov 23 00:36 cgi-bin
drwxr-xr-x. 4 root root 84 Nov 23 00:36 conf
drwxr-xr-x. 3 root root 4096 Nov 23 00:36 error
drwxr-xr-x. 2 root root 24 Nov 23 00:36 htdocs
drwxr-xr-x. 3 root root 8192 Nov 23 00:36 icons
drwxr-xr-x. 2 root root 4096 Nov 23 00:36 include
drwxr-xr-x. 1 root root 23 Dec 8 10:53 logs
drwxr-xr-x. 2 root root 8192 Nov 23 00:36 modules
-rw-r--r--. 1 root root 12 Dec 8 10:52 upload.sh
root@591280164e3b:/usr/local/apache2#
위와 같이 호스트 OS에서 docker container로 파일을 복사하는 방법은 docker cp [file_name] [container_name]:[path]입니다.
[root@nrson ~]# docker cp httpd:/usr/local/apache2/conf/httpd.conf .
[root@nrson ~]# ls -la
total 48
dr-xr-x---. 3 root root 144 Dec 8 19:57 .
dr-xr-xr-x. 17 root root 224 Dec 8 15:51 ..
-rw-------. 1 root root 1398 Dec 8 15:52 anaconda-ks.cfg
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
-rw-r--r--. 1 root root 20823 Nov 23 09:36 httpd.conf
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
drwxr-xr-x. 3 root root 102 Dec 8 19:52 test
[root@nrson ~]#
반대로 docker container에서 호스트 OS로 파일을 복사하는 방법은 docker cp [container_name]:[file_name] [path]입니다.
12) docker network (Manage docker networks)
docker에서 사용하는 network를 생성하고 적용하는 명령어 입니다.
[root@nrson2 test]# docker exec -it centos bash
[root@8d094ac51c55 /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:05 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.5/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:5/64 scope link
valid_lft forever preferred_lft forever
[root@8d094ac51c55 /]# exit
exit
[root@nrson2 test]# docker network ls
NETWORK ID NAME DRIVER SCOPE
31ce274211b6 bridge bridge local
4f5d7934e0dc host host local
8c488281aa5d none null local
[root@nrson2 test]# docker network create mynetwork
ad4acba77f91f572c1dd339594bc0f7c8bc64e9ff2e516b0245223de9f27105f
[root@nrson2 test]# docker network ls
NETWORK ID NAME DRIVER SCOPE
31ce274211b6 bridge bridge local
4f5d7934e0dc host host local
ad4acba77f91 mynetwork bridge local
8c488281aa5d none null local
[root@nrson2 test]# docker network connect mynetwork centos
[root@nrson2 test]# docker exec -it centos bash
[root@8d094ac51c55 /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:05 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.5/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:5/64 scope link
valid_lft forever preferred_lft forever
25: eth1@if26: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.18.0.2/16 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe12:2/64 scope link
valid_lft forever preferred_lft forever
[root@8d094ac51c55 /]# exit
exit
[root@nrson2 test]# ifconfig -a
br-ad4acba77f91: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:83ff:fedc:31b2 prefixlen 64 scopeid 0x20
ether 02:42:83:dc:31:b2 txqueuelen 0 (Ethernet)
RX packets 18676 bytes 14094828 (13.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 23792 bytes 9625528 (9.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
....
[root@nrson2 test]# docker network inspect mynetwork
[
{
"Name": "mynetwork",
"Id": "ad4acba77f91f572c1dd339594bc0f7c8bc64e9ff2e516b0245223de9f27105f",
"Created": "2019-12-10T01:12:45.485920974+09:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {
"8d094ac51c55f331f90ef3f2cb4300082d53e05f44afc510651d1995dbff8b70": {
"Name": "centos",
"EndpointID": "4fe20960362a652afbbac435c48cd202586b496aac128ab07276833f5c22b91b",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
[root@nrson2 test]#
docker network ls는 network 리스트를 보여줍니다.
docker network create는 신규 network 리스트를 생성합니다.
docker network connect는 network와 docker container를 연결합니다.
docket network inspect는 network의 상세 정보를 표출합니다.
13) docker info (Docker information)
docker의 정보를 확인하는 명령어 입니다.
[root@kubemaster kubespray]# docker info
Client:
Debug Mode: false
Server:
Containers: 22
Running: 20
Paused: 0
Stopped: 2
Images: 26
Server Version: 18.09.7
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-957.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 2.779GiB
Name: kubemaster
ID: MLOF:MCT6:7TY4:7FX6:ZID2:VCLO:LDXE:TZAO:KEIA:O5JW:TYBX:APJE
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
192.168.56.100:5000
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
[root@kubemaster kubespray]#
docker의 상세 정보를 확인할 수 있습니다. (Cgroup, version, network 등)
추가적인 도커 옵션 테스트는 지속 업데이트 하도록 하겠습니다.
'③ 클라우드 > ⓓ Docker' 카테고리의 다른 글
Docker Container - Status Exited (n) Code 알아보기 (0) | 2019.12.27 |
---|---|
[Docker] Kubernetes 보안 (Cgroup) (1) | 2019.10.11 |
[Docker Insecure Registry] "server gave HTTP response to HTTPS client" (0) | 2019.08.27 |
[Docker Registry] Docker Image를 활용한 Local Registry 구축 (4) | 2019.08.27 |
[Docker Performance Monitoring] docker stats (0) | 2019.08.26 |
- Total
- Today
- Yesterday
- aa
- 아키텍처
- jeus
- JBoss
- openstack token issue
- SWA
- JEUS7
- MSA
- 쿠버네티스
- 마이크로서비스
- API Gateway
- k8s
- aws
- apache
- OpenStack
- Architecture
- SA
- openstack tenant
- wildfly
- node.js
- nodejs
- JEUS6
- TA
- 마이크로서비스 아키텍처
- Da
- webtob
- git
- Docker
- 오픈스택
- kubernetes
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |