前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud 实战|SpringCloud 实现docker 镜像部署-提升项目的生产力

SpringCloud 实战|SpringCloud 实现docker 镜像部署-提升项目的生产力

作者头像
AI码师
发布2022-09-19 11:48:14
4600
发布2022-09-19 11:48:14
举报

本地仓库配置

安装本地仓库

代码语言:javascript
复制
docker run -itd -v /home/registry:/var/lib/registry -p 5000:5000 --restart=always --privileged=true --name registry registry:latest

配置私有仓库

代码语言:javascript
复制
vim /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.64.6:5000"]
}
systemctl daemon-reload
systemctl restart docker

http://192.168.64.6:5000/v2/_catalog

开启docker 远程连接

代码语言:javascript
复制
vim /lib/systemd/system/docker.service

# 修改ExecStart为:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H 0.0.0.0:2375

配置项目

定义变量

在父级项目的pom->properties 添加如下配置 docker.host:docker安装的主机ip docker.registry.repository:上面搭建的本地仓库主机ip+端口号 docker.maven.plugin.version:插件版本

代码语言:javascript
复制
  <docker.host>http://192.168.64.2:2375</docker.host>
  <docker.registry.repository>192.168.64.2:5000</docker.registry.repository>
  <docker.maven.plugin.version>1.0.0</docker.maven.plugin.version>

添加编译插件

在父级项目的pom->build->pluginManagement->plugins添加如下配置

代码语言:javascript
复制
     <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>${docker.maven.plugin.version}</version>
                    <executions>
                        <execution>
                            <id>build-image</id>
                            <phase>package</phase>
                            <goals>
                                <goal>build</goal>
                                <goal>push</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <imageName>${docker.registry.repository}/${project.artifactId}:${project.version}</imageName>
                        <dockerHost>${docker.host}</dockerHost>
                        <baseImage>java:8</baseImage>
                        <entryPoint>["java", "-jar","-Dspring.profiles.active=prod","/${project.build.finalName}.jar"]
                        </entryPoint>
                        <resources>
                            <resource>
                                <targetPath>/</targetPath>
                                <directory>${project.build.directory}</directory>
                                <include>${project.build.finalName}.jar</include>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>

完整配置

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ams</groupId>
    <artifactId>ams-cloud</artifactId>
    <version>1.0.0</version>
    <modules>
        <module>ams-auth</module>
        <module>ams-gateway</module>
        <module>ams-common</module>
        <module>ams-admin</module>
        <module>ams-demo</module>
    </modules>
    <packaging>pom</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <spring-boot.version>2.5.4</spring-boot.version>
        <spring-cloud.version>2020.0.3</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
        <ams.version>1.0.0</ams.version>
        <hutool.version>5.5.8</hutool.version>
        <mysql.version>8.0.19</mysql.version>
        <druid.version>1.2.4</druid.version>
        <docker.host>http://192.168.64.2:2375</docker.host>
        <docker.registry.repository>192.168.64.2:5000</docker.registry.repository>
        <docker.maven.plugin.version>1.0.0</docker.maven.plugin.version>
        <dockerfile.maven.version>1.3.7</dockerfile.maven.version>
        <mybatis-plus.version>3.4.3</mybatis-plus.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>${hutool.version}</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <!--Spring Cloud 相关依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--Spring Cloud & Alibaba 相关依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>${docker.maven.plugin.version}</version>
                    <executions>
                        <execution>
                            <id>build-image</id>
                            <phase>package</phase>
                            <goals>
                                <goal>build</goal>
                                <goal>push</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <imageName>${docker.registry.repository}/${project.artifactId}:${project.version}</imageName>
                        <dockerHost>${docker.host}</dockerHost>
                        <baseImage>java:8</baseImage>
                        <entryPoint>["java", "-jar","-Dspring.profiles.active=prod","/${project.build.finalName}.jar"]
                        </entryPoint>
                        <resources>
                            <resource>
                                <targetPath>/</targetPath>
                                <directory>${project.build.directory}</directory>
                                <include>${project.build.finalName}.jar</include>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

添加打包方式到每个子模块中

将以下加入到每个子模块的pom中

代码语言:javascript
复制
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

打包验证

  • 1.执行package
  • 2.完成推送
  • 3.打开浏览器访问 ttp://192.168.64.6:5000/v2/_catalog
  • 4.如果返回了我们项目的镜像,则说明docker打包成功
  • 5.在docker 主机上 执行命令 docker run 192.168.64.2:5000/ams-gateway(以网关作为验证)
  • 6.如果执行成功,说明镜像有效

docker 常见错误解决

错误1

rquest to {}->unix://localhost:80: No such file or directory 解决方案:1.确认imageName 是否包含仓库地址(需要包含)

关注公众号领取2021最新面试题一套和项目源码

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乐哥聊编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本地仓库配置
    • 安装本地仓库
      • 配置私有仓库
        • 开启docker 远程连接
        • 配置项目
          • 定义变量
            • 添加编译插件
              • 完整配置
                • 添加打包方式到每个子模块中
                • 打包验证
                • docker 常见错误解决
                  • 错误1
                  相关产品与服务
                  容器镜像服务
                  容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档