jenkinsdockercompose-编排springcloud-服务一键发布

12次阅读

共计 2695 个字符,预计需要花费 7 分钟才能阅读完成。

前言

前面一篇文章介绍了使用 docker+jenkins 一键发布 github 上的 springboot 项目。但是一旦有多个为服务需要一起发布的时候,一个一个的配置,发布实在是太累了,有没有什么可以一次打包多个 docker 镜像,然后部署镜像文件为运行的容器呢?docker-compose 完美的解决了这一问题。本篇文章将使用 springcloud 项目为例。

docker-compose 是什么

我们简单介绍一下 docker-compose 的定义:
Docker Compose 是 Docker 三剑客的最后一个,第一个是 Machine,用来在不同平台下快速安装 Docker 的,第二个是 Swarm,帮助 Docker 在集群中运转,第三个便是 Docker Compose,用来帮助用户运行容器组(请注意,不是单独的容器)。

springcloud 配置

ps:
   1. 需要安装 docker-componse。我这里是安装了的,具体安装教程这里不再述说。安装好后,具体查看方式如下:[root@iamcrawler /]# docker-compose -version
   docker-compose version 1.24.1, build 4667896
   
   2. 本文教程 github 地址:https://github.com/iamcrawler/micro.git

第一步跟 Docker Compose 的关系不大,安装 Image,在案例中我们使用了 docker-maven-plugin 这一个插件来操作,然后编写了一个 build-image.sh 的脚本,一键完成所有项目的 Image 安装。

docker-maven-plugin 的配置如下:

   <!---- eureka 为例子:--->
 <build>
        <finalName>crawler-eureka</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- Docker maven plugin -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <!-- Docker maven plugin -->
        </plugins>
    </build>

第二步:build-image.sh 的内容就不粘贴了,基本就是分别进入各个子服务的目录下,再依次执行

mvn clean package -Dmaven.test.skip=true docker:build

来完成 Image 的安装。

第三步:编写 docker-compose.yml 文件,打包镜像(image)

docker-compose.yml 应该位于项目的根目录下,且在命名上不能有偏差。
在编写 docker-compose.yml 时,我们要注意,要定义的容器组位于 services 下,每一个 services 的 Id 一般跟子项目的 artifactId 保持一致,并在其下再去定义所采用的 Image、启动失败时是否重启、容器名称、主机名称、及监听和开放的端口号、依赖的服务等等内容。

image: ${您采用的 Image}
restart: ${ 是否在失败时重启,是的话为 always}
container_name: ${运行时的容器名称}
hostname: ${配置网络的主机名称,可用于容器组内的通讯}
ports: 
  - "1234:1234" ${监听和开放的端口号}
depends_on:
  - docker-compose-eureka ${依赖的服务}

那么案例中的 docker-compose.yml 的内容就不粘贴了,比较多,大家请去项目中查阅。

第四步:启动容器

docker-compose up -d

- d 表示守护进程启用

后续:我们可以关闭容器

docker-compose down

最后,我们将其过程放在 jenkins 上就好了:


## 打包
mvn clean install -Dmaven.test.skip=true
echo "maven 执行完毕"
cur=$(pwd)
echo "当前路径 $cur"

dockerpids1=$(docker ps -f name="crawler-*" | awk '{print $1}' )
for dockerpid in $dockerpids1
do 
  echo "被删除的容器 $dockerpid"
  docker stop $dockerpid
  docker rm $dockerpid
done  

dockerpids2=$(docker ps -f name="*-service" | awk '{print $1}' )
for dockerpid in $dockerpids2
do 
  echo "被删除的容器 $dockerpid"
  docker stop $dockerpid
  docker rm $dockerpid
done  

echo "容器已删除完毕!"

ipids=$(docker images | grep "springcloud/*" | awk '{print $3}')
for imagesid in $ipids
do
  echo "被删除的 image $imagesid"
  docker rmi $imagesid
done  

echo "旧的 docker docker-demo 容器和镜像已删除"

sh build-image.sh

echo "docker 打包完成"


docker-compose up -d


echo "容器启动完成, 结束."

本文参照:https://www.liumapp.com/articles/2018/04/19/1524100110011.html

正文完
 0