1.新建一个简单springboot demo,项目名是myspringbootdemo
2.建立myspringbootdemo/src/main/docker/Dockerfile文件
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD myspringbootdemo-0.0.1-SNAPSHOT.jar app.jar (这里根据你具体项目和版本名称来写,其他不用改)
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
3.添加以下代码到pom.xml
<properties>
<docker.image.prefix>jeffdocker</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
4.把项目放到linux系统上,然后cd myspringbootdemo到项目目录下
5.构建docker镜像
mvn package -Dmaven.test.skip=true docker:build
6.运行docker镜像,防火墙一定要开放8080端口(端口看自己需求可改)
docker run -p 8080:8080 -t jeffdocker/myspringbootdemo
ps:我在运行上面这行命令时,会报错
/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint loving_mccarthy (e33899941e1a102f62f90da7d7143fa84f797e9825f1d01e1fd735783ad65483): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8080 -j DNAT --to-destination 172.17.0.2:8080 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1)).
网上查资料解释到,当firewalld启动或重启时,会移除iptables中docker的规则,导致docker在端口访问方面出现问题。
解决办法是重启docker,命令是systemctl restart docker.service,又或者先重启firewalld,命令是systemctl restart firewalld,再重启docker。