共计 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