1.pom配置
首先,springboot工程搭建就不提, 需要注意的是pom文件需要加入这些配置(这些配置是你用插件来build才用得上的,如果你在构建dockerfile的时候,手动将使用命令mvn package -Dmaven.test.skip=true
构建的,dockfile使用copy的则不需要关心这个,我就是这样…)
<properties>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
在build里搞点事情
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!-- Dockerfile在哪里 -->
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin -->
</plugins>
</build>
虚拟机docker开放远程访问
从其他地方拷贝过来的,能用(我用的是centos7)
[root@local host ~]# vi /lib/systemd/system/docker.service
#修改ExecStart这行
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
检查下是否能链接上虚拟机的docker,使用systemctl start docker
启动docker,然后在idea查看是否能链接上…
不行的话,Google解决方案
配置docker发布
首选弄一份dockerfile文件,我是放到根目录的,如果使用pom配置的docker插件需要注意dockfile的路径
#指定基础镜像,在其上进行定制
FROM java:8
#这里的 /tmp 目录就会在运行时自动挂载为匿名卷,任何向 /data 中写入的信息都不会记录进容器存储层
VOLUME /tmp
#复制上下文目录下的target/oohadshowmi.jar 到容器里
COPY target/oohadshowmi.jar test.jar
#bash方式执行,使test.jar可访问
#RUN新建立一层,在其上执行这些命令,执行结束后, commit 这一层的修改,构成新的镜像。
RUN bash -c "touch /test.jar"
#声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 8989
#指定容器启动程序及参数 <ENTRYPOINT> "<CMD>"
ENTRYPOINT ["java","-jar","test.jar"]
使用idea发布到docker(如果旧版本的idea 可能需要按照docker插件)
图片发复制过来的,但是命令哪里需要改一下, -itd 不少 -t, 不然容易出现docker的端口没有映射到虚拟机的情况,(其他人怎么就没发生这情况呢=–=)
我是看了这篇博文解决了端口问题 Docker端口映射不起作用的解决办法因为我的dockerfile写的简单,所以需要自己build, 使用mvn package -Dmaven.test.skip=true
来build一个jar包,
然后发布到docker
如果下载镜像很慢的话, 你可能需要考虑下切换源:
参考过资料:
Idea发布项目到DockerSpring Boot 2 (四):使用 Docker 部署 Spring BootDocker端口映射不起作用的解决办法