一 概述

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如下:

#父镜像

FROM centos7-tomcat7-jdk7:1.0

#维护者

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

完整Dockerfile代码

  1. FROM y.com/test/centos7-jdk7-tomcat8:2.0.1
  2. MAINTAINER luo,ten <luoten@midea.com>
  3. # Install war
  4. RUN mkdir /apps/document.war
  5. RUN mkdir /apps/tomcat8/conf/Catalina
  6. RUN mkdir /apps/tomcat8/conf/Catalina/localhost
  7. RUN mkdir /apps/document.war_work
  8. COPY target/document.war /apps/document.war
  9. ADD document.war.xml /apps/tomcat8/conf/Catalina/localhost

完整docker镜像编译服务器执行的代码

  1. cd /root/jenkins_home/workspace/DEV-DOCUMENT/document.war/target/
  2. unzip document.war-0.0.1-SNAPSHOT.war -d  document.war
  3. cd  ../
  4. docker build -t y.com/test/document.war:${BUILD_NUMBER} .
  5. docker login -p admin123 -u admin y.com
  6. docker push y.com/test/document.war:${BUILD_NUMBER}
  7. docker rmi  y.com/test/document.war:${BUILD_NUMBER}

完整docker应用说在服务器的执行代码

  1. docker kill document.war
  2. docker rm -f document.war
  3. docker rmi y.com/test/document.war:$((${BUILD_NUMBER}-1))
  4. 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自动化部署方案的更多相关文章

  1. 自动化部署方案CICD

    自动化部署方案   由于来来也的时间不久,可能对现有的部署情况不是很了解,以下是个人对POC自动化部署的设计方案. 自动化部署优点 降低成本,提高生产力,高可用,更可靠,性能优化   与gitlab持 ...

  2. 微服务项目的docker自动化部署流程

    目录 微服务的Docker自动化部署 制作JDK1.8的Docker镜像 Docker常用命令介绍 制作image的一般流程 将本地的image上传至私人仓库 使用Maven插件实现自动化docker ...

  3. docker自动化部署前端项目实战一

    docker自动化部署前端项目实战一 本文适用于个人项目,如博客.静态文档,不涉及后台数据交互,以部署文档为例. 思路 利用服务器node脚本,监听github仓库webhook push事件触发po ...

  4. 品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署

    部署场景是这样的,我们基于 ASP.NET Core 2.0 Preview 1 开发了一个用于管理缓存的 Web API ,想通过阿里云容器服务基于 Docker 部署为内网服务. 在这篇博文中分享 ...

  5. Linux文档整理之【Jenkins+Docker自动化部署.Net Core】

    这次整理的文档是Jenkins+Docker实现自动化部署,很早之前就写的,今天有时间就搬到博客园做个记录. Jenkins是基于Java开发的一种持续集成工具,主要用于持续.自动的构建/测试软件等相 ...

  6. .NetCore基于Jenkins和Gogs的自动化部署方案

    准备工作 Jenkins和gogs的安装配置可以看前两篇:Jenkins安装.配置与说明  和 gogs安装与说明(docker) 此外,因为还要安装.net core的SDK和Git工具: 安装.n ...

  7. ezdpl:完全依赖脚本和ssh的自动化部署方案

    ezdpl是easy deployment的简写,使用简单的ssh和shell脚本来部署.升级.回滚和重新配置linux服务器. 重要提示:警告:这个项目还处于测试过程中,请仔细阅读说明,并且自己承担 ...

  8. Gogs+Jenkins+Docker 自动化部署.NetCore

    环境说明 腾讯云轻量服务器, 配置 1c 2g 6mb ,系统是 ubuntu 20.14,Docker 和 Jenkins 都在这台服务器上面, 群晖218+一台,Gogs 在这台服务器上. Doc ...

  9. gitlab+gitlab-ci+docker自动化部署

    导言 本次测试用的是gitlab-ci,单纯与gitlab搭配而言,gitlab-ci较jenkins更加一体,顺畅. 主机1:192.168.100.151 gitlab 主机2:192.168.1 ...

随机推荐

  1. FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)

    FFMPEG中的swscale提供了视频原始数据(YUV420,YUV422,YUV444,RGB24...)之间的转换,分辨率变换等操作,使用起来十分方便,在这里记录一下它的用法. swscale主 ...

  2. 实战DeviceIoControl 之五:列举已安装的存储设备

    Q 前几次我们讨论的都是设备名比较清楚的情况,有了设备名(路径),就可以直接调用CreateFile打开设备,进行它所支持的I/O操作了.如果事先并不能确切知道设备名,如何去访问设备呢? A 访问设备 ...

  3. HighCharts之2D带有Legend的饼图

    HighCharts之2D带有Legend的饼图 1.实例源码 PieLegend.html: <!DOCTYPE html> <html> <head> < ...

  4. linux下ssd电子盘速度检测

    代码: #include<stdio.h> #include<sys/time.h> #include <fcntl.h> #include <pthread ...

  5. ASP.NET CORE入门之读取Json配置文件

    首先新建一.net core控制台项目,命名为jsonReader 然后选中引用,选择NuGet包管理器,点击浏览引入mircosoft.aspnetcore.all并安装 选中解决方案,填加,新建项 ...

  6. springtest-junit-jidi--测试接口

    一,问题分析 假如在一个项目中要测试一个接口,但是这个项目没有对外开放url地址,话句话就是说浏览器访问不了里面的资源,自己造的数据不能测试接口,那么只能等别人来调用自己的接口,而且自己也不能测试,假 ...

  7. Excel2010 日文显示乱码

  8. C#中(int)、Conver.Toint32()、int.Parse()三种类型转换方式的区别与联系--C#基础知识

    自己刚学习C#,总结了一些知识,想分享给大家.毕竟刚学习这门语言,学得不深,如果哪里有错误,请帮忙指出一下哈,谢谢! 1.(int)可用于单精度.双精度等其他数值类型的转换(到整型int),不能用于转 ...

  9. Postgresql基本用法以及优化注意

    本篇为之前学习PG数据库一些基本操作使用以及优化注意. 比较运算符  = :  <>,!=,<= , <,>=,>: 不能用于null判断; Between: Le ...

  10. 神级程序员:让你的爬虫就像人类的用户行为! 你敢封我IP吗?

    1 前言 近期,有些朋友问我一些关于如何应对反爬虫的问题.由于好多朋友都在问,因此决定写一篇此类的博客.把我知道的一些方法,分享给大家.博主属于小菜级别,玩爬虫也完全是处于兴趣爱好,如有不足之处,还望 ...