Docker自动化部署方案
一 概述
Docker发布版本应该与现有的版本发布尽量一致,参考jenkins的版本发布过程;我认为maven库和docker库有很多类似的地方,因此打包过程参考maven的打包过程;重点实现docker自动打包、push、pull、run、kill相关流程的控制。
二 需求分析
1、部署和目前的jenkins发布流程基本保持一致,目前版本发布的触发条件有:定时发布、手工发布,发布过程包括:下载代码、构建、停止tomcat、清除缓存、当期版本、上传war包、上传且替换配置文件、启动tomcat等步骤。
2、针对使用docker容器的,需要增加构建镜像上传镜像的过程
jekins 和 web服务器需要有docker环境,包括docker和docker-compose
总体流程
1 下载代码打包
1)代码路径下面要包含各套环境的配置文件信息,
2 docker镜像版本定义
docker镜像的当期版本使用${BUILD_NUMBER},上一版本使用$$((${BUILD_NUMBER}-1))
3 准备物料
压缩环境配置文件为evnconfig.zip,拷贝到Dockerfile目录;
拷贝war包到Dockefile目录。
4 Dockerfile构建镜像
Dockerfile如下:
#父镜像
#维护者
MAINTAINER luo tian "tian@gmail.com
#同步物料
ADD document.war.tar /root/tomcat7/webapp
ADD envconfig.tar /root/tomcat7/webapp
#暴露访问端口
EXPOSE 8080
#启动服务
ENTRYPOINT sh /root/tomcat7/bin/startup.sh
构建命令如下:docker build -t xx.com/ecf/document.war:v1.xx .
注解:镜像名称是部分组成:仓库url/项目名称/镜像名称:镜像版本
Push镜像
#登陆仓库
docker login yy.com
#上传镜像
docker push xx.com/ecf/document.war:v1.xx
docker仓库查看镜像
5 目标服务器执行shell命令
#停止容器
docker kill document.war
#删除容器
docker rm document.war
#启动新容器
docker run -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -v /root/tomcat7/logs:/var/tomcat7/logs --name document.war -d xx.com/document.war:1.xx
#删除旧镜像
docker rmi xx.com/document.war:1.xx
- FROM y.com/test/centos7-jdk7-tomcat8:2.0.1
- MAINTAINER luo,ten <luoten@midea.com>
- # Install war
- RUN mkdir /apps/document.war
- RUN mkdir /apps/tomcat8/conf/Catalina
- RUN mkdir /apps/tomcat8/conf/Catalina/localhost
- RUN mkdir /apps/document.war_work
- COPY target/document.war /apps/document.war
- ADD document.war.xml /apps/tomcat8/conf/Catalina/localhost
完整docker镜像编译服务器执行的代码
- cd /root/jenkins_home/workspace/DEV-DOCUMENT/document.war/target/
- unzip document.war-0.0.1-SNAPSHOT.war -d document.war
- cd ../
- docker build -t y.com/test/document.war:${BUILD_NUMBER} .
- docker login -p admin123 -u admin y.com
- docker push y.com/test/document.war:${BUILD_NUMBER}
- docker rmi y.com/test/document.war:${BUILD_NUMBER}
完整docker应用说在服务器的执行代码
- docker kill document.war
- docker rm -f document.war
- docker rmi y.com/test/document.war:$((${BUILD_NUMBER}-1))
- docker run -v /root/document.war/logs:/apps/tomcat8/logs --name document.war -p 8081:8080 -itd --privileged y.com/test/document.war:${BUILD_NUMBER} /usr/sbin/init
Docker自动化部署方案的更多相关文章
- 自动化部署方案CICD
自动化部署方案 由于来来也的时间不久,可能对现有的部署情况不是很了解,以下是个人对POC自动化部署的设计方案. 自动化部署优点 降低成本,提高生产力,高可用,更可靠,性能优化 与gitlab持 ...
- 微服务项目的docker自动化部署流程
目录 微服务的Docker自动化部署 制作JDK1.8的Docker镜像 Docker常用命令介绍 制作image的一般流程 将本地的image上传至私人仓库 使用Maven插件实现自动化docker ...
- docker自动化部署前端项目实战一
docker自动化部署前端项目实战一 本文适用于个人项目,如博客.静态文档,不涉及后台数据交互,以部署文档为例. 思路 利用服务器node脚本,监听github仓库webhook push事件触发po ...
- 品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署
部署场景是这样的,我们基于 ASP.NET Core 2.0 Preview 1 开发了一个用于管理缓存的 Web API ,想通过阿里云容器服务基于 Docker 部署为内网服务. 在这篇博文中分享 ...
- Linux文档整理之【Jenkins+Docker自动化部署.Net Core】
这次整理的文档是Jenkins+Docker实现自动化部署,很早之前就写的,今天有时间就搬到博客园做个记录. Jenkins是基于Java开发的一种持续集成工具,主要用于持续.自动的构建/测试软件等相 ...
- .NetCore基于Jenkins和Gogs的自动化部署方案
准备工作 Jenkins和gogs的安装配置可以看前两篇:Jenkins安装.配置与说明 和 gogs安装与说明(docker) 此外,因为还要安装.net core的SDK和Git工具: 安装.n ...
- ezdpl:完全依赖脚本和ssh的自动化部署方案
ezdpl是easy deployment的简写,使用简单的ssh和shell脚本来部署.升级.回滚和重新配置linux服务器. 重要提示:警告:这个项目还处于测试过程中,请仔细阅读说明,并且自己承担 ...
- Gogs+Jenkins+Docker 自动化部署.NetCore
环境说明 腾讯云轻量服务器, 配置 1c 2g 6mb ,系统是 ubuntu 20.14,Docker 和 Jenkins 都在这台服务器上面, 群晖218+一台,Gogs 在这台服务器上. Doc ...
- gitlab+gitlab-ci+docker自动化部署
导言 本次测试用的是gitlab-ci,单纯与gitlab搭配而言,gitlab-ci较jenkins更加一体,顺畅. 主机1:192.168.100.151 gitlab 主机2:192.168.1 ...
随机推荐
- Linux XZ压缩格式学习
XZ的介绍 今天升级Python的时候,下载的Python-2.7.8.tar.xz安装包为xz格式,好吧,我又孤陋寡闻了,居然第一次遇见xz格式的压缩文件.搜索了一下资料,下面是xz的一些介绍: ...
- 1.1 PCI总线的组成结构
如上文所述,PCI总线作为处理器系统的局部总线,是处理器系统的一个组成部件,讲述PCI总线的组成结构不能离开处理器系统这个大环境.在一个处理器系统中,与PCI总线相关的模块如图1?1所示. 如图1?1 ...
- mysql常用基础操作语法(十二)~~常用数值函数【命令行模式】
数值函数是常用函数之一,也是学习mysql必会的,常用的有如下一些: 1.ceil:返回大于某个数的最小整数值: 2.floor:和上一个相反,返回小于某个数的最大整数值: 3.round:返回某个数 ...
- R语言︱H2o深度学习的一些R语言实践——H2o包
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言H2o包的几个应用案例 笔者寄语:受启发 ...
- dojo中的dojox/grid/EnhancedGrid表格报错
1.错误截图 2.错误出处 <body class="claro"> <div id="gridContainer"> <span ...
- 芝麻HTTP:redis-py的安装
对于Redis来说,我们要使用redis-py库来与其交互,这里就来介绍一下它的安装方法. 1. 相关链接 GitHub:https://github.com/andymccurdy/redis-py ...
- CF368 E - Garlands
主席树 其实暴力二维树状还更快 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int M ...
- 畅通工程续 HDU - 1874
某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰. 现在 ...
- WPF自学入门(二)WPF-XAML布局控件
上一篇介绍了xaml基本知识,我们已经知道了WPF简单的语法.那么接下来,我们要认识一下WPF的布局容器.布局容器可以使控件按照分类显示,我们一起来看看WPF里面可以使用哪些布局容器用来布局. 在WP ...
- 戏说java多线程之CyclicBarrier(循环栅栏)的CyclicBarrier(int parties)构造方法
CyclicBarrier是JDK 1.5 concurrent包出现的一个用于解决多条线程阻塞,当达到一定条件时一起放行的一个类.我们先来看这样一个简单的需求. 现在我有一个写入数据的类,继承Run ...