美文网首页
Docker也疯狂,微服务一键打包部署

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

作者: 博学谷狂野架构师 | 来源:发表于2022-08-24 14:22 被阅读0次

    微服务Docker打包

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

        我们项目中用到了多个微服务,我们上一节课程打包用的是手动上传,但是很麻烦,有没有更好的方式呢,是有的,我们可以直接通过idea将我们的微服务打包成Docker镜像,并推送到Docker仓库中
    
        这里我们采用[jib-maven-plugin](https://github.com/GoogleContainerTools/jib/tree/master/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](https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin)和[Gradle中](https://github.com/GoogleContainerTools/jib/tree/master/jib-gradle-plugin)。
    

    和传统的插件区别

    Docker 构建流程

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

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

    准备工作

    设置Horbor用户权限

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

    file

    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就可以了

    file

    我们看到已经推送成功了

    harbor仓库中查看

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

    file

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

    file

    以及镜像的详细信息

    file

    其他的微服务上传

    微服务打包

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

    file
    仓库中查看镜像

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

    file

    harbor 测试

    删除本地镜像

    可以通过docker rmi 镜像ID删除本地镜像

    docker rm -f learn-docker-storage
    docker rmi  192.168.64.153/library/learn-docker-storage:0.0.3
    
    file
    运行harbor 中的镜像

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

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

    因为我们是基于内部网络访问 不需要暴漏接口了

    file

    访问微服务测试

    curl http://192.168.64.152:8080/userinfo/10001 | python -m json.tool
    
    file
    运行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
    

    该微服务也是内部服务不需要暴漏端口,并且没有配置日志输出所有不挂载日志路径

    file
    运行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端口

    file
    查看nacos注册的微服务

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

    file
    访问测试微服务

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

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

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

    相关文章

      网友评论

          本文标题:Docker也疯狂,微服务一键打包部署

          本文链接:https://www.haomeiwen.com/subject/urqogrtx.html