1. 程式人生 > >微服務框架(五)Docker映象化Dubbo微服務

微服務框架(五)Docker映象化Dubbo微服務

  此係列文章將會描述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>

參考資料: