前言
前面一篇文章介紹了使用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