一、创建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开始构建镜像
四、构建好后可以通过命令docker run xxxx 启动 ,也可在idea中连接服务器启动容器
解决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
如图红色框内所示,我的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
重启服务完成
systemctl daemon-reload
systemctl restart docker.service