微服务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-storagedocker 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
本文由传智教育博学谷 - 狂野架构师教研团队公布,转载请注明出处!
如果本文对您有帮忙,欢送关注和点赞;如果您有任何倡议也可留言评论或私信,您的反对是我保持创作的能源