1. 이미지 생성
root@k8s-node1:~# docker run -i -t --name imageTest1 ubuntu:14.04
root@44132ea15e38:/# echo TEST1 > 1
root@44132ea15e38:/# exit
exit
root@k8s-node1:~# docker commit -m "FIRST COMMIT" imageTest1 imagetest:1.0
sha256:ee217ea652adb9a9197bbbb41431a6fdaf995b03039151bf2968513eafb40da6
root@k8s-node1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
imagetest 1.0 ee217ea652ad 10 seconds ago 197MB
기존의 ubuntu 이미지를 이용해 새로운 나의 이미지를 만들었다.
docker commit [옵션] [컨테이너이름] [이미지이름:태그]
옵션에는 커밋 메시지를 넣었고 그 외 옵션들이 많다.
이미지이름:태그 에 태그를 입력하지 않을경우 자동으로 latest 라는 태그가 입력된다.
이후 docker images 명령어를 이용해 현재 host local 에 저장되어 있는 이미지들을 확인할 수 있다.
root@k8s-node1:~# docker run -i -t --name imageTest2 imagetest:1.0
root@b529b3b77525:/# echo TEST2 > 2
root@b529b3b77525:/# exit
exit
root@k8s-node1:~# docker commit -m "SECONDE COMMIT" imageTest2 imagetest:2.0
sha256:9766443e2725b4110cfa66461058ed4c2ce7f3127af7594a31e939c7f1c5ae45
root@k8s-node1:~# docker run -i -t --name imageTest3 imagetest:2.0
root@b20f19f50ff5:/# ls
1 2 bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@b20f19f50ff5:/# cat 1 && cat 2
TEST1
TEST2
root@b20f19f50ff5:/# exit
exit
이후 내가 아까 만든 imagetest:1.0 이미지를 이용해 새로운 이미지를 하나 더 만들었다.
그 imagetest:2.0 으로 컨테이너를 생성 한 뒤 내가 만든 파일 (1, 2) 파일이 잘 들어가있는지 확인.
root@k8s-node1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
imagetest 2.0 9766443e2725 37 seconds ago 197MB
imagetest 1.0 ee217ea652ad 2 minutes ago 197MB
해당 이미지들은 아래와 같이 차이점을 확인할 수 있다.
root@k8s-node1:~# docker inspect imagetest:1.0
...
"Layers": [
"sha256:f2fa9f4cf8fd0a521d40e34492b522cee3f35004047e617c75fadeb8bfd1e6b7",
"sha256:30d3c4334a2379748937816c01f5c972a8291a5ccc958d6b33d735457a16196e",
"sha256:83109fa660b2ed9307948505abd3c1f24c27c64009691067edb765bd3714b98d",
"sha256:a30a598265b7d7057aa203b117b3464b419c337a182f23ef8e3f34923b1180e1"
]
...
root@k8s-node1:~# docker inspect imagetest:2.0
...
"Layers": [
"sha256:f2fa9f4cf8fd0a521d40e34492b522cee3f35004047e617c75fadeb8bfd1e6b7",
"sha256:30d3c4334a2379748937816c01f5c972a8291a5ccc958d6b33d735457a16196e",
"sha256:83109fa660b2ed9307948505abd3c1f24c27c64009691067edb765bd3714b98d",
"sha256:a30a598265b7d7057aa203b117b3464b419c337a182f23ef8e3f34923b1180e1",
"sha256:166240ec4c29e9022d1b6725595501316cecec27cb91b1358b1f841660e7d291"
]
...
내가만든 imagetest:1.0 과 그 이미지를 이용해 만든 imagetest:2.0
sha256 해시값을 확인해보면 f2f... 30d... 831... a30... 으로 시작하는 레이어가 둘 다 있고,
좀 더 추가한 imagetest:2.0 에는 166.. 으로시작하는 레이어가 한개 더 있음을 확인할 수 있다.
기존의 이미지에 레이어를 하나씩 더해가는 것이다.
2. 이미지 확인 및 삭제
root@k8s-node1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b20f19f50ff5 imagetest:2.0 "/bin/bash" 48 seconds ago Exited (0) 32 seconds ago imageTest3
b529b3b77525 imagetest:1.0 "/bin/bash" About a minute ago Exited (0) About a minute ago imageTest2
44132ea15e38 ubuntu:14.04 "/bin/bash" 4 minutes ago Exited (0) 3 minutes ago imageTest1
이미지를 삭제하려면 우선 해당 이미지를 사용하고 있는 컨테이너 부터 제거해야한다.
docker ps -a 를 이용해 어떤 컨테이너가 떠있는지 확인하고,
root@k8s-node1:~# docker stop imageTest1 imageTest2 imageTest3
imageTest1
imageTest2
imageTest3
root@k8s-node1:~# docker rm imageTest1 imageTest2 imageTest3
imageTest1
imageTest2
imageTest3
root@k8s-node1:~# docker rmi imagetest:1.0 imagetest:2.0
Untagged: imagetest:1.0
Untagged: imagetest:2.0
Deleted: sha256:9766443e2725b4110cfa66461058ed4c2ce7f3127af7594a31e939c7f1c5ae45
Deleted: sha256:ed4efbd102e175329a6252134afcdfad4f41dbb955d2c4b47ead1f1789677ccf
Deleted: sha256:ee217ea652adb9a9197bbbb41431a6fdaf995b03039151bf2968513eafb40da6
Deleted: sha256:77b1e1352ed6d0070a8fe1cd94a575c8fa22f40aa4d71e11a9e138e309b243e8
컨테이너 정지 후
docker rmi [이미지이름] 으로 이미지들을 삭제한다.
3. 이미지 커밋
도커도 깃허브처럼 이미지들을 관리하는 저장소가 있다.
가입 후 아이디 비밀번호를 알아두자..
이후 Repositories 에 들어가면 아래와 같은 화면이 뜨는데 이곳이 저장소이다.
나는 테스트한다고 하나 만들어둠
(없어야 정상)
host 로 돌아와 로그인
root@k8s-node1:~# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you do not have a Docker ID, head over to https://hub.docker.com to create one.
Username: violetune
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
docker login 이후 아이디 패스워드 입력
root@k8s-node1:~# docker run -i -t --name dockerhub-test ubuntu:14.04
root@df00d02f20ba:/# echo "DOCKER HUB COMMIT TEST" >> test
root@df00d02f20ba:/# cat test
DOCKER HUB COMMIT TEST
root@df00d02f20ba:/# exit
exit
도커 허브에 커밋해볼 테스트 이미지 생성
root@k8s-node1:~# docker commit dockerhub-test dockerhub-test-image
sha256:4343e7f112580bfac07d3857c21d9a92f513f44159db4a593d3bc98f58a13c48
root@k8s-node1:~# docker tag dockerhub-test-image:latest violetune/dockerhub-test-image:latest
root@k8s-node1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerhub-test-image latest 4343e7f11258 24 minutes ago 197MB
violetune/dockerhub-test-image latest 4343e7f11258 24 minutes ago 197MB
docker commit 으로 이미지 생성 후에
docker tag [현재이미지] [태그추가이미지]
명령으로 태그를 추가하였다 (이름변경)
docker images 로 이미지 두개 다 확인할 수 있다.
root@k8s-node1:~# docker push violetune/dockerhub-test-image
Using default tag: latest
The push refers to repository [docker.io/violetune/dockerhub-test-image]
d34768d2a3aa: Pushed
83109fa660b2: Pushed
30d3c4334a23: Pushed
f2fa9f4cf8fd: Pushed
latest: digest: sha256:b0527d7ecab51ab437421a89c8d7559ae85a0f2f09fe1c143e0b4d3cb626cc91 size: 1152
이후 docker push [이미지이름]
으로 docker hub 에 이미지를 푸쉬하였다 (태그 입력하지 않으면 자동으로 latest)
새롭게 dockerhub-test-image 추가된거 확인
그 외에 사설 레지스트리를 만들어 저장하는 방법도 있다. (회사 내에서 사용 많이 함)
'IT 공부 > PaaS' 카테고리의 다른 글
[Docker] Dockerfile 도커파일 옵션 2 (0) | 2022.10.27 |
---|---|
[Docker] DockerFile 도커파일 1 (0) | 2022.10.26 |
[Docker] Log 확인 및 컨테이너 자원 할당 (0) | 2022.10.25 |
[Docker] 도커 네트워크 기본 (1) | 2022.10.25 |
[Docker] 명령어 및 기초 1 (0) | 2022.10.20 |