- [Network | Docker] 이미지2024년 07월 04일 19시 56분 51초에 업로드 된 글입니다.작성자: 이주여이
1. 실습용 컨테이너 생성
[root@localhost ~]# docker run -it \ > --name commit_test \ > rockylinux/rockylinux [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c2fed75bfdf6 rockylinux/rockylinux "/bin/bash" 50 minutes ago Up 50 minutes commit_test [root@c2fed75bfdf6 /]# ls bin etc lib lost+found mnt proc run srv tmp var dev home lib64 media opt root sbin sys usr [root@c2fed75bfdf6 /]# echo my_first_commit! >> first [root@c2fed75bfdf6 /]# ls bin etc home lib64 media opt root sbin sys usr dev first lib lost+found mnt proc run srv tmp var [root@c2fed75bfdf6 /]# cat first my_first_commit!
2. docker commit 명령어를 통한 이미지 생성
[root@localhost ~]# docker commit \ > -a "jy94" \ > -m "my first commit!" \ > commit_test \ > commit_test:first [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE commit_test first 1437cb40ff5f 5 seconds ago 196MB
-a
- author / 이미지 작성자를 나타내는 메타 데이터-m
- 커밋 메세지commit_test
- 컨테이너 이름commit_test:first
- 생성할 이미지(commit_test - 이미지 이름 / first - 태그 이름)
docker commit 후 도커에 저장된 이미지를 확인하면 방금 커밋했던 이미지가 목록에 출력된 것을 확인할 수 있다.
3. 직접 만든 이미지로 이미지 생성
[root@localhost ~]# docker run -it \ > --name commit_test2 \ > commit_test:first [root@dd17230f0ed1 /]# echo test_second! >> second [root@dd17230f0ed1 /]# ls bin etc home lib64 media opt root sbin srv tmp var dev first lib lost+found mnt proc run second sys usr [root@dd17230f0ed1 /]# cat second test_second!
[root@localhost ~]# docker commit \ > -a "jy94" -m "my second commit!" \ > commit_test2 \ > commit_test:second [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE commit_test second 77d22cf302fb 5 seconds ago 196MB commit_test first 1437cb40ff5f 8 minutes ago 196MB
docker commit
명령어를 통해 이미지를 만들었다. pull로 받은 이미지나 내가 만든 이미지를 확인하기 위해선inspect
명령어를 사용하면 된다.[root@localhost ~]# docker inspect commit_test:first [ { "Id": "sha256:1437cb40ff5f3b9f3c5701f4d7682ca653387c32621493eefd278817220e1aa4", "RepoTags": [ "commit_test:first" ], "RepoDigests": [], "Parent": "sha256:523ffac7fb2e245e5e7c407b9f7377be9c6c3bf03d380981168311f49030da17", "Comment": "my first commit!", "Created": "2024-07-01T08:38:13.621284304Z", "DockerVersion": "27.0.2", "Author": "jy94", "Config": { "Hostname": "c2fed75bfdf6", "Domainname": "", "User": "", "AttachStdin": true, "AttachStdout": true, "AttachStderr": true, "Tty": true, "OpenStdin": true, "StdinOnce": true, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/bash" ], "Image": "rockylinux/rockylinux", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": { "io.buildah.version": "1.23.1" } }, "Architecture": "amd64", "Os": "linux", "Size": 195598609, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/86c4813fcc4481dce106bf1304158998369e06d7f6b06f7e5e6c4db76ebe0473/diff", "MergedDir": "/var/lib/docker/overlay2/891461206d466413b0db77538e89a57e675bda73ffc242673c5b3885d43ab641/merged", "UpperDir": "/var/lib/docker/overlay2/891461206d466413b0db77538e89a57e675bda73ffc242673c5b3885d43ab641/diff", "WorkDir": "/var/lib/docker/overlay2/891461206d466413b0db77538e89a57e675bda73ffc242673c5b3885d43ab641/work" }, "Name": "overlay2" }, "RootFS": { "Type": "layers", "Layers": [ "sha256:44e6e3eb06d8ec453315fb8767b27ef54f69ca5c5364b6251d6bb2b907cc14bc", "sha256:8ac2a4d04b1579d008bbc70b38ce3cad4b12f02f2884237935caa8b78d2144cb" ] }, "Metadata": { "LastTagTime": "2024-07-01T17:38:13.685229347+09:00" } } ]
중요하게 봐야 할 부분은 Layers 부분이다. 나는 rocky linux 이미지를 땡겨와 commit_test:first로 이미지를 한번 만들고 만들어진 commit_test:first 이미지를 commit_test:second라는 이름으로 한번 더 만들었다.
rocky linux, commit_test:first, commit_test:second 총 3개의 파일 크기가 188MB 일 때 188MB 크기의 이미지가 3개 존재하는 게 아니라 컨테이너에서 변경된 사항만 새로운 레이어로 저장되고 그 레이어를 포함해 새로운 이미지를 생성한다. 때문에 전체 이미지의 실제 크기는 188MB + first 파일 크기 + second 파일 크기가 되는 것이다.
- first 파일 - commit_test:first 생성 시 사용했던 컨테이너가 변경된 사항
- second 파일 - commit_test:second 생성 시 사용했던 컨테이너가 변경된 사항 …
특정 이미지가 어떤 레이어로 생성됐는지 알고싶다면
docker history
명령어를 통해 알 수 있다.[root@localhost ~]# docker history commit_test:second IMAGE CREATED CREATED BY SIZE COMMENT 77d22cf302fb 15 minutes ago /bin/bash 13B my second commit! 1437cb40ff5f 23 minutes ago /bin/bash 17B my first commit! 523ffac7fb2e 24 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 24 months ago /bin/sh -c #(nop) ADD file:1fc0280b685c9dca1… 196MB
4. 이미지 삭제
이미지를 삭제할 때는 사용 중인 컨테이너는 삭제할 수 없으며
docker rm -f ${컨테이너 이름 }
처럼 강제로 삭제할 수 있지만 이는 이미지 레이어 파일을 실제로 삭제하지는 않으며 이미지 이름만 삭제시킨다. 따라서 이미지 삭제 시에는 사용 중인 컨테이너를 중지시키고 삭제해야 한다.[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dd17230f0ed1 commit_test:first "/bin/bash" 23 minutes ago Up 23 minutes commit_test2 c2fed75bfdf6 rockylinux/rockylinux "/bin/bash" 35 minutes ago Up 35 minutes commit_test b97d76ab0c2d mysql:5.7 "docker-entrypoint.s…" 7 hours ago Up 7 hours 33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp mysql 3d3ebab72926 rockylinux/rockylinux "/usr/sbin/init" 24 hours ago Up 16 hours 0.0.0.0:8081->80/tcp, :::8081->80/tcp rockylinux [root@localhost ~]# docker stop commit_test2 && docker rm commit_test2 commit_test2 commit_test2 [root@localhost ~]# docker rmi commit_test:second Untagged: commit_test:second
그리고 댕글링 이미지는
docker image prune
명령어를 통해 삭제가 가능하다.# <none> - 댕글링(dangling) 이미지로 이미지 이름이 <none>으로 출력된다. [root@localhost ~]# docker images -f dangling=true # 댕글링 이미지만 출력한다. REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 67ee4013357e 34 minutes ago 196MB [root@localhost ~]# docker image prune # 댕글링 이미지만 모두 삭제한다. [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE
추출, 배포는 다음에...🥹'Network > Docker' 카테고리의 다른 글
[Network | Docker] jar 배포 (0) 2024.07.07 [Network | Docker] Dockerfile (0) 2024.07.05 [Network | Docker] 네트워크 (0) 2024.07.03 [Network | Docker] 데이터베이스 외부 원격 접속 (0) 2024.07.03 [Network | Docker] 볼륨 (0) 2024.07.02 다음글이 없습니다.이전글이 없습니다.댓글