Docker 一键打包微服务

Posted 博学谷狂野架构师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 一键打包微服务相关的知识,希望对你有一定的参考价值。

我们项目中用到了多个微服务,我们上一节课程打包用的是手动上传,但是很麻烦,有没有更好的方式呢,是有的,我们可以直接通过idea将我们的微服务打包成Docker镜像,并推送到Docker仓库中

这里我们采用jib-maven-plugin 来进行来构建容器化的spring boot应用程序,Jib可以让不写Dockerfile就能实现Docker打包

什么是Jib

Jib带来的是,它允许您通过简单地将插件添加到您选择的构建工具(Maven或Gradle)来创建容器,没有额外的文件,只需几行配置,它处理将应用程序打包到容器映像的所有步骤。

Jib是来自Google的开源Java容器,它允许Java开发人员使用他们所知道的Java工具构建容器,它不需要您编写Dockerfile或安装了docker,它直接集成到MavenGradle中

和传统的插件区别

Docker 构建流程

Jib构建流程

通过 Jib,Java 开发者可以使用他们熟悉的 Java 工具来构建容器。Jib 是一个快速而简单的容器镜像构建工具,它负责处理将应用程序打包到容器镜像中所需的所有步骤。它不需要你编写 Dockerfile 或安装 Docker,而且可以直接集成到 Maven 和 Gradle中 —— 只需要将插件添加到构建中,就可以立即将 Java 应用程序容器化。

准备工作

设置Horbor用户权限

pom文件配置jib

公共属性配置
 <properties>
     <!--harbor 仓库地址-->
     <docker.registry.url>itcastharbor.com</docker.registry.url>
     <!--harbor 的项目名称-->
     <docker.registry.name>library</docker.registry.name>
     <!--harbor账号-->
     <docker.registry.username>itcast</docker.registry.username>
     <!--harbor密码-->
     <docker.registry.password>Qwert123</docker.registry.password>
 </properties>
编译配置插件配置
 <build>
     <resources>
         <resource>
             <directory>src/main/java</directory>
             <includes>
                 <include>**/*.xml</include>
             </includes>
         </resource>
         <resource>
             <directory>src/main/resources</directory>
             <filtering>true</filtering>
         </resource>
     </resources>
     <plugins>
 ​
         <plugin>
             <groupId>com.google.cloud.tools</groupId>
             <artifactId>jib-maven-plugin</artifactId>
             <version>2.8.0</version>
             <configuration>
                 <allowInsecureRegistries>true</allowInsecureRegistries>
                 <!--from节点用来设置镜像的基础镜像,相当于Docerkfile中的FROM关键字-->
                 <from>
                     <!--使用openjdk官方镜像,tag是:8-jdk-alpine,表示镜像的操作系统是alpine,装好了jdk8-->
                     <image>openjdk:8-jdk-alpine</image>
                 </from>
                 <to>
                     <!--镜像名称和tag,使用了mvn内置变量$project.version,表示当前工程的version-->
                     <image>$docker.registry.url/$docker.registry.name/$project.artifactId:$project.version
                     </image>
                     <tags>
                         <!--版本号-->
                         <tag>$project.version</tag>
                     </tags>
                     <!--harbor的认证信息-->
                     <auth>
                         <username>$docker.registry.username</username>
                         <password>$docker.registry.password</password>
                     </auth>
                 </to>
                 <!--容器相关的属性-->
                 <container>
 ​
                     <jvmFlags>
                         <!--一些启动参数-->
                         <jvmFlag>-Djava.security.edg=file:/dev/./urandom</jvmFlag>
                     </jvmFlags>
                     <!--挂载volume的配置-->
                     <volumes>
                         <volume>/tmp</volume>
                         <volume>/logs</volume>
                     </volumes>
                     <ports>
                         <!--暴漏端口号-->
                         <port>8080</port>
                     </ports>
                     <!--微服务的启动类-->
                     <mainClass>com.heima.test.Application</mainClass>
                     <format>OCI</format>
                     <!--使用该参数将镜像的创建时间与系统时间对其-->
                     <creationTime>USE_CURRENT_TIMESTAMP</creationTime>
                 </container>
             </configuration>
             <executions>
                 <!--执行打包配置-->
                 <execution>
                     <id>jib-maven-plugin</id>
                     <phase>package</phase>
                     <goals>
                         <goal>build</goal>
                     </goals>
                 </execution>
             </executions>
         </plugin>
         <!-- Docker maven plugin -->
     </plugins>
 </build>

执行构建

harbor仓库中查看

其他的微服务上传

微服务打包

仓库中查看镜像

harbor 测试

删除本地镜像
 docker rm -f learn-docker-storage
 docker rmi  192.168.64.153/library/learn-docker-storage:0.0.3

运行harbor 中的镜像

运行learn-docker-storage服务
 docker run -d \\
 -v /tmp/data/logs:/logs \\
 --name learn-docker-storage \\
 --network=learn-docker-network \\
 manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-storage:1.0-SNAPSHOT

 curl http://192.168.64.152:8080/userinfo/10001 | python -m json.tool

运行learn-docker-web服务
 docker run -d \\
 --name learn-docker-web \\
 --network=learn-docker-network \\
 manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-web:1.0-SNAPSHOT

运行learn-docker-gateway服务
 docker run -d \\
 -p 8888:8888 \\
 --name learn-docker-gateway \\
 --network=learn-docker-network \\
 manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-gateway:1.0-SNAPSHOT

查看nacos注册的微服务

访问测试微服务
 curl http://192.168.64.153:8888/employeapi/find/10001| python -m json.tool

以上是关于Docker 一键打包微服务的主要内容,如果未能解决你的问题,请参考以下文章

跟我学SpringCloud | 第十八篇:微服务 Docker 化之基础环境

Docker Compose 项目打包部署

步骤详解Docker一键部署微服务详细教程

自动化集成:Pipeline整合Docker容器

IDEA集成Docker插件实现项目打包镜像一键部署与Docker CA加密认证

微服务架构之「 容器技术 」