Docker实践:Docker Hub(镜像分发自动化构建)

Posted 孤天浪雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker实践:Docker Hub(镜像分发自动化构建)相关的知识,希望对你有一定的参考价值。

一、Docker Hub简介

Docker Hub的网址是https://hub.docker.com,提供的是镜像托管服务,它与GitHub类似,利用Docker Hub,我们可以搜索、创建、分享和管理镜像,还可以利用其提供的自动化构建技术直接在集群云服务器上构建镜像。

Docker Hub为用户提供不限数目的公开镜像托管服务,但仅提供一个私有镜像托管服务。

Docker Hub上的镜像分为两类。一类是官方镜像,比如ubuntu、redis等,此类镜像一般由权威的第三方进行开发维护,最后还需要Docker官方认证通过。另一类为普通用户镜像。

二、镜像的分发(Docker Hub、阿里云)

1、Docker Hub分发

这里默认你已经有了DockerHub账号,没有的话,就自行创建一个。

注册成功之后,在命令行客户端登录我们刚才注册的账号;并且登录信息都保存在~/.docker/config.json中(有的是~/.dockercfg),我这里DockerHub和阿里云的登录信息。

使用push命令上传镜像。如果不指定镜像TAG,指定的仓库在本地的所有镜像都会上传到Docker Hub。push之前,我的docker hub test仓库下只有TAG=V1的镜像。

  • docker push gutianlangyu/test:build_dockerfile_test_github:将我们创建的本地build_dockerfile_test_github镜像推送到docker hub。

  • 成功后,刷新Docker Hub的test仓库,会发现仓库下已经多了TAG=build_dockerfile_test_github的镜像。

2、阿里云分发

首先登陆阿里云镜像仓库,使用docker tag重命名镜像,并将它通过私网ip推送至registry,我这里只贴出我本地操作的流程,阿里云在镜像仓库-管理中给出了操作指南(下面会列出)。

操作指南(阿里云)

登录阿里云docker registry:

$ sudo docker login --username=gubaijing2004@163.com registry.cn-hangzhou.aliyuncs.com

登录registry的用户名是您的阿里云账号全名,密码是您开通namespace时设置的密码。 你可以在镜像管理首页点击右上角按钮修改docker login密码。

从registry中拉取镜像:

$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/gutianlangyu/test:[镜像版本号]

将镜像推送到registry:

  $ sudo docker login --username=gubaijing2004@163.com registry.cn-hangzhou.aliyuncs.com
  $ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/gutianlangyu/test:[镜像版本号]
  $ sudo docker push registry.cn-hangzhou.aliyuncs.com/gutianlangyu/test:[镜像版本号]

其中[ImageId],[镜像版本号]请你根据自己的镜像信息进行填写。

sample:使用docker tag重命名镜像,并将它通过私网ip推送至registry:

$ sudo docker images
  REPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
  registry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB

$ sudo docker tag 37bb9c63c8b2 registry.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

通过docker images 找到您的imageId 并对于改imageId重命名镜像domain到registry内网地址。

$ sudo docker push registry.cn-hangzhou.aliyuncs.com/acs/agent

从内网push镜像,速度将大大提升,并且将不会损耗您的公网流量。注意,如果您申请的机器是在vpc网络的,请使用registry-cn-hangzhou-vpc.aliyuncs.com的域名前缀进行推送。

三、自动化构建

除了在本地创建镜像然后使用push命令将其推送到Docker Hub之外,我们还可以使用Docker Hub提供的自动化构建技术在服务端直接构建镜像。通过在Docker Hub连接一个包含Dockerfile文件的Git Hub或Bit Bucket的仓库, Docker Hub的构建集群服务器就会自动构建镜像。通过这种方式构建出来的镜像会被标记为Automated Build,也可以称为受信构建(Trusted Build)。

使用自动化构建有以下几个有点:

  • 用户可以确保他拉取的镜像是使用特定方式构建出来的。

  • 访问你的Docker Hub的用户能够自由查阅Dockerfile文件。

  • 因为构建的过程是自动的,所以能确保仓库里的镜像都是最新的。

下面我们使用GitHub来自动构建镜像:

前提

登录DockerHub,选择右上角的Create,下拉框中选择Create Automated Build

选择用来构建的源,这里我们选择GitHub:

如果首次操作,会需要GitHub登录、授权,我这边之前操作过了,就会直接显示我的GitHub项目列表:

点击选择我们的docker项目,这时会让填一些命名空间、仓库,选择私有还是公开、描述等信息,最后点击Create即可创建成功。

这时,在控制面板(Dashboard)中就能看到一个标有automated build的仓库docker

点击进入gutianlangyu/docker

只要你的Git Hub上的Dockerfile文件有了最新更新,这边就会自动构建最新镜像。

  • Repo Info:一些仓库的基本信息。

  • Tags:此仓库构建出的镜像TAGS列表。

  • Dockerfile:对应Git Hub上的Dockerfile文件的内容。

  • Build Details:显示构建进度信息。

  • Build Settings:一些自动构建的配置选项:

    • Build Setting:对所自动构建的分支、tags等进行触发配置。

    • Repository Links:可以配置进行关联触发自动构建,一般用在本镜像会被作为其它镜像的根镜像。

    • Build Triggers:开启后,可以通过URL手动请求构建。


  • Collaborators:可以添加用户参与镜像的维护。

  • Webhooks:可以指定自动构建的回调地址,从而与本系统关联。

-Settings:对此仓库的一些基本操作:设为公开、私有、删除。

以上是关于Docker实践:Docker Hub(镜像分发自动化构建)的主要内容,如果未能解决你的问题,请参考以下文章

Openstack-实践1.如何从Docker Hub 批量获取某个Open Stack 版本镜像?

基于docker registry镜像安装私服docker hub

Docker 推送镜像到hub.docker

docker 生成镜像 上传到docker hub

docker学习10-注册docker hub账号

docker学习笔记7:发布镜像到docker hub上