Spring cloud 微服务docker容器化最佳实践
?
?
Spring cloud 是當下最炙手可熱的微服務套件,我們將介紹如何整合Docker容器達到高效快捷的構建發布
采用了dockerfile-maven-plugin插件發布鏡像到遠程docker主機,該部分詳細教程請看?使用Maven插件快捷打包發布遠程Docker鏡像
添加docker插件依賴
如何開放遠程docker主機遠程控制端口請看?使用Maven插件快捷打包發布遠程Docker鏡像
# 可以直接在父工程pom內添加插件,各子項目將自動繼承插件依賴
<build><plugins><plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.4.0</version><configuration><repository>${docker.image.prefix}/${project.artifactId}</repository><buildArgs><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE></buildArgs></configuration></plugin></plugins>
</build>
?
添加Dockerfile文件
需要為各需要發布為docker鏡像的服務項目在其根目錄添加Dockerfile文件
# dockerfile 基礎配置
FROM daocloud.io/library/java:8u40-b22
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} /app/app.jar
WORKDIR /app/
# 該鏡像需要暴露的接口
EXPOSE 8889
ENTRYPOINT ["java","-jar","./app.jar"]
?
執行發布鏡像
mvn clean package dockerfile:build -DskipTests
?
可以看到微服務中的各服務項目都被已經被發布到了遠程docker鏡像
運行
將各服務都跑起來
docker run -d -p 8889:8889 --name hnister-eureka-server hnister/hnister-eureka-server
?
但現在還有一個問題就是如何引入mysql等組件到docker中呢
數據庫等服務的引入
如何構建一個外部可訪問的mysql docker容器請看:Docker 構建Mysql容器并對外提供服務
容器間網絡互通
現在各鏡像已經構建完畢,如何讓各容器相互訪問呢,以前docker采用link的方式,但這種方式已經不被推薦了。
我們可以采用network來方便快捷的達成我們所期望的效果;
創建一個新的network
創建新network
docker network create hnister
?
network被創建成功,在運行容器時指定network
# 通過--network 結合 --network-alias 指定網絡
docker run -d -p 8889:8889 --name hnister-eureka-server --network hnister hnister/hnister-eureka-server
docker run -d -p 8889:8889 --name hnister-mysql --network hnister --network-alias mysql.hnister.cn mysql
?
對已經運行的容器鏈接到network,而其他服務在加入了該network后可以通過alias來訪問主機如鏈接到數據庫mysql
jdbc:mysql://mysql.hnister.cn/hnister
?
對于已經啟動的容器可以使用命令來加入自建network
docker network connect hnister hnister-eureka-server
?
這樣所有的容器就都在一個network內了可以相互訪問
總結
以上是生活随笔為你收集整理的Spring cloud 微服务docker容器化最佳实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022-2028年中国专用化学品行业投
- 下一篇: 2022-2028年中国饮水机市场投资分