开发者社区> 初商> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

基于docker的持续交付系列(一):如何将app与docker整合并部署

简介: 基于docker的持续交付系列(一)
+关注继续查看

初衷

最近docker可以说火得不要不要的,主要是源于docker对环境一致性的完美解决,极大提升了开发和运维的效率,很好地诠释了dev-ops的含义。通过以下几个链接,你可以对docker有更深入的理解:


用到的工具
本着追随潮流的心态,让我们也尝试着去折腾一把!
本篇主要介绍如何将app代码与docker进行整合并build为镜像,最终完成部署、提供服务。


  • 使用的的代码托管工具为阿里云code(code.aliyun.com);
  • 使用的容器hub为阿里云开发者平台(dev.aliyun.com);

最终的产品镜像将部署到阿里云容器服务的ecs上(https://cs.console.aliyun.com/#/overview/all)

操作步骤
app代码编译
首先,我们本地clone项目代码库(此处需要您的阿里云code用户名和密码)

$ git clone https://code.aliyun.com/zju_lb/java-with-docker/tree/masterUsername for 'https://code.aliyun.com': zju_lbPassword for 'https://zju_lb@code.aliyun.com':

对于java工程,首先我们进行编译:

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

编译过后,进行简单的测试工作:

$ mvn test

一切顺利,java的产出物boot-api.war已经存在于target目录下面了,现在缺少的是一个tomcat容器。

编译并push镜像
有人可能会说,dockerhub(https://hub.docker.com/) 上经过官方认证的tomcat容器版本不要太多(各个版本),但因为“墙”这个东西,使用dockerhub来存储镜像,就像用github存储代码一样,速度是硬伤。还好有阿里云的开发者平台(dev.aliyun.com)提供了具有加速功能的容器hub服务(加速的具体用法自己去研究吧)。
接下来要做的就是:

  • 在开发者平台上创建一个镜像仓库(名为java-with-docker),代码源选择“本地仓库”(github和bitbucket速度实在令人心慌,不过据说阿里云code即将接入开发者平台了);
  • 然后通过加速将官方的tomcat镜像拉到本地;
  • 基于这个镜像新写一个Dockerfile,在Dockerfile中自定义一些配置,并把maven编译的产出物war包打进镜像。在这里,我把Dockerfile一并提交到了代码仓库(这也是业界的一般玩法),一方面为了更好的实现app与镜像统一的版本化控制,另一方面也方便最终部署的实现,只要checkout代码就有了一切

FROM registry.aliyuncs.com/zju_lb/tomcat:latestCOPY sources.list /etc/apt/sources.listRUN apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 40976EAF437D05B5RUN apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32# 通用工具RUN apt-get update && apt-get -y install curl gcc automake autoconf make git wget xz-utils# 设置时区ENV TZ "PRC"RUN echo "Asia/Shanghai" | tee /etc/timezone \
&& dpkg-reconfigure --frontend noninteractive tzdata# 复制产出物到webapps目录下并启动tomcatCOPY ./target/boot-api.war /usr/local/tomcat/webappsCMD ["catalina.sh","run"]
根据新完成的Dockerfile,本地进镜像编译:

$ docker run –p dockerMachineIP:9999:8080 –it java-with-docker

编译完成后,启动镜像:

$ docker run –p dockerMachineIP:9999:8080 –it java-with-docker
  • 容器启动后就可以访问dockerMachineIP:9999/boot-api,看到我们java web服务的简单页面:

image.png

  • 一切OK,我们将该镜像push到镜像仓库中:
$ sudo docker login --username=alibay@aliyun-inner.com registry.aliyuncs.com $ sudo docker tag java-with-docker registry.aliyuncs.com/crp/java-with-docker
$ sudo docker push registry.aliyuncs.com/crp/java-with-docker```
(整个过程大概也就3分钟不到吧,当然这取决于你的网速)

启动容器服务
    虽然本地已经可以把容器run起来了,但如果想真正做到对外服务,还需要配置公网域名、proxy转发等一系列准备工作,我们可以使用阿里云提供的容器服务来简单实现这些繁琐的过程:

- 登陆阿里云官网(aliyun.com),开通容器服务;

- 可以看到,容器服务已经为你创建了一些用于log和route的系统应用;

- 点击“创建应用”,选择“使用镜像创建”,在选择镜像中选择刚刚push的镜像(java-with-docker),需要注意在“Web路由规则”中添加端口转发规则:

![image.png](https://ucc.alicdn.com/pic/developer-ecology/03723fabc8474fadabbbac79d1094651.png)

- 应用创建成功后,就可以通过页面给出的“访问端点”的地址进行访问了:

![image.png](https://ucc.alicdn.com/pic/developer-ecology/dcbf296320b84d439592c72e395b8802.png)






----

###结语
 本篇到此暂告一段落,只是给出了一个简单的demo应用并将其镜像化,如何使用compose编排(多镜像整合)技术,如何实现基于docker的持续交付,预知详情,且听下回分解。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
部署Docker前必须问自己的四个问题
本文讲的是部署Docker前必须问自己的四个问题,【编者的话】Docker是当前技术领域最火热话题了,但是真正应用到生产环境并取得革命性成功的案例却并不多。很多人提起这个话题,往往认为Docker不够稳定,坑多,但在在实际的生产实践过程中,很多用户反馈Docker本身的稳定性不错,
1340 0
什么,容器太多操作不过来?我选择Docker Compose梭哈(下)
什么,容器太多操作不过来?我选择Docker Compose梭哈(下)
0 0
【云原生Docker篇】Docker的容器管理操作(上)
1、创建容器 容器创建:就是将镜像加载到容器的过程。 创建容器时如果没有指定容器名称,系统会自动创建一个名称。 新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。
0 0
【云原生Docker篇】Docker的容器管理操作(下)
1、创建容器 容器创建:就是将镜像加载到容器的过程。 创建容器时如果没有指定容器名称,系统会自动创建一个名称。 新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。
0 0
【云原生Docker篇】Docker的数据管理(数据卷、容器互联)
用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作。 容器中管理数据主要有两种方式: 数据卷(Data Volumes) 数据卷容器(Data Volume Dontainers)
0 0
对已有的docker容器添加新的目录映射, 端口映射,环境变量,dns等
docker容器已经建立并运行, 需要在已有容器上添加新的目录映射,端口映射,环境变量等
0 0
ELK搭建(九):搭建Docker容器指标监控平台
Docker是一款轻量级的应用容器引擎,可以帮助我们快速部署各类软件,自动化构建系列生产环境。因此,我们也需要一个统一的监控页面,来让我们实时了解docker中各个容器的运行情况
0 0
《Java Spring Boot开发实战系列课程(第17讲):Spring Boot 2.0实战Docker容器Linux》电子版地址
Java Spring Boot开发实战系列课程(第17讲):Spring Boot 2.0实战Docker容器Linux
0 0
安装 Docker 容器环境|学习笔记
快速学习安装 Docker 容器环境
0 0
+关注
文章
问答
来源圈子
更多
阿里基础设施事业群,隐身于你接触到的阿里集团的各种服务和应用中。我们将在这个平台上与大家交流技术及IT行业的各种问题。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
我的Docker:Docker插件机制详解
立即下载
Docker 镜像原理和最佳实践
立即下载
从Docker到容器服务
立即下载