使用镜像仓库托管自己构建的Docker镜像
自己构建的Docker镜像,默认存储在本机中,Docker有提供某些方式分享这些镜像,但不是主流的镜像分享方式,也有违于开源社区的共享精神。
本文介绍如何使用GitHub托管Dockerfile;使用DockerHub关联GitHub托管的Dockerfile,进行自动化构建,并托管构建后的镜像。
GitHub地址:https://github.com。
DockerHub地址:https://hub.docker.com。
Dockerfile及镜像构建的相关知识可参考我之前写的几篇博文:
准备工作
注册GitHub和DockerHub。GitHub主要是用于托管源代码(即托管Dockerfile文件);DockerHub主要用于构建和托管镜像。
两个平台都是免费的,但是因为服务器在国外,访问不是很稳定,原因大家都懂。
使用GitHub托管Dockerfile
参考本人的一个Tomcat Dockerfile仓库:https://github.com/dfengwei/docker-tomcat
主要步骤:
- 新建一个仓库(
New repository),例如命名为:docker-tomcat。 - 通过git提交(或直接通过界面编辑)源码,目录结构可以参考我的仓库,也可参考一些官方仓库。
- 编写
README.md文件(强烈建议)。
GitHub是个很常用的平台,具体操作这里就不细讲了,网上资料也很多。
使用DockerHub构建并托管镜像
参考本人的一个Tomcat镜像仓库:https://hub.docker.com/r/dfengwei/docker-tomcat
主要步骤
- 新建一个自动构建(
Create Automated Build),关联并验证GitHub账户。再选择GitHub账户中的一个仓库,也就是刚才创建的docker-tomcat仓库。 - 打开
Build Settings选项卡,进行构建细节的配置。构建配置因为比较复杂和重要,我们下面再细讲,这里不展开。配置好后DockerHub会自动根据配置构建镜像并托管。当然你也可以手动触发构建。 - 打开
Repo Info选项卡,编写Short Description和Full Description。Short Description是个简介,Full Description是详细介绍,建议复制GitHub中的README.md内容。 - 通过
Repo Info选项卡中的Docker Pull Command中显示的命令即可获取本镜像(该命令没指明版本号,请按需添加)。
DockerHub构建配置
主要配置界面

配置自动构建
勾选 When active, builds will happen automatically on pushes. 复选框。当GitHub中对应的文件变动后,会自动推送给DockerHub,DockerHub会自动重新构建镜像。
添加Trigger
先解释下各列的含义(可以点击界面上的 Show more 按钮查看英文版的简单说明):
| 字段 | 说明 |
|---|---|
| Type | 指GitHub中的Dockerfile的版本,可以是Branch或Tag。Branch和Tag是git中的概念,不明白的请自行百度。 |
| Name | 如果Type选的是Branch,请固定使用 master 作为值;如果Type选的是Tag,请使用一个正则表达式做为值,用于匹配tag。 |
| Dockerfile Location | Dockerfile路径,这个估计大家都理解。/ 对应的是GitHub中仓库的根路径。例如我的Tomcat8.5 Dockerfile路径为:/8.5/jre8/Dockerfile |
| Docker Tag Name | 镜像版本标签。标签的命名虽然没有标准,但也请遵循一定的规律。最好是先参考官方的一些镜像标签。 |
DockerHub提供的这种配置和构建方式十分灵活,多个标签其实可以使用同一个Dockerfile文件。构建历史可以通过 Build Details 选项卡查看。
添加Repository Links
该功能的主要作用是监控其他镜像仓库的变动,触发本仓库的自动构建。建议添加父镜像所在的仓库。此后,父镜像所在的仓库的变动都将触发本仓库的自动构建。例如父镜像紧急修复了一个BUG并重新构建了镜像,那么我们的镜像也会跟着重新构建。当然,如果我们镜像已经被某个用户在使用了,那么除非该用户update这个镜像,否则该镜像不会自动更新至最新版本。
Build Triggers
DockerHub提供Http接口供有需要的用户触发构建。例如你有个自动化脚本想要触发仓库的自动化构建,就可以通过本功能实现。
使用其他仓库托管镜像
除了DockerHub外,还有很多平台提供镜像托管服务,比如我使用的阿里云容器Hub:https://dev.aliyun.com。
参考本人在阿里云开发者平台上托管的一个Tomcat镜像仓库:https://dev.aliyun.com/detail.html?spm=5176.1972343.2.2.599c57159oCWBq&repoId=50185。
获取这个平台的镜像时,必须带上平台域名,例如:
$ docker pull registry.cn-hangzhou.aliyuncs.com/dfengwei/docker-tomcat
第三方平台的镜像仓库的配置方式大多都和DockerHub类似,源码托管(Dockerfile托管)的方式也有多种。为了不重复劳动,我在阿里云容器Hub上关联的是上面配置的GitHub仓库。也就是说,我用同一份Dockerfile会生成两份镜像,一份在DockerHub上,一份在阿里云容器Hub上,两份镜像的内容其实是一样的,不过pull的方式略有不同。
当然,Dockerfile源码托管的方式除了GitHub外,也有很多选择余地,这里不再展开。
使用镜像仓库托管自己构建的Docker镜像的更多相关文章
- 构建自定义docker镜像,上传至docker hub
docker 优势 (外部参考) Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后 发布到任何流行的Linux机器上,便可以实现虚拟化.Docker改变了虚拟化的方 式,使 ...
- 使用阿里云镜像仓库构建国外 Docker 镜像
使用阿里云镜像仓库下载国外镜像 在日常使用 Docker 或 K8S 的过程中,经常会需要到国外的网站中下载镜像,但是有些网站在国内是无法访问的.对于这个问题可以使用阿里云提供的镜像仓库进行下载,然后 ...
- springboot程序构建一个docker镜像(十一)
准备工作 环境: linux环境或mac,不要用windows jdk 8 maven 3.0 docker 对docker一无所知的看docker教程. 创建一个springboot工程 引入web ...
- Spring Boot教程(十一) springboot程序构建一个docker镜像
准备工作 环境: linux环境或mac,不要用windows jdk 8 maven 3.0 docker 对docker一无所知的看docker教程. 创建一个springboot工程 引入web ...
- DOCKER - 构建一个docker镜像并跑起来
一.有个基础镜像 1.基础镜像的选择 当前市场有众多可选择的基础docker镜像,可参考: https://blog.csdn.net/nklinsirui/article/details/80967 ...
- 从头基于空镜像scratch创建一个新的Docker镜像
我们在使用Dockerfile构建docker镜像时,一种方式是使用官方预先配置好的容器镜像.优点是我们不用从头开始构建,节省了很多工作量,但付出的代价是需要下载很大的镜像包. 比如我机器上docke ...
- 基于空镜像scratch创建一个新的Docker镜像
我们在使用Dockerfile构建docker镜像时,一种方式是使用官方预先配置好的容器镜像.优点是我们不用从头开始构建,节省了很多工作量,但付出的代价是需要下载很大的镜像包. 比如我机器上docke ...
- 微服务架构 - 搭建docker本地镜像仓库并提供权限校验及UI界面
搭建docker本地镜像仓库并提供权限校验及UI界面 docker本地镜像仓库的作用跟maven私服差不多,特别是公司级或者是小组级开发好的docker仓库可以上传到本地镜像仓库中,需要用时,直接从本 ...
- 019.nexus搭建docker镜像仓库/maven仓库
一.安装docker CE 参考docker doc https://docs.docker.com/install/linux/docker-ce/centos/ 二.docker启动nexus3 ...
随机推荐
- WCF(远程服务器返回错误: 400 错误的请求)
类似相关问题有以下: WCF- restful接口 POST方式调用报错(远程服务器返回错误: 400 错误的请求) WCF Rest:不使用UriTemplate使用post方式传参解决HTTP40 ...
- MySQL定时逻辑备份
当项目数据量不大时,备份可以采用逻辑备份. 数据库可以搭建一主一从,从库每天凌晨三点全量逻辑备份. 然后同时记录二进制文件,用来进行基于时间点的数据恢复. 其他备份方案详见我的思维导图:MySQL备份 ...
- 用border或者div制作三角形等图形
一般情况下, 我们设置盒子的宽高度, 及上下左右边框, 具体代码如下: 通过上述代码,div的具体样式如下: 现在在上面基础上, 我们把div的宽高度都设为0时, 现在我们再次查看效果,如下图: 这时 ...
- WPF 简易的跑马灯效果
最近项目上要用到跑马灯的效果,和网上不太相同的是,网上大部分都是连续的,而我们要求的是不连续的. 也就是是,界面上就展示4项(展示项数可变),如果有7项要展示的话,则不断的在4个空格里左跳,当然,衔接 ...
- 开发Activity步骤
第一步:写一个累继承Activity第二步:重写onCreate方法第三步:在主配置文件中注册activity <activity android:name=".类名" an ...
- Qt自定义标签按钮
当你接触到Qt时,你会为它极为方便的跨平台方面感到吃惊,从而想尝试着使用Qt.渐渐地你会发现Qt自带的一些控件不能满足自己的需要,此时就需要我们自己定义一个属于自己的控件.总所周知,标签的风格设置类比 ...
- Eclipse中SVN设置文件为ignore后重新添加至版本控制
先前把需要版本控制的文件夹ignore了,用了很长时间找解决方法,结果发现竟如此简单,对eclipse的功能不熟悉啊. 方法如下: 在Window->Show View -> Naviga ...
- Spring学习(7)--- @Required注解
@Required注解是用于bean属性的setter方法 这个注解仅仅表示,受影响的bean属性必须在配置时被填充,通过在bean定义胡通过自动装配一个明确的属性值 package com.mypa ...
- 基于C#的Appium自动化测试框架(Ⅰ)
因为工作原因,使用的编程语言都是C#,但是国内相应的Appium资料少得可怜,Java版本的Appium也考虑过,但是奈何自己搞不定Eclipse这个编译环境[说白了就是因为懒-- 无意中看到了外面的 ...
- Unity3D常用 API 之实例化与销毁
1.实例化游戏物体 1.1.游戏中的案例介绍 在很多 MMORPG 类的游戏中都有类似于“金钱副本”的副本关卡.在这类副 本中通常都是限定一个时间,在这个时间内玩家可以尽情的破坏,然后收集金钱. 分析 ...