- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
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 공유는 허용합니다.