基于Docker的持续交付系列( 二):阿里云code帮你实现持续交付第一步

简介: 本文是基于Docker的持续交付系列的第二篇文章,已经还存在很多问题,但已经走出了持续交付的第一步!希望可以得到大家更多的反馈,让基于Docker的持续交付更好更快的呈现在大家面前。

前言

        在上一篇博文:基于docker的持续交付系列(一):如何将app与docker整合并部署中,我们对app与Docker的整合、部署进行了简单介绍, 但在实践中你会发现,每当你修改代码之后,都要手动push代码,build image,push image以及重新部署,整个流程走下来繁琐且耗时较长,给我们提倡的持续交付徒增了许多烦恼。在容器hub和阿里云code两个平台的合力之下,改进的第一步已经实现,让我们细细来看。


用到的工具

        同样,我们还是使用到了下述几个平台:


操作步骤

创建关联了阿里云code的镜像仓库

  • 我们可以看到,目前容器hub已经支持关联阿里云code的代码仓库,相比于github和bitbucket,阿里云code提供了如丝般顺滑的速度(从拉取用户信息和代码库列表就能知道)。
  • 新的镜像仓库可以按如下配置进行创建,需要注意的是勾选“代码变更时自动构建镜像”和“海外机器构建”两个选项(勾选后者是为了保证镜像的构建速度)
    _2016_04_10_5_35_55

push代码

        现在我们对代码进行修改,为了直观的表现出来,我们将代码库中java-with-docker/src/main/webapp下的index.html进行修改,将原来的“step1”更换为“步骤1”,重新进行编译:

$ mvn clean package -D maven.test.skip=ture


编译完毕后,将新的产出物一并提交到[代码仓库](https://code.aliyun.com/zju_lb/java-with-docker)。

####镜像重新编译####
可以看到,push代码触发了镜像的自动编译:
![_2016_04_10_7_21_17](https://oss.aliyuncs.com/yqfiles/b9a91a07fd4285f0ef64db0642beb94e911d74ad.png)

####更新容器服务中的应用####
        我们可以通过容器服务提供的“重新部署”按钮或者“触发器链接”来实现应用的重新部署,在此过程中,应用中的服务将更新最新的docker镜像。部署完成后,我们访问url就可以看到修改过后的页面了:
![123](https://oss.aliyuncs.com/yqfiles/c79a16ec1ffdbedc73846bfcda877d31e794547c.png)
        当然,容器hub现在也支持webhook的配置,也就是可以配置新镜像编译完之后的回调地址,我们在此处填入“触发器链接”的url,就可以实现流程的自动化:
![_2016_04_10_10_57_41](https://oss.aliyuncs.com/yqfiles/b81a864065b7afd3832b73153ae9ca2cd197050e.png)


--------
###总结###
        现在我们已经可以做到在push代码之后,直接触发镜像的构建。但是,依旧存在以下几个不尽如人意的地方:
- 我们需要本地进行app的编译,并将其上传代码库才能将其与Docker进行整合;
- 提交代码直接进行了镜像编译,但我们还不知道我们提交的代码是否正确,也就是还没有进行测试的考验,比如上述将“step1”改为“步骤1”的修改显然与页面整体风格不符,是一次错误的修改,不应该被发布;
- 容器服务中应用的自动部署,目前还仅仅只能实现镜像的更新,对于编排模板中的参数配置,只能通过页面编辑或调用open API的方式来实现,以及目前一个“触发器链接”只能用来更新一个应用,如果要批量更新还需要较为繁琐的流程。

对于第一点,可能有人会说,我们可以把app编译的过程也加入Dockerfile,这样在镜像编译的过程中就可以同时完成app的编译。问题是,这样做会将app的编译环境和生产环境混淆,在本文的例子中,tomcat所依赖的是java:7-jre,但如果我们想在容器中执行
> ```bash
$ mvn clean package -D maven.test.skip=ture

则必须安装java的jdk,这样显然是不合时宜的“曲线救国”方式。


展望

        阿里云持续交付平台 团队与容器服务团队正在合力解决上述问题,比如支持用户自定义编译/测试环境,支持功能更丰富的图形化发布功能等等,相信不久的将来,基于Docker的持续交付将以更加优雅的方式展现在用户面前。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
4月前
|
jenkins 持续交付 数据安全/隐私保护
Docker 打包镜像 | 发布至阿里云镜像仓库
Docker 打包镜像 | 发布至阿里云镜像仓库
431 1
|
6月前
|
应用服务中间件 Linux nginx
一文学会配置Docker 镜像加速器(阿里云)
一文学会配置Docker 镜像加速器(阿里云)
1127 0
|
2月前
|
Docker 容器
在docker中安装zookeeper,并且阿里云服务器配置
在docker中安装zookeeper,并且阿里云服务器配置
201 1
|
2月前
|
NoSQL Redis Docker
在docker中安装redis,并且阿里云服务器配置
在docker中安装redis,并且阿里云服务器配置
181 1
|
6月前
|
Java Linux Docker
阿里云云效流水线自动化构建Java项目并发布到docker环境
阿里云云效流水线自动化构建Java项目并发布到docker环境
338 0
|
1月前
|
弹性计算 关系型数据库 MySQL
阿里云ECS使用docker搭建mysql服务
阿里云ECS使用docker搭建mysql服务
152 1
|
4月前
|
Docker 容器
Docker服务启动失败报错:Job for docker.service failed because the control process exited with error code.
Docker服务启动失败报错:Job for docker.service failed because the control process exited with error code.
|
1月前
|
存储 弹性计算 Linux
阿里云ECS(CentOS镜像)安装docker
阿里云ECS(CentOS镜像)安装docker
374 0
|
2月前
|
Docker 容器
在docker中安装dubbo-admin,并且阿里云服务器配置
在docker中安装dubbo-admin,并且阿里云服务器配置
133 1
|
3月前
|
Java Maven Docker
SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境
SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境
107 0