微服務框架(五)Docker映象化Dubbo微服務
阿新 • • 發佈:2019-01-02
此係列文章將會描述Java框架Spring Boot、服務治理框架Dubbo、應用容器引擎Docker,及使用Spring Boot整合Dubbo、Mybatis等開源框架,其中穿插著Spring Boot中日誌切面等技術的實現,然後通過gitlab-CI以持續整合為Docker映象。
本文為將Dubbo微服務實現Docker映象化
本系列文章中所使用的框架版本為Spring Boot 2.0.3-RELEASE,Spring 5.0.7-RELEASE,Dubbo 2.6.2。
Docker映象化
需要打包為docker映象的專案,artifactId請設定為無特殊字元的小寫字母字串
,否則docker-maven-plugin會出錯
配置docker-maven-plugin外掛
maven
pom.xml
加入com.spotify:docker-maven-plugin
外掛配置(配置對應properties)
通用Dubbo POM中已整合,作為parent引入即可,詳見文件
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version> 1.0.0</version>
<configuration>
<imageName>${registry.url}dubbo/${project.artifactId}</imageName>
<dockerDirectory>src/main/resources/docker</dockerDirectory>
<imageTags>
<imageTag>${image.tag}</imageTag>
<imageTag >latest</imageTag>
</imageTags>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<includes>
<include>${project.build.finalName}.jar</include>
<include>lib/*.jar</include>
</includes>
</resource>
</resources>
</configuration>
</plugin>
properties配置示例
引數 | 描述 | 可否為空 |
---|---|---|
registry.url | Docker私有倉庫url | 可為空,此時映象名為dubbo/${project.artifactId} |
image.tag | 映象標籤 | 可為空,此時只生成latest 映象標籤 |
<properties>
<registry.url>0.0.0.1/</registry.url>
<image.tag>0.0.1</image.tag>
</properties>
編寫Dockerfile
Dockerfile檔案路徑需在docker-maven-plugin外掛配置
注:檔案存放路徑需對應上述外掛配置中
<dockerDirectory>
# Dockerfile
# 基礎映象
FROM openjdk:8-jdk-alpine
# 設定工作目錄
WORKDIR /
# 將jar檔案拷貝到映象中。注:docker-maven-plugin 會將jar檔案拷貝到映象構建目錄中
ADD *.jar app.jar
ADD lib lib/
# 執行時設定JAVA環境引數
ENV JAVA_OPTS="-Duser.timezone=Asia/Shanghai"
# 埠暴露(推薦不暴露埠,在執行容器時才對埠進行繫結)
EXPOSE 9702
#ENTRYPOINT不支援環境變數展開
ENTRYPOINT ["java", "-Duser.timezone=Asia/Shanghai", "-jar", "/app.jar"]
編寫CI檔案
編寫CI檔案.gitlab-ci.yaml,將docker映象打包設定為手動觸發
注:gitlab專案需配置環境變數
DOCKER_HOST=tcp://<ip>:<port>
deploy_docker:
stage: deploy
script:
- echo "Deploy as a docker container"
- 'mvn clean package docker:build -DskipTests'
when: manual
only:
- master
檢視並執行映象
檢視映象
docker images
執行映象
docker run -d \
--name <containerName> \
--net dubbo \
-e DUBBO_IP_TO_REGISTRY=<ip> \
-e DUBBO_PORT_TO_REGISTRY=<port> \
-p <ip>:<port>:<port> \
-v dubbo-log:/log \
<imageName> \
--spring.profiles.active=<env>
參考資料: