首页IT科技docker部署微服务集群(微服务Docker打包)

docker部署微服务集群(微服务Docker打包)

时间2025-06-18 00:18:54分类IT科技浏览4116
导读:微服务Docker打包...

微服务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

本文由传智教育博学谷教研团队发布            。

如果本文对您有帮助    ,欢迎关注和点赞;如果您有任何建议也可留言评论或私信                   ,您的支持是我坚持创作的动力    。

转载请注明出处!

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
grpc_cpp_plugin 找不到(grpconv命令 – 开启群组的投影密码) 作文生成软件叫啥来着(神奇的自动作文生成器,让写作变得轻松愉快)