容器與鏡像可以隨時的轉換,如圖所示
除了dockerfile外,其他的我們一一來做,首先是我們需要一個dockerhub的賬號
從dockerhub上pull鏡像
[root@node7 ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
000eee12ec04: Pull complete
eb22865337de: Pull complete
bee5d581ef8b: Pull complete
Digest: sha256:50cf965a6e08ec5784009d0fccb380fc479826b6e0e65684d9879170a9df8566
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
修改tag
[root@node7 ~]# docker tag busybox ouddd/busybox:v0.1
登錄
[root@node7 ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: ouddd
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
重新pull
[root@node7 ~]# docker push ouddd/busybox:v0.1
The push refers to repository [docker.io/ouddd/busybox]
eac247cb7af5: Mounted from library/busybox
v0.1: digest: sha256:24fd20af232ca4ab5efbf1aeae7510252e2b60b15e9a78947467340607cd2ea2 size: 527
run命令,並且做了一些操作。
[root@node7 ~]# docker run -it --name b1 busybox sh
/ # ls
bin dev etc home proc root sys tmp usr var
/ # mkdir -p /data/html
/ # echo "hello busybox" >> /data/html/index.html
commit,重新打開一個終端
[root@node7 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0165e61d2221 busybox "sh" 2 minutes ago Up 2 minutes b1
[root@node7 ~]# docker commit -p -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' b1 ouddd/web:v0.1
sha256:01451ccb4b4b5d17c10f23465b6c603fbcd3a97e26550eb548e828223cc20dfb
通過commit命令 我們就可以重新生成一個鏡像了,並且我們修改原來的CMD。
當我們重新run的時候,我們之前做的操作已經被保存下來了。
[root@node7 ~]# docker run -it --name b2 ouddd/web:v0.1 sh
/ # ls
bin data dev etc home proc root sys tmp usr var
/ # cat /data/html/index.html
hello busybox
類似的stop/start/restart等
[root@node7 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb8d2c61dd80 ouddd/web:v0.1 "/bin/httpd -f -h /d…" 5 seconds ago Up 4 seconds b2
[root@node7 ~]# docker stop cb8d2c61dd80
cb8d2c61dd80
[root@node7 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb8d2c61dd80 ouddd/web:v0.1 "/bin/httpd -f -h /d…" 34 seconds ago Exited (137) 9 seconds ago b2
[root@node7 ~]# docker start cb8d2c61dd80
cb8d2c61dd80
[root@node7 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb8d2c61dd80 ouddd/web:v0.1 "/bin/httpd -f -h /d…" 48 seconds ago Up 2 seconds b2
[root@node7 ~]# docker restart cb8d2c61dd80
cb8d2c61dd80
[root@node7 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb8d2c61dd80 ouddd/web:v0.1 "/bin/httpd -f -h /d…" About a minute ago Up 3 seconds b2
如果我們想把一個鏡像傳到另一臺主機上,應該怎麼辦呢,這個時候就用到了save和load了。
[root@node7 ~]# docker save ouddd/web:v0.1 -o web.tar
[root@node7 ~]# ls
web.tar
[root@node7 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@node7 ~]# docker load -i web.tar
6995626d0293: Loading layer [==================================================>] 5.12kB/5.12kB
Loaded image: ouddd/web:v0.1
[root@node7 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ouddd/web v0.1 01451ccb4b4b 9 minutes ago 1.22MB