Docker 살펴보기

이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20

지금까지 기본적인 명령 사용 방법과 이미지 생성 방법을 알아보았습니다. 이 장에서는 이미지와 컨테이너의 정보를 조회하는 방법, 컨테이너에서 파일을 꺼내는 방법, 변경된 파일을 확인하는 방법, 변경 사항을 이미지로 저장하는 방법을 알아보겠습니다.

history 명령으로 이미지 히스토리 살펴보기

앞에서 생성한 hello:0.1 이미지의 히스토리를 조회해보겠습니다.

$ sudo docker history hello:0.1
IMAGE               CREATED                  CREATED BY                                      SIZE
e54ca5efa2e9        Less than a second ago   /bin/sh -c apt-get update && apt-get install    8 B
6c37f792ddac        Less than a second ago   /bin/sh -c apt-get update && apt-get install    83.43 MB
83ff768040a0        Less than a second ago   /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/   1.903 kB
2f4b4d6a4a06        Less than a second ago   /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic   194.5 kB
d7ac5e4f1812        Less than a second ago   /bin/sh -c #(nop) ADD file:adc47d03da6bb2418e   192.5 MB
2031ee0736e8        21 minutes ago           /bin/sh -c #(nop) EXPOSE map[443/tcp:{}]        0 B
aa7183744747        21 minutes ago           /bin/sh -c #(nop) EXPOSE map[80/tcp:{}]         0 B
747f1cc74b12        21 minutes ago           /bin/sh -c #(nop) CMD [nginx]                   0 B
6103d971baec        21 minutes ago           /bin/sh -c #(nop) WORKDIR /etc/nginx            0 B
ba6879ea73b0        21 minutes ago           /bin/sh -c #(nop) VOLUME ["/data", "/etc/ngin   0 B
9bed2a790c60        21 minutes ago           /bin/sh -c chown -R www-data:www-data /var/li   7 B
d51d99711779        21 minutes ago           /bin/sh -c echo "\ndaemon off;" >> /etc/nginx   1.621 kB
39c72a05ccf4        21 minutes ago           /bin/sh -c apt-get install -y nginx             18.07 MB
c7bc6a6c45a2        25 minutes ago           /bin/sh -c apt-get update                       4.206 MB
23f17c89799a        25 minutes ago           /bin/sh -c #(nop) MAINTAINER Foo Bar <foo@bar   0 B
511136ea3c5a        11 months ago                                                            0 B

docker history <이미지 이름>:<태그> 형식입니다. 이미지 이름 대신 이미지 ID를 사용해도 됩니다.

이렇게 Dockefile에 설정한 대로 히스토리가 생성됩니다.

cp 명령으로 파일 꺼내기

hello-nginx 컨테이너에서 파일을 꺼내보겠습니다.

$ sudo docker cp hello-nginx:/etc/nginx/nginx.conf ./

docker cp <컨테이너 이름>:<경로> <호스트 경로> 형식입니다.

현재 디렉터리에 nginx.conf 파일이 복사되었습니다.

commit 명령으로 컨테이너의 변경사항을 이미지로 생성하기

docker commit 명령은 컨테이너의 변경 사항을 이미지 파일로 생성합니다.

hello-nginx 컨테이너 안의 파일 내용이 바뀌었다고 치고, 컨테이너를 이미지 파일로 생성해보겠습니다.

$ sudo docker commit -a "Foo Bar <foo@bar.com>" -m "add hello.txt" hello-nginx hello:0.2

docker commit <옵션> <컨테이너 이름> <이미지 이름>:<태그> 형식입니다. 컨테이너 이름 대신 컨테이너 ID를 사용해도 됩니다.

-a "Foo Bar <foo@bar.com>"과 -m "add hello.txt" 옵션으로 커밋한 사용자와 로그 메시지를 설정합니다. hello-nginx 컨테이너를 hello:0.2 이미지로 생성합니다.

이미지 목록을 출력합니다.

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED                  VIRTUAL SIZE
ubuntu              14.04               e54ca5efa2e9        Less than a second ago   276.1 MB
ubuntu              latest              e54ca5efa2e9        Less than a second ago   276.1 MB
hello               0.2                 d2e8c352b303        About a minute ago       298.4 MB
hello               0.1                 2031ee0736e8        44 minutes ago           298.4 MB

hello:0.2 이미지가 생성되었습니다.

diff 명령으로 컨테이너에서 변경된 파일 확인하기

docker diff 명령은 컨테이너가 실행되면서 변경된 파일 목록을 출력합니다. 비교 기준은 컨테이너를 생성한 이미지 내용입니다.

$ sudo docker diff hello-nginx
A /data
C /run
A /run/nginx.pid
C /var/lib/nginx
A /var/lib/nginx/body
A /var/lib/nginx/fastcgi
A /var/lib/nginx/proxy
A /var/lib/nginx/scgi
A /var/lib/nginx/uwsgi
C /etc/nginx
A /etc/nginx/site-enabled
C /dev
C /dev/kmsg

docker diff <컨테이너 이름> 형식입니다. 컨테이너 이름 대신 컨테이너 ID를 사용해도 됩니다.

A는 추가된 파일, C는 변경된 파일, D는 삭제된 파일입니다.

inspect 명령으로 세부 정보 확인하기

docker inspect 명령은 이미지와 컨테이너의 세부 정보를 출력합니다.

$ sudo docker inspect hello-nginx
[{
    "Args": [],
    "Config": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": [
            "nginx"
        ],
        "CpuShares": 0,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": null,
        "Env": [
            "HOME=/",
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
        "ExposedPorts": {
            "443/tcp": {},
            "80/tcp": {}
        },
        "Hostname": "d4369f661b0a",
        "Image": "hello:0.1",
        ... 생략 ...
    },
    "Name": "/hello-nginx",
        "NetworkSettings": {
        "Bridge": "docker0",
        "Gateway": "172.17.42.1",
        "IPAddress": "172.17.0.40",
        "IPPrefixLen": 16,
        "PortMapping": null,
        "Ports": {
            "443/tcp": null,
            "80/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "80"
                }
            ]
        }
    },
    "Path": "nginx",
    "ProcessLabel": "",
    "ResolvConfPath": "/etc/resolv.conf",
    "State": {
        "ExitCode": 0,
        "FinishedAt": "0001-01-01T00:00:00Z",
        "Paused": false,
        "Pid": 19804,
        "Running": true,
        "StartedAt": "2014-06-03T22:25:42.838118718Z"
    },
    ... 생략 ...
}]

docker inspect <이미지 또는 컨테이너 이름> 형식입니다. 이미지, 컨테이너 이름 대신 이미지 ID나, 컨테이너 ID를 사용해도 됩니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

30 November 2014