Docker学习笔记(三)——容器提交&上传镜像

一、简要

  之前的文章已经讲过镜像的下载、运行,和容器的基本操作,接下来这篇文章是讲容器的提交和上传镜像。

  打个比方:如果你想要你的容器进行备份或者分享给其他用户使用(服务器、其他用户等),那就得将当前容器复制一份然后发给其他用户;又或者说,你当前容器在本机部署了应用系统运行,然后测试没问题了,想将该容器的发布到服务器里运行,可以节省服务器和本机环境配置不相同的时间,那么这个过程在Docker里如何体现的呢?下面有4个步骤:

  1.我们可以在本机将运行后的容器提交(commit)到本地镜像仓库;

  2.然后将本地镜像上传(push)到DockerHub;

  3.服务器/其他用户机器,在DockerHub上下载镜像(pull)

  4.服务器/其他用户机器,将下载后的镜像运行;

一、注册&登录DockerHub用户

 官网地址:https://hub.docker.com/

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高。这就是我使用这两种虚拟容器的感受。

原文地址:https://www.cnblogs.com/hejianliang/p/13962154.html