티스토리 뷰

728x90
반응형

지난 포스팅까지 다양한 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 등)

 

추가적인 도커 옵션 테스트는 지속 업데이트 하도록 하겠습니다.

728x90
반응형