- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
Docker 살펴보기
지금까지 기본적인 명령 사용 방법과 이미지 생성 방법을 알아보았습니다. 이 장에서는 이미지와 컨테이너의 정보를 조회하는 방법, 컨테이너에서 파일을 꺼내는 방법, 변경된 파일을 확인하는 방법, 변경 사항을 이미지로 저장하는 방법을 알아보겠습니다.
history 명령으로 이미지 히스토리 살펴보기
앞에서 생성한 hello:0.1 이미지의 히스토리를 조회해보겠습니다.
$ sudo docker history hello:0.1
IMAGE CREATED CREATED BY SIZE COMMENT
8307ff628ec8 5 minutes ago /bin/sh -c #(nop) EXPOSE 443 0B
adbb8a7ef64d 5 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B
a405f9d28415 5 minutes ago /bin/sh -c #(nop) CMD ["nginx"] 0B
a9726f7e681e 5 minutes ago /bin/sh -c #(nop) WORKDIR /etc/nginx 0B
78f354dbdbcc 5 minutes ago /bin/sh -c #(nop) VOLUME [/data /etc/nginx/… 0B
66f885084c19 5 minutes ago /bin/sh -c chown -R www-data:www-data /var/l… 0B
5c54eb835f57 5 minutes ago /bin/sh -c echo "\ndaemon off;" >> /etc/ngin… 1.46kB
9fc2f61ad2f4 5 minutes ago /bin/sh -c apt install -y nginx 55.6MB
9c80ad1c1c34 6 minutes ago /bin/sh -c apt update 36.2MB
69b49943b930 6 minutes ago /bin/sh -c #(nop) MAINTAINER Foo Bar <foo@b… 0B
2dc39ba059dc 7 days ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 7 days ago /bin/sh -c #(nop) ADD file:a7268f82a86219801… 77.8MB
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 SIZE
hello 0.2 011ff3ff87e9 14 seconds ago 170MB
hello 0.1 8307ff628ec8 6 minutes ago 170MB
ubuntu 22.04 2dc39ba059dc 7 days ago 77.8MB
hello:0.2 이미지가 생성되었습니다.
diff 명령으로 컨테이너에서 변경된 파일 확인하기
docker diff
명령은 컨테이너가 실행되면서 변경된 파일 목록을 출력합니다. 비교 기준은 컨테이너를 생성한 이미지 내용입니다.
$ sudo docker diff hello-nginx
C /etc
C /etc/nginx
A /etc/nginx/site-enabled
A /data
C /var
C /var/lib
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 /run
A /run/nginx.pid
docker diff <컨테이너 이름>
형식입니다. 컨테이너 이름 대신 컨테이너 ID를 사용해도 됩니다.
A
는 추가된 파일, C
는 변경된 파일, D
는 삭제된 파일입니다.
inspect 명령으로 세부 정보 확인하기
docker inspect
명령은 이미지와 컨테이너의 세부 정보를 출력합니다.
$ sudo docker inspect hello-nginx
[
{
"Id": "9f4bb4c4a3d8698a31507febffba19a655caab5a0ee78452cc2c64ea406af7bd",
"Created": "2022-09-09T03:11:49.391803068Z",
"Path": "nginx",
"Args": [],
"State": {
"Status": "running",
... 생략 ...
},
"Image": "sha256:8307ff628ec8900bc7a80eecc54bf6f21b6019ee96d22ca3e4152a06f704756d",
... 생략 ...
"Name": "/hello-nginx",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
... 생략 ...
"HostConfig": {
... 생략 ...
"NetworkMode": "default",
"PortBindings": {
"80/tcp": [
{
"HostIp": "",
"HostPort": "80"
}
]
},
... 생략 ...
},
... 생략 ...
"Config": {
"Hostname": "9f4bb4c4a3d8",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"443/tcp": {},
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"nginx"
],
"Image": "hello:0.1",
"Volumes": {
"/data": {},
"/etc/nginx/site-enabled": {},
"/var/log/nginx": {}
},
"WorkingDir": "/etc/nginx",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "0adee39c61d22d570a50a3e9ba174dc7901ffea732f6aca75e5ea00a330f9fa3",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"443/tcp": null,
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "80"
},
{
"HostIp": "::",
"HostPort": "80"
}
]
},
... 생략 ...
}
}
]
}]
docker inspect <이미지 또는 컨테이너 이름>
형식입니다. 이미지, 컨테이너 이름 대신 이미지 ID나, 컨테이너 ID를 사용해도 됩니다.
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.