java项目打包docker镜像的几种方式

目录

前言

一、背景环境

二、打包方式(三种)

1. 在idea环境里打包方式一

1.1、第一步(环境配置)

1.2、第二步(代码配置)

1.3、第三步(启动)

2. 在idea环境里打包方式二

1.1、第一步(环境配置)

1.2、第二步(代码配置)

1.3、第三步(DockerFile配置)

1.3、第四步(启动)

3. 基本打包方式

三、启动服务

四、总结


前言

本文章记录了 spring boot项目 打包成docker镜像到 远程服务器上并启动服务 总共三种方式,对于简单应用推荐第一种,以及相关过程中相关问题的解决方案


一、背景环境

1、本示例项目是一个基础的springboot项目,提供的是 eureka服务

2、在idea里能正常启动

3、服务器是阿里云服务

4、代码地址 https://gitee.com/patronli/eureka

二、打包方式(三种)

1. 在idea环境里打包方式一

1.1、第一步(环境配置)

先在docker服务所在的服务器 编辑docker文件

1、编辑 vim /usr/lib/systemd/system/docker.service
       ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

2、保存后 刷新docker 
    systemctl daemon-reload  
    systemctl start docker  

3、测试 
    输入netstat -anp|grep 2375 会显示docker正在监听2375端口
    输入curl 127.0.0.1:2375/info  如果有显示信息,则表明已经生效

效果如下

1.2、第二步(代码配置)

<build>
<plugins>
    <!--启动入口、添加maven依赖-->
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <!-- 指定该Main Class为全局的唯一入口 -->
            <mainClass>com.xuanqing.controller.EurekaApplication</mainClass>
            <layout>ZIP</layout>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                </goals>
            </execution>
        </executions>
    </plugin>
    <!-- 打包到 docker 服务-->
    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <configuration>
            <imageName>${project.name}:${project.version}</imageName>
            <baseImage>java</baseImage>
            <entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
            <dockerHost>http://ip:2375</dockerHost> <!--docker 服务地址-->
            <resources>
                <resource>
                    <targetPath>/</targetPath>
                    <directory>${project.build.directory}</directory>
                    <include>${project.build.finalName}.jar</include>
                </resource>
            </resources>
        </configuration>
    </plugin>
</plugins>
</build>

1.3、第三步(启动)

输入mvn clean package docker:build -DskipTests,如下所示

此时就可以在远程服务器上看到相关镜像,如下所示

启动 相关的 知识请看 第三步

2. 在idea环境里打包方式二

1.1、第一步(环境配置)

先在docker服务所在的服务器 编辑docker文件

1、编辑 vim /usr/lib/systemd/system/docker.service
       ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

2、保存后 刷新docker 
    systemctl daemon-reload  
    systemctl start docker  

3、测试 
    输入netstat -anp|grep 2375 会显示docker正在监听2375端口
    输入curl 127.0.0.1:2375/info  如果有显示信息,则表明已经生效

效果如下

1.2、第二步(代码配置)

 这个方式需要配置一个DockerFile文件,如下图示例

具体pom.xml的配置

<build>
<plugins>
    <!--启动入口、添加maven依赖-->
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <!-- 指定该Main Class为全局的唯一入口 -->
            <mainClass>com.xuanqing.controller.EurekaApplication</mainClass>
            <layout>ZIP</layout>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                </goals>
            </execution>
        </executions>
    </plugin>
    <!-- 打包到 docker 服务-->
    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <configuration>
            <imageName>${project.name}:${project.version}</imageName>
            <!--DockerFile目录,当前为根目录-->
            <dockerDirectory>${project.basedir}</dockerDirectory>
            <dockerHost>http://ip:2375</dockerHost>
            <resources>
                <resource>
                    <targetPath>/</targetPath>
                    <directory>${project.build.directory}</directory>
                    <include>${project.build.finalName}.jar</include>
                </resource>
            </resources>
        </configuration>
    </plugin>
</plugins>
</build>

1.3、第三步(DockerFile配置)

# Docker image for springboot file run
# VERSION 0.0.1
# Author: patronli
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER patronli <keguan_li@163.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为eureka.jar
ADD eureka-1.0-SNAPSHOT.jar eureka.jar  #前者为打包的文件 后者为修改后的自定义名字
# 运行jar包
RUN bash -c 'touch /eureka.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eureka.jar"]

1.3、第四步(启动)

输入mvn clean package docker:build -DskipTests,如下所示

此时就可以在远程服务器上看到相关镜像,如下所示

启动 相关的 知识请看 第三步

3. 基本打包方式

自己把项目打包成jar,编写DockerFile文佳上传到 服务器,如下图所示

打包镜像 命令 docker build -t xxx .   

xxx是镜像标签信息 自定义,注意xxx后有一个 .

启动 相关的 知识请看 第三步

三、启动服务

 先查看镜像 docker images

 查看是否启动 docker ps

 启动之后 在docker ps里面没看到的话 用docker ps -a 看

 启动 docker run -d -p 1001:1001 --name eureka 410e092b53e0 

(1001端口号我这里偏好 原本项目的端口 ) eureka为自定义的启动的名称 有意义就好  410e092b53e0 为镜像的镜像id

四、总结

启动镜像如果 有返回id,但是执行docker ps 并没有看到服务,说明启动有问题,执行 docker logs xxx 查看问题

常见问题如下

no main manifest attribute, in /eureka-1.0-SNAPSHOT.jar 对于这个问题,需要增加配置
 <!--启动入口、添加maven依赖-->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- 指定该Main Class为全局的唯一入口 -->
                <mainClass>com.xuanqing.controller.EurekaApplication</mainClass>
                <layout>ZIP</layout>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                    </goals>
                </execution>
            </executions>
        </plugin>
  1. 查看日志 docker logs xxx,xxx是启动时返回的id
  2. 删除镜像 docker rmi IMAGE ID,如果删不掉 需要执行 docker ps -a 查看未启动成功的镜像 使用docker rm CONTAINER ID

  • 11
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要创建一个Java环境的Docker镜像,您可以按照以下步骤进行操作: 1. 首先,您需要准备一个基础的CentOS镜像。您可以使用已经制作好的基础镜像,比如CentOS 7。[1] 2. 在CentOS 7的环境下,创建一个名为"jdk1.8"的文件夹,并进入该文件夹。 3. 在"jdk1.8"文件夹中创建一个名为"Dockerfile"的文件,并在文件中添加以下构建命令: FROM centos:7.9 ADD jdk-8u201-linux-x64.tar.gz /usr/local/src/ RUN ln -s /usr/local/src/jdk1.8.0_201/ /usr/local/jdk ADD profile /etc/profile ENV JAVA_HOME /usr/local/jdk ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/ ENV PATH $PATH:$JAVA_HOME/bin RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone 这个Dockerfile文件将会安装JDK 8,并设置相关的环境变量。 4. 将"jdk-8u201-linux-x64.tar.gz"文件上传到"jdk1.8"文件夹下。 5. 复制/etc/profile文件到当前目录。使用以下命令:cp /etc/profile ./ 6. 在复制的profile文件的末尾添加以下内容,即JDK的环境变量: export JAVA_HOME=/usr/local/jdk export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 7. 查看当前目录下的文件,确保文件已经准备好。使用以下命令:ls 8. 最后,根据您的需求进行Docker镜像构建和发布。 请注意,上述步骤仅提供了一个例子,您可以根据实际情况进行调整和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [使用Dockerfile制作java运行环境的镜像](https://blog.csdn.net/weixin_44094108/article/details/126175432)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [java项目打包docker镜像几种方式](https://blog.csdn.net/keguan_li/article/details/119735070)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值