前言
前面一篇文章介绍了使用docker+jenkins一键发布github上的springboot项目。可是一旦有多个为服务须要一块儿发布的时候,一个一个的配置,发布实在是太累了,有没有什么能够一次打包多个docker镜像,而后部署镜像文件为运行的容器呢?docker-compose完美的解决了这一问题。本篇文章将使用springcloud项目为例。html
docker-compose是什么
咱们简单介绍一下docker-compose的定义:
Docker Compose是Docker三剑客的最后一个,第一个是Machine,用来在不一样平台下快速安装Docker的,第二个是Swarm,帮助Docker在集群中运转,第三个即是Docker Compose,用来帮助用户运行容器组(请注意,不是单独的容器)。git
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安装。github
docker-maven-plugin的配置以下:spring
<!---- 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的内容就不粘贴了,基本就是分别进入各个子服务的目录下,再依次执行docker
mvn clean package -Dmaven.test.skip=true docker:build
来完成Image的安装。springboot
第三步:编写docker-compose.yml文件,打包镜像(image)网络
docker-compose.yml应该位于项目的根目录下,且在命名上不能有误差。
在编写docker-compose.yml时,咱们要注意,要定义的容器组位于services下,每个services的Id通常跟子项目的artifactId保持一致,并在其下再去定义所采用的Image、启动失败时是否重启、容器名称、主机名称、及监听和开放的端口号、依赖的服务等等内容。app
image: ${您采用的Image} restart: ${是否在失败时重启,是的话为always} container_name: ${运行时的容器名称} hostname: ${配置网络的主机名称,可用于容器组内的通信} ports: - "1234:1234" ${监听和开放的端口号} depends_on: - docker-compose-eureka ${依赖的服务}
那么案例中的docker-compose.yml的内容就不粘贴了,比较多,你们请去项目中查阅。maven
第四步:启动容器spring-boot
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