基于Docker的持续交付系列( 二):阿里云code帮你实现持续交付第一步
2023-09-14 08:57:29 时间
在上一篇博文:基于docker的持续交付系列(一):如何将app与docker整合并部署中,我们对app与Docker的整合、部署进行了简单介绍, 但在实践中你会发现,每当你修改代码之后,都要手动push代码,build image,push image以及重新部署,整个流程走下来繁琐且耗时较长,给我们提倡的持续交付徒增了许多烦恼。在容器hub和阿里云code两个平台的合力之下,改进的第一步已经实现,让我们细细来看。
用到的工具同样,我们还是使用到了下述几个平台:
使用的的代码托管工具为阿里云code; 使用的容器镜像服务为阿里云开发者平台; 最终的产品镜像将部署到阿里云容器服务上;
我们可以看到,目前容器hub已经支持关联阿里云code的代码仓库,相比于github和bitbucket,阿里云code提供了如丝般顺滑的速度(从拉取用户信息和代码库列表就能知道)。 新的镜像仓库可以按如下配置进行创建,需要注意的是勾选“代码变更时自动构建镜像”和“海外机器构建”两个选项(勾选后者是为了保证镜像的构建速度)
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) ####更新容器服务中的应用#### #8194; #8194; #8194; #8194; #8194; #8194; #8194; #8194;我们可以通过容器服务提供的“重新部署”按钮或者“触发器链接”来实现应用的重新部署,在此过程中,应用中的服务将更新最新的docker镜像。部署完成后,我们访问url就可以看到修改过后的页面了: ![123](https://oss.aliyuncs.com/yqfiles/c79a16ec1ffdbedc73846bfcda877d31e794547c.png) #8194; #8194; #8194; #8194; #8194; #8194; #8194; #8194;当然,容器hub现在也支持webhook的配置,也就是可以配置新镜像编译完之后的回调地址,我们在此处填入“触发器链接”的url,就可以实现流程的自动化: ![_2016_04_10_10_57_41](https://oss.aliyuncs.com/yqfiles/b81a864065b7afd3832b73153ae9ca2cd197050e.png)
###总结### #8194; #8194; #8194; #8194; #8194; #8194; #8194; #8194;现在我们已经可以做到在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的持续交付将以更加优雅的方式展现在用户面前。
在阿里云Centos7.6上利用docker搭建Jenkins来自动化部署Django项目 一般情况下,将一个项目部署到生产环境的流程如下: 需求分析—原型设计—开发代码—内网部署-提交测试—确认上线—备份数据—外网更新-最终测试,如果发现外网部署的代码有异常,需要及时回滚。 整个过程相当复杂而漫长,其中还需要输入不少的命令,比如上传代码,git的拉取或者合并分支等等。
docker阿里云镜像加速 我们都知道因为某些原因我们访问外网都是比较慢的,比如我们使用maven下载依赖时是一个道理,同样的使用docker从docker.hub上下载镜像也是比较慢的。针对这种访问官网比较慢的情况有两种方案,第一种就是使用国内的仓库,第二种就是使用一个加速器。这里我们配置docker的镜像加速从来来实现提速。
相关文章
- 阿里云部署Docker(9)----Dockerfile脚本定制镜像
- Docker其他操作:查看内部细节、IP、删除容器
- /var/lib/docker/overlay2 占用很大,清理Docker占用的磁盘空间
- docker 容器启动时设置环境变量source
- docker学习-docker容器
- Linux高级运维 第八章 部署docker容器虚拟化平台
- deepin 15.11 docker 安装命令
- 【云原生 | Kubernetes 系列】Docker 面试题2则--取数据库连接数和docker-compose
- Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- 【Docker】Windows将docker下载的镜像存放到其他盘
- 004-docker命令-docker资源配置-Docker容器CPU、memory资源限制
- 002-docker安装-mac上安装docker,17.06在CentOS7 64位机器上安装
- 问题解决:Job for docker.service failed because the control process exited with error code
- Ubuntu docker 安装
- Docker 部署 MySQL
- 安装docker
- Docker学习笔记06:docker使用之Hello World
- 组件组成:剖析 Docker 组件作用及其底层工作原理
- s20.基于 Kubernetes v1.25 (kubeadm) 和 Docker 部署高可用集群(二)
- s8.基于docker二进制包一键安装Harbor脚本
- 推送docker镜像至Docker Hub
- docker 使用 GPU 安装Nvidia Docker