微服务框架(五)Docker镜像化Dubbo微服务

简介:   此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为将Dubbo微服务实现Docker镜像化

  此系列文章将会描述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插件
相关文章
|
3天前
|
Java 网络安全 开发者
【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)
【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)
12 0
|
3天前
|
NoSQL 应用服务中间件 nginx
【Docker】2、Docker 基本操作【镜像操作】
【Docker】2、Docker 基本操作【镜像操作】
18 0
|
4天前
|
关系型数据库 MySQL Linux
docker镜像与容器的迁移
docker迁移镜像步骤 docker迁移容器步骤 docker迁移mysql容器步骤
|
5天前
|
PyTorch 算法框架/工具 Docker
ModelScope问题之odelScope使用了官方的docker的cpu镜像如何解决
ModelScope镜像是指用于在ModelScope平台上创建和管理的容器镜像,这些镜像包含用于模型训练和推理的环境和依赖;本合集将说明如何使用ModelScope镜像以及管理镜像的技巧和注意事项。
23 0
|
5天前
|
Linux 应用服务中间件 nginx
内网环境下 - 安装linux命令、搭建docker以及安装镜像
内网环境docker镜像的安装,以及内网环境如何安装linux命令
内网环境下 - 安装linux命令、搭建docker以及安装镜像
|
11天前
|
Cloud Native Go 数据安全/隐私保护
自定义Docker镜像推送到Docker Hub实战
自定义Docker镜像推送到Docker Hub实战
37 2
自定义Docker镜像推送到Docker Hub实战
|
26天前
|
开发者 Docker 微服务
深入浅出:使用Docker容器化部署微服务架构
在当今快速迭代的软件开发环境中,微服务架构因其高度解耦和独立性而成为企业首选。然而,微服务的管理和部署可能会变得复杂和繁琐。本文将探讨如何利用Docker,一个轻量级的容器化技术,来简化和加速微服务的部署。我们将从Docker的基础概念入手,详细介绍如何创建、配置和运行微服务容器,最后讨论Docker在微服务架构中的优势和挑战。本文旨在为开发者提供一条清晰的路径,通过容器化技术实现微服务架构的高效部署和管理。
65 0
|
26天前
|
Kubernetes 开发者 Docker
深入浅出:使用Docker容器化部署微服务架构
在当今快速演进的软件开发领域,微服务架构因其高度的模块化和可伸缩性而受到广泛欢迎。然而,微服务的部署和管理也带来了新的挑战。本文旨在通过深入浅出的方式,探讨如何利用Docker容器技术有效地部署和管理微服务架构。我们将从Docker的基本概念出发,逐步深入到如何构建、部署微服务,并讨论在此过程中可能遇到的常见问题及其解决策略。本文不仅适合刚接触Docker和微服务的新手,也为有经验的开发者提供了实用的参考。
44 1
|
26天前
|
JSON JavaScript Docker
深入浅出:使用Docker容器化部署微服务架构
本文旨在向读者展示如何利用Docker技术高效地构建和部署微服务架构。通过深入浅出的方式,我们将探索Docker的基本概念、容器化的优势以及如何将其应用于微服务架构中。此外,文章还将提供一个简单的示例,指导读者实践如何使用Docker将一个现有的后端应用容器化,并部署到本地开发环境中。不同于传统的摘要,这里我们强调实践操作的重要性,鼓励读者通过实际操作来加深对Docker和微服务架构的理解。
39 1
|
26天前
|
Kubernetes 负载均衡 Docker
深入浅出:使用Docker容器化部署微服务
在当今快速变化的软件开发领域,微服务架构因其高度的模块化和可伸缩性而受到广泛欢迎。然而,微服务的部署和管理带来了新的挑战。本文将探讨如何利用Docker容器技术,简化和加速微服务应用的部署过程。我们将从Docker的基础知识入手,逐步深入到如何构建、部署和管理微服务容器。通过本文,读者将获得一套实用的工具和方法论,以便在自己的项目中高效地应用Docker和微服务技术。

热门文章

最新文章