jenkins+docker-compose 編排springcloud 服務一鍵發佈

前言

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

相關文章
相關標籤/搜索