经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Docker » 查看文章
通过容器提交镜像DockerCommit及推送镜像DockerPush
来源:jb51  时间:2021/9/27 15:30:02  对本文有异议

在本地创建一个容器后,可以依据这个容器创建本地镜像,并可把这个镜像推送到Docker hub中,以便在网络上下载使用。

  1. 查看镜像
  2. [root@docker-test1 ~]# docker images
  3. REPOSITORY TAG IMAGE ID CREATED SIZE
  4. docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB
  5. 创建一个名为myubuntu的容器
  6. [root@docker-test1 ~]# docker run -ti --name myubuntu -d docker.io/ubuntu
  7. [root@docker-test1 ~]# docker ps
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. 651a8541a47d docker.io/ubuntu "/bin/bash" 37 seconds ago Up 36 seconds myubuntu
  10. docker commit :从容器创建一个新的镜像。
  11. # docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  12. -a :提交的镜像作者;
  13. -c :使用Dockerfile指令来创建镜像;
  14. -m :提交时的说明文字;
  15. -p :在commit时,将容器暂停。
  16. 根据这个myubuntu容器提交镜像
  17. [root@docker-test1 ~]# docker commit -a "wangshibo" -m "this is test" 651a8541a47d myubuntu:v1
  18. sha256:6ce4aedd12cda693d0bbb857cc443a56f9f569106e09ec61aa53563d0932ea4d
  19. 再次查看镜像,发现镜像myubuntu:v1已经提交到本地了
  20. [root@docker-test1 ~]# docker images
  21. REPOSITORY TAG IMAGE ID CREATED SIZE
  22. myubuntu v1 6ce4aedd12cd 59 seconds ago 84.1 MB
  23. docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB
  24. mybuntu:v1镜像推送到docker hub仓库中去
  25. # docker push [OPTIONS] NAME[:TAG]
  26. OPTIONS说明:
  27. --disable-content-trust :忽略镜像的校验,默认开启
  28. 首先是登录docker hub (用户名:wangshibo 密码:*******)
  29. [root@docker-test1 ~]# docker login
  30. 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.
  31. Username (wangshibo): wangshibo
  32. Password:
  33. Login Succeeded
  34. [root@docker-test1 ~]# docker push wangshibo/myubuntu:v1
  35. The push refers to a repository [docker.io/wangshibo/myubuntu]
  36. An image does not exist locally with the tag: docker.io/wangshibo/myubuntu
  37. 这里需要将ubuntu:v1镜像改名,在名称前加上自己的docker hub的Docker ID,即wangshibo
  38. [root@docker-test1 ~]# docker tag 6ce4aedd12cd wangshibo/myubuntu:v1
  39. [root@docker-test1 ~]# docker images
  40. REPOSITORY TAG IMAGE ID CREATED SIZE
  41. myubuntu v1 6ce4aedd12cd 6 minutes ago 84.1 MB
  42. wangshibo/myubuntu v1 6ce4aedd12cd 6 minutes ago 84.1 MB
  43. docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB
  44. 再次进行推送(注意:下面的v1的tag标签可以不打,默认是latest)。推送操作时间稍微会有一点长,耐心等待~
  45. [root@docker-test1 ~]# docker push wangshibo/myubuntu:v1
  46. The push refers to a repository [docker.io/wangshibo/myubuntu]
  47. b5948ba9486d: Pushed
  48. 8d7ea83e3c62: Mounted from library/ubuntu
  49. 6a061ee02432: Mounted from library/ubuntu
  50. f73b2816c52a: Mounted from library/ubuntu
  51. 6267b420796f: Mounted from library/ubuntu
  52. a30b835850bf: Mounted from library/ubuntu
  53. v1: digest: sha256:e9cd9075d262848a307c92751e1a5890d883b814a31abd118161442461a1ca2d size: 1564
  54. 最后登录自己的Docker Hub,即https://hub.docker.com/
  55. 登录后,在Repositories里面就可以看到自己在上面推送的镜像wangshibo/myubuntu:v1了,这是个对外的镜像,可以在网络上下载。
  56. 在Docker hub上可以看到这个镜像的下载命令(注意下载时跟上tag标签,如果是latest的默认tag可以不跟)
  57. 也可以直接在Docker hub上删除这个镜像(Repositories-镜像-Settings-delete)
  58. 比如在另一台服务器上下载这个镜像
  59. [root@kevin-test ~]# docker pull wangshibo/myubuntu
  60. Pulling repository wangshibo/myubuntu
  61. Repository not found
  62. 需要跟上tag标签
  63. [root@kevin-test ~]# docker pull wangshibo/myubuntu:v1
  64. v1: Pulling from wangshibo/myubuntu
  65. 68e2a091ef24: Pull complete
  66. 8f9dd35f6299: Pull complete
  67. a81a6171600b: Pull complete
  68. a211a2bc7010: Pull complete
  69. 9e71a0b4f83a: Pull complete
  70. 0cf75bb335aa: Pull complete
  71. c393a882769e: Pull complete
  72. Digest: sha256:845fa3dcc9d0de1b9c701e1009918995da35a29012015f6c297a05edc489e018
  73. Status: Downloaded newer image for wangshibo/myubuntu:v1
  74. [root@kevin-test ~]# docker images
  75. REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
  76. wangshibo/myubuntu v1 c393a882769e 12 minutes ago 84.11 MB
  77. 在本机删除这个镜像
  78. [root@docker-test1 ~]# docker images
  79. REPOSITORY TAG IMAGE ID CREATED SIZE
  80. myubuntu v1 6ce4aedd12cd 15 minutes ago 84.1 MB
  81. wangshibo/myubuntu v1 6ce4aedd12cd 15 minutes ago 84.1 MB
  82. docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB
  83. 注意上面有两个6ce4aedd12cd的镜像ID,此时直接使用这个镜像ID是删除不掉的
  84. [root@docker-test1 ~]# docker rmi 6ce4aedd12cd
  85. Error response from daemon: conflict: unable to delete 6ce4aedd12cd (must be forced) - image is referenced in multiple repositories
  86. 应该先删除docker tag改名前的镜像,使用镜像名称删除。(一般在docker tag镜像改名后,最好删除改名前的镜像)
  87. [root@docker-test1 ~]# docker rmi myubuntu:v1
  88. Untagged: myubuntu:v1
  89. Untagged: wangshibo/myubuntu@sha256:e9cd9075d262848a307c92751e1a5890d883b814a31abd118161442461a1ca2d
  90. [root@docker-test1 ~]# docker images
  91. REPOSITORY TAG IMAGE ID CREATED SIZE
  92. wangshibo/myubuntu v1 6ce4aedd12cd 15 minutes ago 84.1 MB
  93. docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB
  94. 这个时候就可以删除镜像ID删除了
  95. [root@docker-test1 ~]# docker rmi 6ce4aedd12cd
  96. Untagged: wangshibo/myubuntu:v1
  97. Deleted: sha256:6ce4aedd12cda693d0bbb857cc443a56f9f569106e09ec61aa53563d0932ea4d
  98. Deleted: sha256:0ddeb6a16badd042914c2e72b9ef0331550c1cdcc4bdc6650a90cd9f57f1501b
  99. [root@docker-test1 ~]# docker images
  100. REPOSITORY TAG IMAGE ID CREATED SIZE
  101. docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB

删除镜像失败一例分享

  1. [root@docker-test1 ~]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. [root@docker-test1 ~]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. 打算删除掉dockernginx镜像, 但是发现这个镜像就是删除不了,加了-f强制删除也不行,一直报Error: No such image的错误,
  6. 最后终于找到了办法直接删除文件!
  7. [root@docker-test1 ~]# docker images
  8. REPOSITORY TAG IMAGE ID CREATED SIZE
  9. nginx latest 62f816a209e6 7 days ago 109MB
  10. [root@docker-test1 ~]# docker rmi nginx
  11. Error: No such image: nginx
  12. [root@docker-test1 ~]# docker rmi 62f816a209e6
  13. Error: No such image: 62f816a209e6
  14. [root@docker-test1 ~]# docker rmi 62f816a209e6 -f
  15. Error: No such image: 62f816a209e6
  16. 如上,怎么都删除不掉nginx镜像!!!!!
  17. 处理办法:
  18. [root@docker-test1 ~]# systemctl stop docker
  19. [root@docker-test1 ~]# rm -rf /var/lib/docker
  20. rm: cannot remove ‘/var/lib/docker/containers': Device or resource busy
  21. 删除不了的原因是: 在建立容器的时候做了相应目录的挂载,没有卸载,所以Device or resource busy
  22. 解决办法: 查找挂载的目录并卸载
  23. [root@docker-test1 ~]# cat /proc/mounts | grep "docker"
  24. /dev/mapper/centos-root /var/lib/docker/containers xfs rw,relatime,attr2,inode64,noquota 0 0
  25. proc /run/docker/netns/default proc rw,nosuid,nodev,noexec,relatime 0 0
  26. proc /run/docker/netns/a0626c54fd03 proc rw,nosuid,nodev,noexec,relatime 0 0
  27. proc /run/docker/netns/b18072de4224 proc rw,nosuid,nodev,noexec,relatime 0 0
  28. proc /run/docker/netns/b5298f643455 proc rw,nosuid,nodev,noexec,relatime 0 0
  29. proc /run/docker/netns/9f5e97637c98 proc rw,nosuid,nodev,noexec,relatime 0 0
  30. [root@docker-test1 ~]# umount /var/lib/docker/containers
  31. [root@docker-test1 ~]# rm -rf /var/lib/docker
  32. [root@docker-test1 ~]# systemctl start docker
  33. 再次查看就没有这个镜像了
  34. [root@docker-test1 ~]# docker images
  35. REPOSITORY TAG IMAGE ID CREATED SIZE

以上就是通过容器提交镜像DockerCommit及推送镜像DockerPush的详细内容,更多关于容器提交及推送镜像的资料请关注w3xue其它相关文章!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号