maven 构建 docker 镜像三部曲之三:推送到远程仓库 (内网和阿里云)
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
本篇概览
在上一章《maven构建docker镜像三部曲之二:编码和构建镜像》的实战中,我们将 spring boot 的 web 工程构建成 docker 镜像并在本地启动容器成功,今天我们把 docker-maven-plugin 插件的推送功能也用上,这样编译、构建、推送都能一次性完成了;
源码和环境
本次实战的 java web 工程源码和环境都沿用上一章的,源码我已经上传到 github 上,地址是:git@github.com:zq2599/blog_demos.git ,浏览器访问地址是:https://github.com/zq2599/blog_demos , 这里面有多个工程,本次实战用到的是 mavendockerplugindemo,如下图红框所示:
把构建的镜像推送到哪里去
本次实战有以下两个地方可以存放镜像,我们每个都要试试:
内网中,自己搭建的 docker 私有仓库;
阿里云的镜像仓库;
接下来我们分别推送到上述两个仓库,先推送到内网的私有仓库吧。
如何搭建内网的私有仓库
在内网搭建和使用私有仓库的详细步骤,请看《docker 私有仓库搭建与使用实战》,就不在此赘述了;
用于编译和构建镜像的虚拟机上,记得配置**/etc/default/docker 和/lib/systemd/system/docker.service**文件,使 docker 服务可以在 http 协议下工作,否则无法推送到内网私有仓库;
pom 配置信息
用 SecureCRT 登录虚拟机,在工程的目录下新建一个 pom_3_inner_server.xml 文件,内容和 pom_1_by_param.xml 文件的一模一样,然后对 pom_3_inner_server.xml 文件做下列修改:
新增 registryUrl 节点,内容是私有仓库地址和端口,如下:
新增 pushImage 节点,内容如下:
修改 imageName 节点的内容,改为私有仓库地址和端口,再加上镜像 id 和 TAG,如下:
执行以下命令开始构建:
构建完毕后发现输出了报错信息,如下:
错误信息中有这么一句:Failed to push ......,看起来是连不上私有仓库,登录到私有仓库的机器上去看了以下,果然,docker 容器没有启动呢.....
执行命令 docker start docker-registry 将私有仓库的服务容器启动,再回到构建服务的机器上,再执行一次构建命令,这次成功了,如下:
在用于构建镜像的虚拟机和作为镜像仓库的虚拟机上,分别执行 curl -X GET http://192.168.119.148:5000/v2/_catalog,查看私有仓库的镜像信息(192.168.119.148 是私有仓库虚拟机的 IP),都能见到镜像 mavendockerplugindemo,如下图:
推送到内网私有仓库的实战已经完成,接下来我们试试推送到阿里云镜像仓库吧;
注册和登录阿里云
使用阿里云镜像仓库前,需要在阿里云网站注册一个账号,请您自行完成注册登录,此处不赘述了;
创建命名空间和镜像仓库
在阿里云首页的”产品”菜单下,找到"容器镜像服务",然后点击跳转,如下图:
新的页面中,点击"管理控制台",如下图:
在控制台页面中,按照下图操作,创建一个命名空间 bolingcavalry:
在控制台页面中,按照下图操作,选一个近的仓库,再点击"创建镜像仓库"按钮开始创建镜像仓库:
参考下图的步骤填写表单,创建一个仓库:
如下图,创建完毕后就能在列表页面看见了,注意红框所示,一定要选择和创建时一样的地区,否则在列表中看不见刚刚创建的仓库:
从列表中我们可以看见,仓库地址是 registry.cn-shenzhen.aliyuncs.com/bolingcavalry/mavendockerplugindemo,记下来后面会用到的;
修改 maven 的配置文件
回到虚拟机上,打开文件/opt/apache-maven-3.3.3/conf/settings.xml,找到**<servers>**节点,在里面添加一个 server 节点,内容如下:
请参照注释的提示,将您在阿里云上的账号密码都填写到对应位置;
pom 配置信息
在 java web 工程的目录下新建一个 pom_4_ali_server.xml 文件,内容和 pom_1_by_param.xml 文件的一模一样,然后再对 pom_4_ali_server.xml 文件做以下修改:
阿里云镜像仓库列表页面中,我们创建的镜像仓库的地址是"registry.cn-shenzhen.aliyuncs.com/bolingcavalry/mavendockerplugindemo",现在把这个字符串拆成三部分,将前面两部分作为两个属性放入 pom 文件的**<properties>节点中,属性名分别是 docker.repostory 和 docker.registry.name**,此时 properties 节点的内容如下:
新增 serverId 节点,内容是之前修改的 maven 配置文件中,server 节点的 id,如下:
新增 registryUrl 节点,内容是私有仓库地址,如下:
新增 pushImage 节点,内容如下:
修改 imageName 节点的内容,改为私有仓库地址和端口,再加上镜像 id 和 TAG,如下:
构建并推送到阿里云镜像仓库
执行以下命令开始构建:
构建完成后的输出信息如下,表示推送成功了:
在阿里云网页查看
打开阿里云镜像仓库管理页面,如下图:
点击"镜像版本",在列表中可以看到该镜像的版本,以及最后的上传时间,和我们的构建结果都是一致的,如下图:
下载并验证镜像
在虚拟机上用 docker rmi 镜像名称:镜像版本命令将所有的镜像删除干净,如果有容器还未删除,就要先删除容器再删除镜像,查看容器的命令是 docker ps -a,删除容器的命令是 docker rm 容器名;
如下图,在管理页面点击“基本信息”,可以看见登录阿里云镜像仓库和下载镜像的命令,在虚拟机上先执行登录命令,会要求输入密码,输入后登录成功:
执行下载镜像的命令,如下,将我们之前上传的镜像下载下来:
输出信息如下,表示下载成功:
执行如下命令,用下载的镜像创建一个容器:
输出信息会提示启动成功,这时候在当前电脑上打开浏览器,输入"http://192.168.119.155:8080/" ,可以看见 web 工程的 controller 的返回信息了,如下图:
结束
至此,maven 构建 docker 镜像的三部曲就全部结束了,希望对您熟悉和使用 docker-maven-plugin 插件有所帮助,另外,本文中用到的 pom_3_inner_server.xml 和 pom_4_ali_server.xml 文件,我已上传到 git 上本次实战的 web 工程中,地址是:git@github.com:zq2599/blog_demos.git ,浏览器访问地址是:https://github.com/zq2599/blog_demos , 这里面有多个工程,本次实战用到的是 mavendockerplugindemo,如下图红框所示:
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/d712aeae7c8c4325c8c0be1f9】。文章转载请联系作者。
评论