【Docker】使用docker-maven-plugin插件构建发布推镜像到私有仓库

这篇具有很好参考价值的文章主要介绍了【Docker】使用docker-maven-plugin插件构建发布推镜像到私有仓库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


本文描述了在Spring Boot项目中通过docker-maven-plugin插件把项目推送到私有docker仓库中,随后拉取仓库中的项目用docker run运行项目。作者自行构建,质量有保证。

1. 用docker-maven-plugin插件推送项目到私服docker

1.1. 构建镜像 v1.0

1、要想使用docker-maven-plugin,需要在pom.xml中添加该插件;

<build>
     <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.33.0</version>
            <configuration>
                <!-- Docker 推送镜像仓库地址(由于是推送到本地的docker镜像仓库) -->
                <pushRegistry>http://localhost:5000</pushRegistry>
                <images>
                    <image>
                        <!--由于推送到私有镜像仓库,镜像名需要添加仓库地址(相当于告诉去哪里拉取镜像)-->
                        <name>localhost:5000/fire-tiny/${project.name}:${project.version}</name>
                        <!--定义镜像构建行为-->
                        <build>
                            <!--定义基础镜像-->
                            <from>java:8</from>
                            <args>
                                <!-- jar的名称,一般配置为gav的av -->
                                <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                            </args>
                            <!--定义哪些文件拷贝到容器中-->
                            <assembly>
                                <!--定义拷贝到容器的目录-->
                                <targetDir>/</targetDir>
                                <!--只拷贝生成的jar包-->
                                <descriptorRef>artifact</descriptorRef>
                            </assembly>
                            <!--定义容器启动命令-->
                            <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
                            <!--定义维护者-->
                            <maintainer>firefish</maintainer>
                            <!--使用Dockerfile构建时打开-->
                            <!--<dockerFileDir>${project.basedir}</dockerFileDir>-->
                        </build>
                        <!--定义容器启动行为-->
                        <run>
                            <!--设置容器名,可采用通配符(一般配置为gav的a)-->
                            <containerNamePattern>${project.artifactId}</containerNamePattern>
                            <!--设置端口映射-->
                            <ports>
                                <port>8080:8080</port>
                            </ports>
                            <!--设置容器间连接(即容器需要连接mysql,需要外部环境提供mysql连接)-->
                            <links>
                                <link>mysql:db</link>
                            </links>
                        </run>
                    </image>
                </images>
            </configuration>
        </plugin>
    </plugins>
</build>

注:注意下db:3306

spring:
  datasource:
    url: jdbc:mysql://db:3306/fire?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: root

2、我们构建镜像之前需要先将项目打包,然后再构建,否则会出错,直接使用如下命令即可

mvn package docker:build

3、打包完成后就可以在我们的本地上看到这个镜像了;

# 本地运行
[root@linux-local work]# docker images
REPOSITORY                                             TAG              IMAGE ID       CREATED             SIZE
localhost:5000/fire-tiny/fire-tiny-fabric              0.0.1-SNAPSHOT   9b7cf9c38c5d   About an hour ago   680MB

4、当然我们也可以设置使用package命令时直接打包镜像,修改pom.xml,在<plugin>节点下添加<executions>配置即可;

是额外添加的;不建立这么做在需要的时候在构建docker镜像就好了

<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.33.0</version>
    <executions>
        <!--如果想在项目打包时构建镜像添加-->
        <execution>
            <id>build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
</plugin>

1.2. 构建镜像 v2.0

构建镜像 v2.0 是对 v1.0 的升级,原来的缺点有构建docker镜像的步骤和项目的pom代码耦合严重,不利于后期修改且构建过程导致pom文件臃肿肥大。针对这些缺点 v2.0 采用 DockerFile方式把docker镜像的构建步骤和Spring Boot项目的pom文件分离。具体步骤如下:

1、新建DockerFile文件

在项目下新建DockerFile文件,内容自定义,参考内容如下:

# 该镜像需要依赖的基础镜像
FROM java:8
# 拷贝target下的文件到容器中
ARG JAR_FILE
ADD target/${JAR_FILE} /
# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/fire-tiny-fabric-0.0.1-SNAPSHOT.jar"]
# 指定维护者的名字
MAINTAINER mike

2、修改pom文件

构建docker镜像的过程现在只有 <dockerFileDir>${project.basedir}</dockerFileDir> 这一行,非常简洁。

<build>
     <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.33.0</version>
            <configuration>
                <!-- Docker 推送镜像仓库地址(由于是推送到本地的docker镜像仓库) -->
                <pushRegistry>http://localhost:5000</pushRegistry>
                <images>
                    <image>
                        <!--由于推送到私有镜像仓库,镜像名需要添加仓库地址(这个相当于告诉别人拉取镜像的时候去哪里拉取)-->
                        <name>localhost:5000/fire-tiny/${project.name}:${project.version}</name>
                        <!--定义镜像构建行为-->
                        <build>
                            <!--使用Dockerfile构建时打开-->
                            <dockerFileDir>${project.basedir}</dockerFileDir>
                        </build>
                    </image>
                </images>
            </configuration>
        </plugin>
    </plugins>
</build>

3、打包、构建、查看镜像

3步一套带走,比原来简洁很多看起来也舒服。

# 打包构建
mvn clean package docker:build
# 查看本地镜像
docker images

1.3. 推送到镜像仓库

1、指定build和push推送到私有仓库

【Docker】使用docker-maven-plugin插件构建发布推镜像到私有仓库,Docker,docker,容器

2、登录私有仓库地址:http://localhost:8280/,查看到刚推送的镜像

【Docker】使用docker-maven-plugin插件构建发布推镜像到私有仓库,Docker,docker,容器

2. 拉取私服docker镜像运行

把镜像推送到私有仓库后,就需要拉取镜像到本地并使用镜像啦。

1、拉取镜像到本地

因为我们是本地构建的镜像再推送到私有仓库的,需要先把原先构建的镜像删除,再去私有仓库拉取镜像

docker rmi "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"
docker pull "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"

2、运行容器

docker run --rm -d --name fire-tiny-fabric -p 8080:8080 "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"

3、访问下容器其中的一个接口

curl -X GET --header 'Accept: application/json' 'http://localhost:8080/brand/list?pageNum=1&pageSize=3'

但是比较遗憾,不出意外查看docker日志会显示数据库相关的报错。

【Docker】使用docker-maven-plugin插件构建发布推镜像到私有仓库,Docker,docker,容器

这是因为我们在前面步骤中构建fire-tiny-fabric项目的镜像时指定了是需要依赖mysql数据库的但是我们在docker run中没有指定数据库,所以会出现数据库连接方面的错误

4、重新运行容器

  • 如果存在使用docker构建的数据库,那通过–link指定mysql数据库:

    docker run --rm -d --name fire-tiny-fabric -p 8080:8080 \
    --link mysql:db \
    "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"
    

    注:mysql:db 中的mysql是容器的名称(–name),后面的db是构建fire-tiny-fabric时指定变量。–link的原理就是在/etc/hosts里面添加了一个alias的名称。

  • 如果是本地自己构建的数据库,那指定ip地址端口

    我们在项目中连接数据库用的是db作为域名,所以只要给容器添加上一个db指向主机ip地址的域名映射就可以

    spring:
      datasource:
        url: jdbc:mysql://db:3306/fire?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
        username: root
        password: root
    
    # 域名db与主机ip的映射
    docker run --rm -d --name fire-tiny-fabric -p 8080:8080 \
    --add-host=db:192.168.1.6 \
    "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"
    
# 测试接口
curl -X GET --header 'Accept: application/json' 'http://localhost:8080/brand/list?pageNum=1&pageSize=3'

【Docker】使用docker-maven-plugin插件构建发布推镜像到私有仓库,Docker,docker,容器

3. 参考资料

我的文章:《如何查看一个Docker镜像有哪些版本.md》

我的文章:《Docker设置国内镜像源.md》

我的文章:《Docker快速入门实用教程.md》

我的文章:《Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常见服务.md》

我的文章:《Docker安装Nacos服务.md》

我的文章:《如何修改Docker中的文件.md》

我的文章:《Docker容器间的连接或通信方式.md》

我的文章:《Docker安装的MySQL如何持久化数据库数据.md》

我的文章:《制作Docker私有仓库.md》

我的文章:《使用docker-maven-plugin插件构建发布推镜像到私有仓库.md》

我的文章:《解决Docker安装Elasticsearch后访问9200端口失败.md》


传送门:保姆式Spring5源码解析

欢迎与作者一起交流技术和工作生活

联系作者文章来源地址https://www.toymoban.com/news/detail-615297.html

到了这里,关于【Docker】使用docker-maven-plugin插件构建发布推镜像到私有仓库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot配置docker-maven-plugin实现构建与推送镜像(Dockerfile)

    0、前提:docker、 maven、java均已安装,docker 镜像私服均已设置网络也开通 本文基于Docker进行构建,也可以指定构建信息到 POM 中构建,大家自行搜索 1、首先是一些网络和docker相关配置的打开 2、针对maven 的 setting.xml 文件的修改 3、项目的pom文件,引入docker maven plugin 及相关配

    2024年02月07日
    浏览(31)
  • docker-maven-plugin直接把镜像推到私有仓库

    接着上篇 推送到本地docker 我们已经把服务做成镜像推到docker,也可以通过docker login 私有地址,去push。麻烦 直接上代码  都得对起来,要不然push失败报 toomanyrequests: too many failed login attempts for username or IP address 加上,这个如果后期有其他仓库,再建个server即可 其实也可以做

    2024年02月11日
    浏览(25)
  • idea打包docker镜像时出现“Failed to execute goal com.spotify:docker-maven-plugin:1.2.2:build (build-image) “

     问题解决参考地址 解决方法1:先看第一张图片,一开始我也是不知道什么原因导致的,后来看到build时获取的ProgressMessage信息都是空的,然后一点点排查,然后发现是镜像命名的问题的,镜像命名不允许使用驼峰命令。   解决方法2:可能是docker 上没有内存了,也会报错。

    2024年02月11日
    浏览(33)
  • Idea使用Docker插件实现maven打包自动构建镜像

    Docker 开启TCP 服务 改写以下内容 重启服务 此时docker已经开放了2375端口,使用外部主机访问 http://docker:2375/info IDEA 集成Docker 安装Docker 插件 配置docker服务地址 点击view-services,打开docker的操作面板 双击docker01可以看到此docker服务下镜像和容器 右击docker镜像,可以创建新的容器,

    2024年02月10日
    浏览(31)
  • 构建SpringBoot工程时找不到插件“spring-boot-maven-plugin”

    目录 一、找不到插件“spring-boot-maven-plugin” 二、再次启动时,又发现报错         Unable to find a single main class from the following candidates [com.itheima.Application, com.example.springboot01.Springboot01Application]上面报错的意思是,有多个App类,它不知用哪个  三、把该插件打包后,在jar包的

    2024年02月07日
    浏览(42)
  • 使用Maven插件将项目部署到Docker

    如图: 按需引入即可 6.1、执行install 等待执行结束后,去服务器查看镜像 docker images ,可以看到已经生成好的镜像 6.2、使用自定义网络 生产环境因为不止单独一个应用,所以尽量使用自定义网络,来保证各个容器间可以通过容器名来访问,保证数据互通 6.2、运行容器并测试

    2024年02月03日
    浏览(22)
  • Docker+nexus构建自己的制品库之(二)Maven仓库的使用

    在没有开始正文之前,先简单介绍一下nexus是如何存储各种类型的数据库的。 右边的“Blob Stores”菜单功能,可以为维护所有的Blob Store.下图就是创建“File”类型的Blob Store的菜单界面。 Blob Stores是Nexus中的一个关键组件,用于存储管理各种类型的二进制文件,包括但不限于构

    2024年04月09日
    浏览(32)
  • IDEA中使用Docker插件构建镜像并推送至私服Harbor

    默认的dokcer是不支持远程访问的,需要加点配置,开启Docker的远程访问 确定docker配置文件位置在:/etc/systemd/system/docker.service 然后编辑修改docker配置文件: 找到包含ExecStart的这行,添加如下内容: 其中,2375端口为docker远程服务端口,包含了docker可视化工具portainer,以及远程

    2024年02月11日
    浏览(29)
  • 【Maven】SpringBoot项目使用maven-assembly-plugin插件多环境打包

    1.创建SpringBoot项目并在pom.xml文件中添加maven-assembly-plugin配置 2.创建 在src/main/assembly目录下创建assembly.xml文件 3.在src/main/bin创建在linux环境启动jar包的脚本 4.配置application.yml文件 5.启动项目 6.打包 7.打包后的目录结构 8.上传到linux服务器并启动jar包 9.调用接口测试 10.源码地址

    2024年02月12日
    浏览(34)
  • 【SpringBoot】Maven 版本管理与 flatten-maven-plugin 插件的使用及分析

    IntelliJ IDEA 2021.3 JDK 1.8.0_301 Apache Maven 3.8.1 org.codehaus.mojo:versions-maven-plugin 1.2.7 https://www.mojohaus.org/flatten-maven-plugin/ 自 Maven 3.5.0-beta-1 开始,可以使用 ${revision}, ${sha1} and/or ${changelist} 这样的变量作为版本占位符。 像这样: 或者像这样: 可以使用这样的命令: 缺点: Install / D

    2024年02月12日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包