IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot应用打包生成Docker镜像 -> 正文阅读

[Java知识库]SpringBoot应用打包生成Docker镜像

概述

采用dockerfile-maven-plugin插件配合编写Dockerfile文件,生成docker镜像至本地/远程Docker服务中,所以需要提前安装好docker服务

实现过程

  • 在springboot项目的pom文件中引入dockerfile-maven-plugin插件
		<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.13</version>
                <executions>
                    <execution>
                        <id>install-after</id>
                        <!--goal(build) 默认绑定在package阶段,会导致maven-install-plugin执行报错,故调整至install阶段-->
                        <phase>install</phase>
                        <goals>
                            <!--将镜像推送到远程docker服务器-->
                            <goal>build</goal>
                            <!--将远程docker服务器的镜像push到镜像仓库-->
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!--默认推送到本地的docker(windows本地docker的交互端口为2375-->
                    <repository>${project.artifactId}</repository>
                    <tag>latest</tag>
                    <buildArgs>
                        <APP_Path>/opt/app/${project.artifactId}</APP_Path>
                        <APP_Name>${project.build.finalName}</APP_Name>
                    </buildArgs>
                </configuration>
            </plugin>
  1. repository:镜像的名称
  2. tag:镜像的tag
  3. buildArgs:向Dockerfile中传递参数值

配置参考:https://github.com/spotify/dockerfile-maven

  • 编写Dockerfile
FROM williamyeh/java8:latest

# pom中buildArgs传递过来的参数
ARG APP_Path
ARG APP_Name

# docker run -e传递过来的参数
ENV Java_Memery_Options=""
ENV Spring_Profiles_Active="dev"
ENV Spring_Config_Location="config/"
ENV Dloader_Path="lib"
ENV Jar_File=${APP_Path}/${APP_Name}.jar

VOLUME ${APP_Path}/config
VOLUME ${APP_Path}/logs

COPY target/${APP_Name}.jar ${APP_Path}/${APP_Name}.jar
COPY src/main/resources/application.yaml ${APP_Path}/config/application.yaml
COPY src/main/resources/application-dev.yaml ${APP_Path}/config/application-dev.yaml
COPY src/main/resources/license-config.properties ${APP_Path}/config/license-config.properties
COPY src/main/resources/logback-custom.xml ${APP_Path}/config/logback-custom.xml
COPY lib/bcprov-jdk15on-1.67.jar ${APP_Path}/lib/bcprov-jdk15on-1.67.jar

WORKDIR ${APP_Path}

ENTRYPOINT ["sh","-c","java -jar $Java_Memery_Options -Dspring.profiles.active=$Spring_Profiles_Active -Dspring.config.location=$Spring_Config_Location -Dloader.path=$Dloader_Path $Jar_File"]
  • 开启docker服务的远程链接提供外部访问
  • linux系统

    1.修改docker.service中ExecStart,在后面添加 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

    vi /lib/systemd/system/docker.service
    # centos7
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
    # centos7以下
    ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
    

    2.通知docker服务做出的修改

    systemctl daemon-reload
    

    3.重启docker服务

    service docker restart
    

    4.开放防火墙2375端口

    参考:https://blog.csdn.net/longzhanpeng/article/details/82217398

  • windows系统

    参考:https://zhuanlan.zhihu.com/p/148887874

  • 配置Docker服务信息

默认情况下,dockerfile-maven-plugin会调用本地的2375端口,如果需要构建到远程docker服务则需要配置环境变量

DOCKER_HOST
tcp://IP:2375
  • 打包生成镜像

因为dockerfile-maven-plugin的插件目标(build)绑定在install阶段,所以在meven上执行install便会在相应的服务上生成docker镜像

  • 推送镜像到镜像仓库DockerHub/私有仓库

暂未研究

https://www.jianshu.com/p/3929099711ec

问题记录

  1. shell执行报错 Syntax error: “(” unexpected

https://blog.csdn.net/Panda_813/article/details/88634181

  1. CMD和Entrypoint命令使用变量的用法

https://www.cnblogs.com/sanduzxcvbnm/p/15830845.html

  1. 如何将ARG值传递给ENTRYPOINT

https://qa.1r1g.com/sf/ask/2402699421/#

  1. 集成dockerfile-maven-plugin插件后maven-install-plugin打包报错

https://www.cnblogs.com/StarkBrothers/p/11986666.html

启动镜像脚本记录

docker run -itd --name xy-im-preload --network=host --restart=always --privileged=true -v /opt/app/xy-im-preload:/opt/app/xy-im-preload xy-im-preload:latest /bin/bash

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:09:53  更:2022-04-09 18:12:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:42:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码