본문 바로가기
반응형

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. 이미지 커밋

 

도커도 깃허브처럼 이미지들을 관리하는 저장소가 있다.

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your team's container applications.

hub.docker.com

가입 후 아이디 비밀번호를 알아두자..

 

이후 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 추가된거 확인

 

그 외에 사설 레지스트리를 만들어 저장하는 방법도 있다. (회사 내에서 사용 많이 함)

728x90
반응형

한걸음 한걸음

개인적인 기록