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

简介: 本文介绍了如何将java的web应用与docker镜像整合在一起,并最终发布到阿里云容器服务的详细步骤,后后续介绍compose技术和基于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/master
Username for 'https://code.aliyun.com': zju_lb
Password for 'https://zju_lb@code.aliyun.com':


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

> ```bash
$ 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代码就有了一切

> ```bash
FROM registry.aliyuncs.com/zju_lb/tomcat:latest
COPY sources.list /etc/apt/sources.list
RUN apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 40976EAF437D05B5
RUN 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目录下并启动tomcat
COPY ./target/boot-api.war /usr/local/tomcat/webapps
CMD ["catalina.sh","run"]
  • 根据新完成的Dockerfile,本地进镜像编译:

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


- 编译完成后,启动镜像:

> ```bash
$ docker run –p dockerMachineIP:9999:8080 –it java-with-docker
  • 容器启动后就可以访问dockerMachineIP:9999/boot-api,看到我们java web服务的简单页面:
    _2016_03_28_11_34_07
  • 一切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路由规则”中添加端口转发规则:
![_2016_03_28_10_00_08](https://oss.aliyuncs.com/yqfiles/386177b2905f3c7240b38fbebbf8e9d9a4fb69b2.png)

- 应用创建成功后,就可以通过页面给出的“访问端点”的地址进行访问了:
![_2016_03_28_11_39_33](https://oss.aliyuncs.com/yqfiles/644a6e933e3bfbba3ec4a38d2803a968f545f52c.png)
![_2016_03_28_11_39_24](https://oss.aliyuncs.com/yqfiles/7882c630f81f0994c94ed0fedff87c8a2301f5b7.png)

--------
###结语###
相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
SQL Oracle 关系型数据库
Oracle之regexp系列函数详解
Oracle之regexp系列函数详解
794 1
|
9月前
|
存储 vr&ar 缓存
【02】AE特效开发制作特技-Adobe After Effects-本篇制作主角飞机,敌军飞机,敌军boss飞机,子弹特效,做成mp4以及导出png序列图-优雅草央千澈
【02】AE特效开发制作特技-Adobe After Effects-本篇制作主角飞机,敌军飞机,敌军boss飞机,子弹特效,做成mp4以及导出png序列图-优雅草央千澈
191 25
【02】AE特效开发制作特技-Adobe After Effects-本篇制作主角飞机,敌军飞机,敌军boss飞机,子弹特效,做成mp4以及导出png序列图-优雅草央千澈
|
9月前
|
SQL 关系型数据库 MySQL
网安入门之MySQL后端基础
《网安入门之MySQL后端基础》简介: 本文介绍了数据库及MySQL的基础知识,涵盖数据库的概念、结构与操作。数据库是组织化存储数据的集合,通过表、列、行等结构实现高效管理。MySQL作为开源的关系型数据库管理系统,广泛应用于Web开发。文中详细讲解了MySQL的基本操作,如增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT)等语句的使用方法,并介绍了数据库事务的ACID特性。此外,还探讨了SQL注入攻击的风险及防范措施,强调了预处理语句的重要性。最后,简述了PHP中mysqli扩展的使用方法,包括连接数据库、执行查询和关闭连接等步骤。
|
11月前
|
机器学习/深度学习 算法 Python
随机森林算法是一种强大的集成学习方法,通过构建多个决策树并综合其结果进行预测。
随机森林算法是一种强大的集成学习方法,通过构建多个决策树并综合其结果进行预测。本文详细介绍了随机森林的工作原理、性能优势、影响因素及调优方法,并提供了Python实现示例。适用于分类、回归及特征选择等多种应用场景。
582 7
|
Oracle 关系型数据库 MySQL
OceanBase数据库简介
【8月更文挑战第9天】OceanBase数据库简介
1184 60
|
NoSQL 搜索推荐 关系型数据库
MongoDB的就业前景非常广阔
MongoDB的就业前景非常广阔
282 2
|
存储 算法 索引
(六)漫谈分布式之一致性算法上篇:用二十六张图一探Raft共识算法奥妙之处!
现如今,大多数分布式存储系统都投向了Raft算法的怀抱,而本文就来聊聊大名鼎鼎的Raft算法/协议!
320 8
|
机器学习/深度学习 人工智能 TensorFlow
安卓中的人工智能:集成机器学习功能
【4月更文挑战第14天】在数字化时代,人工智能与机器学习正驱动安卓平台的技术革新。谷歌的ML Kit和TensorFlow Lite为开发者提供了便捷的集成工具,使得应用能实现图像识别、文本转换等功能,提升用户体验。尽管面临数据隐私和安全性的挑战,但随着技术进步,更强大的AI功能将预示着移动端的未来,为开发者创造更多创新机遇。
215 4
|
机器学习/深度学习 人工智能 自然语言处理
巧用ChatGPT高效搞定Excel数据分析
随着人工智能技术的不断发展,越来越多的企业开始将其应用于办公场景,以提高员工的工作效率。而在众多办公软件中,Excel无疑是最常用的一款。然而,传统的Excel数据分析方法往往耗时且容易出错。
1222 0
|
存储 弹性计算 监控
阿里邮箱企业版详解_阿里邮箱_阿里企业邮箱详细说明
阿里邮箱企业版详解_阿里邮箱_阿里企业邮箱详细说明,阿里邮箱是阿里云自主研发的,基于飞天平台自主研发的云原生分布式邮箱系统,阿里邮箱提供免费版、标准版、尊享版和集团版,企业邮箱版本不同支持的账号数也不同,共享网盘容量和个人网盘容量均不同,阿里云百科来详细介绍下阿里云企业邮箱