Register
本章节内容虽然包含一些命令,但是只是帮助大家理解,不必掌握每条命令的使用细节,请大家不要惊慌。
问题
我们先来看一条命令:
docker pull mysql
稍微了解Docker
的同学都应该知道,这条命令就是让Docker
将远程的Mysql
镜像拉到本地来,当然也可以理解成下载镜像。
那么所谓的远程在哪呢?docker
是从哪把Mysql
镜像下载下来的呢?
这里我们不得不提Docker Hub
,也就是Docker
的官方仓库,不出意外,Docker
就是默认从这里把Mysql
镜像下载下来的。
Docker Hub
里有成千上万个镜像供我们下载使用,几乎包含了你所有能想到的环境,甚至包含商用的Oracle
,当然肯定不会包含Windows
。
那么这么丰富多彩的Docker Hub
应用在我们项目部署中有没有什么问题呢?当然,如果没有,说这么多干嘛。
首先,我们很多的部署环境都没有外网,这直接导致了我们根本无法使用docker hub
,执行我们开头的那条命令会直接报错。
其次,我们自己发布的镜像,大多都包含自己的代码,而Docker Hub
免费的情况下,只能创建几个私有的镜像(全民开源的精神),这就可能导致我们的代码泄露,这个对于软件企业是难以接受的。
所以,Docker Register
站了出来,简单的说,Docker Register
就是私有的Docker Hub
,当然免费的东西,功能和体验上肯定没有Docker Hub
强大啦。
关于Docker Register
的安装,在后续的章节会详细的介绍,这里不再说明,当我们安装配置好Docker Register
以后,就可以将镜像推送到我们的私有库了。命令如下:
docker push 127.0.0.1:5000/luckyu:1.0.0
127.0.0.1:5000
就是我们安装的Docker Register
私有云地址。
当然,我们也可以从部署服务器从私有云把镜像拉下来:
docker pull 127.0.0.1:5000/luckyu:1.0.0
我们可以将任意的镜像推送到私有云,当然也包括从docker下载下来的镜像,比如之前提到的Mysql
,这样我们就能在内网随意拉取我们想要的镜像了。命令如下:
先从docker hub拉镜像:
docker pull mysql
重新给这个镜像打上我们私有云的标签:
docker tag mysql 127.0.0.1:5000/mysql
推送到私有云:
docker push 127.0.0.1:5000/mysql
这样就把mysql推送到我们自己的私有云了。
大家肯定会有个疑问,不是说内网吗?那怎么从Docker拉下来镜像呢,第一句不就报错了吗?
当然,如果是纯内网环境,这样做肯定是不行的,那就需要我们按下面的流程来。
在有外网的机器上拉取镜像:
docker pull mysql
将镜像存成压缩包:
docker save > mysql.tar
用u盘等介质将mysql.tar拷到没有外网的服务器上,然后载入镜像:
docker load < mysql.tar
重新给这个镜像打上我们私有云的标签:
docker tag mysql 127.0.0.1:5000/mysql
推送到私有云:
docker push 127.0.0.1:5000/mysql
这样我们就在内网环境中可以使用Mysql
镜像了。
不论是我们的代码发布也好,还是后续章节提到的离线部署环境安装,都是基于这个原理。大家理解就好,不需要大家掌握具体操作细节,因为大多数能用到的镜像,都已经为大家准备好了。
Api
假如我们的私有云地址是masshi.com:5000
我们可以通过下面的接口查看我们私有云下有哪些镜像:
http://masshi.com:5000/v2/_catalog
以及每个镜像的版本列表:
http://masshi.com:5000/v2/luck-doc-server/tags/list
注意事项
如果我们的Docker Register
没有启用TLS
安全连接,那么就需要我们把私有云加入到所有Docker的信任站点中,具体参考集群环境安装