Docker也疯狂,微服务一键打包部署

打印 上一主题 下一主题

主题 786|帖子 786|积分 2358

微服务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,它直接集成到MavenGradle中
和传统的插件区别

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的共有配置
  1. <properties>
  2.    
  3.     <docker.registry.url>itcastharbor.com</docker.registry.url>
  4.    
  5.     <docker.registry.name>library</docker.registry.name>
  6.    
  7.     <docker.registry.username>itcast</docker.registry.username>
  8.    
  9.     <docker.registry.password>Qwert123</docker.registry.password>
  10. </properties>
复制代码
编译配置插件配置
  1. <build>
  2.     <resources>
  3.         <resource>
  4.             <directory>src/main/java</directory>
  5.             <includes>
  6.                 <include>**/*.xml</include>
  7.             </includes>
  8.         </resource>
  9.         <resource>
  10.             <directory>src/main/resources</directory>
  11.             <filtering>true</filtering>
  12.         </resource>
  13.     </resources>
  14.     <plugins>
  15.         <plugin>
  16.             <groupId>com.google.cloud.tools</groupId>
  17.             <artifactId>jib-maven-plugin</artifactId>
  18.             <version>2.8.0</version>
  19.             <configuration>
  20.                 <allowInsecureRegistries>true</allowInsecureRegistries>
  21.                
  22.                 <from>
  23.                     
  24.                     <image>openjdk:8-jdk-alpine</image>
  25.                 </from>
  26.                 <to>
  27.                     
  28.                     <image>${docker.registry.url}/${docker.registry.name}/${project.artifactId}:${project.version}
  29.                     </image>
  30.                     <tags>
  31.                         
  32.                         <tag>${project.version}</tag>
  33.                     </tags>
  34.                     
  35.                     <auth>
  36.                         <username>${docker.registry.username}</username>
  37.                         <password>${docker.registry.password}</password>
  38.                     </auth>
  39.                 </to>
  40.                
  41.                 <container>
  42.                     <jvmFlags>
  43.                         
  44.                         <jvmFlag>-Djava.security.edg=file:/dev/./urandom</jvmFlag>
  45.                     </jvmFlags>
  46.                     
  47.                     <volumes>
  48.                         <volume>/tmp</volume>
  49.                         <volume>/logs</volume>
  50.                     </volumes>
  51.                     <ports>
  52.                         
  53.                         <port>8080</port>
  54.                     </ports>
  55.                     
  56.                     <mainClass>com.heima.test.Application</mainClass>
  57.                     <format>OCI</format>
  58.                     
  59.                     <creationTime>USE_CURRENT_TIMESTAMP</creationTime>
  60.                 </container>
  61.             </configuration>
  62.             <executions>
  63.                
  64.                 <execution>
  65.                     <id>jib-maven-plugin</id>
  66.                     <phase>package</phase>
  67.                     <goals>
  68.                         <goal>build</goal>
  69.                     </goals>
  70.                 </execution>
  71.             </executions>
  72.         </plugin>
  73.         
  74.     </plugins>
  75. </build>
复制代码
执行构建

然后在项目根目录执行mvn clean compile jib:build就可以了

我们看到已经推送成功了
harbor仓库中查看

通过域名访问harbor,我们看我们的library里面的镜像仓库

点进去就可以看到我们刚刚推送的镜像

以及镜像的详细信息

其他的微服务上传

微服务打包

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

仓库中查看镜像

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

harbor 测试

删除本地镜像

可以通过docker rmi 镜像ID删除本地镜像
  1. docker rm -f learn-docker-storage
  2. docker rmi  192.168.64.153/library/learn-docker-storage:0.0.3
复制代码

运行harbor 中的镜像

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

运行learn-docker-storage服务

执行运行命令
  1. docker run -d \
  2. -v /tmp/data/logs:/logs \
  3. --name learn-docker-storage \
  4. --network=learn-docker-network \
  5. manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-storage:1.0-SNAPSHOT
复制代码
因为我们是基于内部网络访问 不需要暴漏接口了

访问微服务测试
  1. curl http://192.168.64.152:8080/userinfo/10001 | python -m json.tool
复制代码

运行learn-docker-web服务

执行运行命令
  1. docker run -d \
  2. --name learn-docker-web \
  3. --network=learn-docker-network \
  4. manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-web:1.0-SNAPSHOT
复制代码
该微服务也是内部服务不需要暴漏端口,并且没有配置日志输出所有不挂载日志路径

运行learn-docker-gateway服务

执行运行命令
  1. docker run -d \
  2. -p 8888:8888 \
  3. --name learn-docker-gateway \
  4. --network=learn-docker-network \
  5. manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-gateway:1.0-SNAPSHOT
复制代码
因为网关对外需要暴漏端口,所有需要开放8888端口

查看nacos注册的微服务

我们发现我们的三个服务都已经注册进去了

访问测试微服务

因为我们存储服务的8003端口没有暴漏出来,无法访问,我们需要通过网关进行访问
  1. curl http://192.168.64.153:8888/employeapi/find/10001| python -m json.tool
复制代码

本文由传智教育博学谷 - 狂野架构师教研团队发布
如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力
转载请注明出处!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表