使用IDEA打包Spring Boot项目为镜像到云服务器

116 阅读2分钟

一、创建Dockerfile文件

存放路径为/src/main/resources/docker,可自行修改pom文件中插件的配置修改Dockerfile文件目录

# 基础镜像  
FROM openjdk:8-jre  
#维护者信息  
MAINTAINER coder  
# 复制打包完成后的jar文件到/home目录下  
ADD exam.jar /home/app.jar  
# 挂载/home/file目录到主机  
#VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。  
#这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录  
VOLUME /home/file  
# 设置时区  
RUN echo "Asia/Shanghai" > /etc/timezone  
#映射8888端口到本机的8099端口  
EXPOSE 9201  
#bash方式执行,app.jar可访问  
# RUN新建立一层,在其基础上执行这些命令,执行结束后,commit这一层的修改,构成新的镜像  
#RUN bash -c 'touch /home/app.jar'  
# 启动容器时执行  
#为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT  
#在启动应用时配置 -Djava.security.egd=file:/dev/./urandom 可以一定程度上加快应用启动。  
# ,"--spring.profiles.active=prod"  
ENTRYPOINT ["java","-jar","-Djava.security.egd=file:/dev/./urandom","/home/app.jar"]

二、pom文件配置

注意点1:spring-boot-maven-plugin插件位置需要在docker-maven-plugin插件位置上面,否则会报找不到主类错误# no main manifest attribute

注意点2:project.artifactId 不能有大写字母,否则构建可能报错,使用ruoyi-admin这种替换大写ruoyiAdmin形式

注意点3:docker服务需要开启远程访问,详情见文章底部

 <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--加入下面两项配置-->
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version> 1.2.1</version>
                <!--将插件绑定在某个phase执行-->
                <executions>
                    <execution>
                        <id>build-image</id>
                        <!--将插件绑定在package这个phase上,也就是说,用户只需要执行mvn package,就会自动执行mvn docker:build-->
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!--指定生成的镜像名-->
                    <imageName>exam/${project.artifactId}</imageName>
                    <!--指定标签-->
                    <imageTags>
                        <imageTag>${project.version}</imageTag>
                    </imageTags>
                    <!--指定Dockerfile 的位置,${project.basedir}:项目的根路径下-->
                    <dockerDirectory>${project.basedir}/src/main/resources/docker</dockerDirectory>
                    <!--指定远程docker api地址-->
                    <dockerHost>http://192.168.124.31:2375</dockerHost>
                    <resources>
                        <resource>
                            <!--容器中自定义jar包存放的位置,及对应的target目录-->
                            <targetPath>/</targetPath>
                            <!--本地jar包所在路径-->
                            <directory>${project.build.directory}</directory>
                            <!--需要包含本地jar包名称,对应的是Dockerfile中添加的文件名-->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                    <!--以下两行是为了docker push到DockerHub使用的-->
                    <!--<serverId>docker-hub</serverId>
                    <registryUrl>https://index.docker.io/v1</registryUrl>-->
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.2</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <warName>${project.artifactId}</warName>
                </configuration>
            </plugin>
        </plugins>
    </build>

三、点击maven插件的package开始构建镜像

image.png

四、构建好后可以通过命令docker run xxxx 启动 ,也可在idea中连接服务器启动容器

image.png

image.png

解决Linux服务器中docker访问报127.0.0.1:2375拒绝连接 (Connection refused)的问题

原文:解决Linux服务器中docker访问报127.0.0.1:2375拒绝连接 (Connection refused)的问题 在Linux服务器中,Docker是远程访问的,因此需要开放2375端口。仅仅在防火墙开启2375端口是不够的。

 查询docker服务

systemctl status docker.service

image.png 如图红色框内所示,我的docker service文件存放在/usr/lib/systemd/system/目录下。

编辑docker.service服务文件

vim /usr/lib/systemd/system/docker.service

在ExecStart行后面追加以下内容

-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

image.png

重启服务完成

systemctl daemon-reload
systemctl restart docker.service

如果服务器防火墙开启了,还需要放通端口、云服务器安全组