基于Docker+Jenkins的微服务自动化部署实践

本文详细介绍了基于Jenkins和Docker容器的微服务自动化部署流程,涵盖了从代码编译、打包到容器化部署的全过程。重点讲解了如何利用Tomcat基础镜像、微服务依赖管理和日志处理等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、部署环境

环境
服务器阿里云ECS服务器
服务器名称campusappserver
操作系统centos7.06
nginx1.1.10
开放端口80、443

二、部署思路

1、使用jenkins+docker容器实现基于服务的自动化部署。
2、自动化部署范围:各个微服务以及微服务依赖的公共模块、基础框架和eurake注册中心。不包括微服务注册依赖的sidecar,sidecar需要手动部署。
3、基于tomcat:8-jre8的基础镜像,包括了运行web应用的环境,Dockfile参考附录。
4、应用代码存放在宿主机器,运行docker容器时,将应用根目录挂载至容器的/usr/local/tomcat/webapps/ROOT目录中。
5、日志存放在容器中,重启后日志数据会丢失,也考虑挂载到宿主机的日志目录下。
6、应用上传的文件存放到ftp服务器中,考虑在宿主机搭建ftp服务器供所有应用共用。
7、自动部署步骤
拉取最新代码编译成war包 → 将war包拷贝到应用根目录并解压 → 将对应容器停止 → 启动容器 → 部署完成。

三、开机启动

启动项启动方法
数据盘挂载用 blkid  获取磁盘的uuid和属性
vim /etc/fstab
UUID=*************  /data  ext4  defaults  1  1
启动/data为挂载的目录
redisvim /etc/init.d/redis_6379
追加
# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database
//设置开机执行redis脚本 chkconfig redis_6379 on
参考链接
https://www.cnblogs.com/renzhicai/p/7773080.html
nginx参考链接
https://www.cnblogs.com/piscesLoveCc/p/5867900.html
dockersystemctl enable docker.service
jenkins节点crontab -e添加定时任务启动节点脚本
/home/tomcat/jenkins-agent-check.sh
服务容器使用–restart=always参数启动容器
docker run --restart=always
sidecarvi /etc/rc.d/rc.local
在末尾添加一行>
/home/tomcat/autorun_sidecar.sh
//赋权可执行
chmod +x /etc/rc.d/rc.local

四、常见问题

1、怎样进入运行中的容器?
docker exec -it 容器名称 /bin/bash
2、怎样查看应用输出的日志?
进入容器后,应用日志默认输出到/log/zmeg_new目录下。
3、sidecar日志输出目录在哪里?
/home/tomcat/log/*_sidecar.log

五、附录

1、campus镜像Dockerfile

FROM tomcat:8-jre8
LABEL author="neo"
LABEL company="gzzm"

RUN rm -rf /usr/local/tomcat/webapps/* && mkdir /usr/local/tomcat/webapps/ROOT
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]

生成镜像:docker build -t campus/1.0 .
2、eurake镜像Dockerfile

FROM java:8-jre
LABEL author="neo"
LABEL company="gzzm"

COPY target/microservice-eureka-1.0-SNAPSHOT.jar /microservice-eureka.jar
COPY src/main/resources/application-docker.yml /config/application.yml

EXPOSE 80

ENTRYPOINT ["java", "-jar", "/microservice-eureka.jar"]

3、autorun_sidecar.sh
开机启动各服务依赖的sidecar以及网关gateway-zuul的脚本,新增加的sidecar需要在该脚本中增加启动脚本。

#!/bin/bash

nohup java -jar /home/tomcat/application/microservice/microservice-sidecar-zmeg/target/microservice-sidecar-1.0-SNAPSHOT.jar >> /home/tomcat/log/sidecar-zmeg.log 2>&1 &
nohup java -jar /home/tomcat/application/microservice/microservice-sidecar-campus/target/microservice-sidecar-1.0-SNAPSHOT.jar >> /home/tomcat/log/sidecar-campus.log 2>&1 &
nohup java -jar /home/tomcat/application/microservice/microservice-sidecar-weixin/target/microservice-sidecar-1.0-SNAPSHOT.jar >> /home/tomcat/log/sidecar-weixin.log 2>&1 &
nohup java -jar /home/tomcat/application/microservice/microservice-sidecar-device/target/microservice-sidecar-1.0-SNAPSHOT.jar >> /home/tomcat/log/sidecar-device.log 2>&1 &
nohup java -jar /home/tomcat/application/microservice/microservice-sidecar-attendance/target/microservice-sidecar-1.0-SNAPSHOT.jar >> /home/tomcat/log/sidecar-attendance.log 2>&1 &
nohup java -jar /home/tomcat/application/microservice/microservice-sidecar-education/target/microservice-sidecar-1.0-SNAPSHOT.jar >> /home/tomcat/log/sidecar-education.log 2>&1 &
nohup java -jar /home/tomcat/application/microservice/microservice-sidecar-social/target/microservice-sidecar-1.0-SNAPSHOT.jar >> /home/tomcat/log/sidecar-social.log 2>&1 &
nohup java -jar /home/tomcat/application/microservice/microservice-gateway-zuul/target/microservice-gateway-zuul-1.0-SNAPSHOT.jar >> /home/tomcat/log/gateway-zuul.log 2>&1 &

4、微服务容器控制文件*_control.sh

#!/bin/bash

stop(){
        docker stop campus1.0
        docker rm campus1.0
}
start(){
        docker run --restart=always -itd --name campus1.0 -p18080:8080 -v /home/tomcat/application/campus_campus:/usr/local/tomcat/webapps/ROOT campus/1.0
}

case $1 in
        start)
                start
                ;;
        stop)
                stop
                ;;
        restart)
                stop
                sleep 5
                start
                ;;
        *)
                echo "usese:$0 start|stop|restart"
                ;;
esac

服务的控制脚本,用于手动启动、停止、重启容器。新增加的服务需要增加对应的控制脚本。
红色标识为需要修改的项:
campus1.0为容器的名称,作为停止容器的唯一标识。
18080为从容器中映射到宿主机的端口。
campus_campus为应用所在目录

5、docker_autobuild.sh
自动部署脚本

#!/bin/bash

projectdir=${APP_ROOT}/${JOB_BASE_NAME}/
cp ${WORKSPACE}/target/${warname} ${projectdir}
cd ${projectdir}
jar -xvf ${warname}
docker stop ${containername}
docker rm ${containername}
docker run --restart=always -itd --name ${containername} -p${port}:8080 -v ${projectdir}:/usr/local/tomcat/webapps/ROOT ${imagename}

Jenkins上的任务名称需要与应用目录名称一致,例如jenkins上的任务名称为campus_campus,在服务器中对应的是/home/tomcat/application/campus_campus应用。
为了让campus_common和zmeg_new两个公共的更新任务能使用标准的更新脚本,在任务中配置了JOB_BASE_NAME参数,用于覆盖jenkins自带的任务名称(campus_common或zmeg_new)。
在更新脚本中,经常需要引用应用所在的根目录/home/tomcat/application,在节点中配置了APP_ROOT环境变量,供更新脚本引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值