一、简要
之前的文章已经讲过镜像的下载、运行,和容器的基本操作,接下来这篇文章是讲容器的提交和上传镜像。
打个比方:如果你想要你的容器进行备份或者分享给其他用户使用(服务器、其他用户等),那就得将当前容器复制一份然后发给其他用户;又或者说,你当前容器在本机部署了应用系统运行,然后测试没问题了,想将该容器的发布到服务器里运行,可以节省服务器和本机环境配置不相同的时间,那么这个过程在Docker里如何体现的呢?下面有4个步骤:
1.我们可以在本机将运行后的容器提交(commit)到本地镜像仓库;
2.然后将本地镜像上传(push)到DockerHub;
3.服务器/其他用户机器,在DockerHub上下载镜像(pull);
4.服务器/其他用户机器,将下载后的镜像运行;
一、注册&登录DockerHub用户
1.注册
点击上面官网地址,自行注册。
2.登录
在操作系统输入命令:docker login
[root@hejl nginx]# 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: hejianliang 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 You have new mail in /var/spool/mail/root
按照步骤输入用户名和密码。
二、创建DockerHub镜像地址
在官网登录DockerHub后,来到个人首页:
点击"Create Repository"
输入相应信息,点击"Create"即可。
以下是我已经创建好的镜像仓库:
Tags and Scans:表示仓库的标签/版本;
Docker commands:表示仓库的上传(push)命令;
三、实操-容器提交&上传镜像
列出本地镜像列表(如果没有镜像,自行pull镜像):
[root@hejl nginx]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hejianliang/centos java_nginx 7d33387c23ca 17 hours ago 765MB hejianliang/centos <none> f7dbccc37e60 9 days ago 686MB hejianliang/centos v1 4173d0975bbe 2 weeks ago 774MB centos latest 0d120b6ccaa8 3 months ago 215MB
列出本地容器列表(如没有容器,自行run镜像):
[root@hejl nginx]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 26dc75058b6e hejianliang/centos:java_nginx "/sbin/init" 17 hours ago Exited (137) 4 minutes ago centos_java_nginx a8bde2ae13aa hejianliang/centos:v1 "/bin/bash" 6 days ago Exited (0) 6 days ago 172.18.0.3
接下来我要将容器 id为 "26dc75058b6e" 的容器,提交到镜像仓库,提交语法:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] OPTIONS说明: -a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; -p :在commit时,将容器暂停。
提交命令:
[root@hejl nginx]# docker commit -a "hejianliang" -m "整合Nginx、Tomcat、Keepalived服务" -p 26dc75058b6e hejianliang/centos:java_nginx_v2 sha256:9549e4d937c82ab46193b3faabd3bf3f4cb6a46acd54f52199b8d2c0edc66842
提交成功,docker images 查看本地镜像仓库:
[root@hejl nginx]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hejianliang/centos java_nginx_v2 9549e4d937c8 About a minute ago 801MB hejianliang/centos java_nginx 7d33387c23ca 18 hours ago 765MB hejianliang/centos <none> f7dbccc37e60 9 days ago 686MB hejianliang/centos v1 4173d0975bbe 2 weeks ago 774MB centos latest 0d120b6ccaa8 3 months ago 215MB
镜像"hejianliang/centos:java_nginx_v2" 已提交成功了,容量大小是801MB,现在我们进行第二步上传镜像,上传语法:
docker push [OPTIONS] NAME[:TAG]
OPTIONS说明: --disable-content-trust :忽略镜像的校验,默认开启
上传镜像命令:
[root@hejl nginx]# docker push hejianliang/centos:java_nginx_v2 The push refers to repository [docker.io/hejianliang/centos] 3434a2f802c2: Pushed 076ecd3c326f: Layer already exists 291f6e44771a: Layer already exists java_nginx_v2: digest: sha256:2f846fabd91e5b78023ead48b7bd3642ba2cdad8446d97f88ce02b0d3908b51d size: 954
上传镜像成功。
四、实操-镜像下载
刚才已经把镜像上传到官网上了,现在我们可以切换到另外一台机器/本机(注:机器上需安装Docker并启动),将上传的镜像下载到机器上。
我们可以从docker上查询刚才上传的镜像,命令:docker search hejianliang
[root@localhost ~]# docker search hejianliang NAME DESCRIPTION STARS OFFICIAL AUTOMATED hejianliang/centos centos仓库 1 hejianliang/ubuntu 0
仓库地址已搜索出来,接下来下载镜像:
[root@localhost ~]# docker pull hejianliang/centos:java_nginx_v2 java_nginx_v2: Pulling from hejianliang/centos 3c72a8ed6814: Pull complete 0f414fdba906: Pull complete a8a9d4720f65: Pull complete Digest: sha256:2f846fabd91e5b78023ead48b7bd3642ba2cdad8446d97f88ce02b0d3908b51d Status: Downloaded newer image for hejianliang/centos:java_nginx_v2 docker.io/hejianliang/centos:java_nginx_v2 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hejianliang/centos java_nginx_v2 9549e4d937c8 About an hour ago 801MB test/ubuntu v1 ed488aac8ae1 3 weeks ago 72.9MB <none> <none> 9076a9ac1911 3 weeks ago 0B <none> <none> 5a5fa4f0a2f9 3 weeks ago 0B <none> <none> 03be7b389780 3 weeks ago 0B <none> <none> b74f768c6588 3 weeks ago 72.9MB rethinkdb latest fc02d4327225 4 weeks ago 131MB hejianliang/ubuntu 15.10 9140108b62dc 6 weeks ago 72.9MB ubuntu latest 9140108b62dc 6 weeks ago 72.9MB hello-world latest bf756fb1ae65 10 months ago 13.3kB ubuntu 15.10 9b9cb95443b5 4 years ago 137MB training/webapp latest 6fae60ef3446 5 years ago 349MB
镜像下载后,我们通过查看镜像命令,我们的 "hejianliang/centos" 镜像也在本地仓库里了。
下载过后的镜像,和平时一样运行,这里就不一一操作了,可以回顾作者之前的文章。
五、总结
个人认为Docker这种容器管理方式很便捷,就类似GitHub、MavenRepository等,使用起来很易上手,就是要记的命令多些;以往我没使用Docker之前,是用虚拟机进行系统部署测试,没问题再将系统部署上云服务器。但体验过两种方式过后(Docker和虚拟机),感觉Docker的效率更高,而且操作系统的环境也不用担心不一致的问题,还有虚拟机占用的空间及内存比较多,处理效率也没Docker高。这就是我使用这两种虚拟容器的感受。