微服務框架(五)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>

參考資料:

  1. Maven Docker插件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章