关于java:Docker也疯狂微服务一键打包部署

18次阅读

共计 4122 个字符,预计需要花费 11 分钟才能阅读完成。

微服务 Docker 打包

当初的微服务时代,你的代码没个微服务、分布式人家都会感觉低端,当然!对于咱们开发人员来说,把握这些技术意味着涨薪。

​ 咱们我的项目中用到了多个微服务,咱们上一节课程打包用的是手动上传,然而很麻烦,有没有更好的形式呢,是有的,咱们能够间接通过 idea 将咱们的微服务打包成 Docker 镜像,并推送到 Docker 仓库中

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

什么是 Jib

Jib 是 Google 开发的能够间接构建 Java 利用的 Docker 和 OCI 镜像的类库,以 Maven 和 Gradle 插件模式提供。

​ Jib 带来的是,它容许您通过简略地将插件增加到您抉择的构建工具(Maven 或 Gradle)来创立容器,没有额定的文件,只需几行配置,它解决将应用程序打包到容器映像的所有步骤。

​ Jib 是来自 Google 的开源 Java 容器,它容许 Java 开发人员应用他们所晓得的 Java 工具构建容器,它不须要您编写 Dockerfile 或装置了 docker,它间接集成到 Maven 和 Gradle 中。

和传统的插件区别

Docker 构建流程

在“传统”Java 到 Docker 映像构建流程中,咱们须要装置 Dockerfile 和 docker 守护过程,在 Jib 构建流程中,您只须要插件我的项目的构建文件。

Jib 构建流程

​ 通过 Jib,Java 开发者能够应用他们相熟的 Java 工具来构建容器。Jib 是一个疾速而简略的容器镜像构建工具,它负责解决将应用程序打包到容器镜像中所需的所有步骤。它不须要你编写 Dockerfile 或装置 Docker,而且能够间接集成到 Maven 和 Gradle 中 —— 只须要将插件增加到构建中,就能够立刻将 Java 应用程序容器化。

筹备工作

设置 Horbor 用户权限

咱们要将 idea 的微服务推送到 Harbor,并且用 itcast 的用户,所有咱们要设置咱们的 itcast 用户是开发者

pom 文件配置 jib

对于应用程序的根本本地存储镜像,请在 pom.xml 以下内容中配置 jib-maven-plugin

公共属性配置

在 properties 中配置 harbor 的共有配置

<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>

执行构建

而后在我的项目根目录执行 mvn clean compile jib:build 就能够了

咱们看到曾经推送胜利了

harbor 仓库中查看

通过域名拜访 harbor,咱们看咱们的 library 外面的镜像仓库

点进去就能够看到咱们刚刚推送的镜像

以及镜像的详细信息

其余的微服务上传

微服务打包

这里咱们也将其余微服务上传到仓库,步骤同上

仓库中查看镜像

在咱们的仓库中查看镜像,咱们看到镜像都曾经上传到仓库中了

harbor 测试

删除本地镜像

能够通过 docker rmi 镜像 ID 删除本地镜像

docker rm -f learn-docker-storage
docker rmi  192.168.64.153/library/learn-docker-storage:0.0.3

运行 harbor 中的镜像

咱们把咱们的所有微服务都上传到了仓库中,咱们以一个残缺的我的项目运行 docker

运行 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

因为网关对外须要暴漏端口,所有须要凋谢 8888 端口

查看 nacos 注册的微服务

咱们发现咱们的三个服务都曾经注册进去了

拜访测试微服务

因为咱们存储服务的 8003 端口没有暴漏出来,无法访问,咱们须要通过网关进行拜访

curl http://192.168.64.153:8888/employeapi/find/10001| python -m json.tool

本文由传智教育博学谷 – 狂野架构师教研团队公布,转载请注明出处!

如果本文对您有帮忙,欢送关注和点赞;如果您有任何倡议也可留言评论或私信,您的反对是我保持创作的能源

正文完
 0