前言
前面一篇文章介绍了使用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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。