一:开启docker远端地址
1、修改 /etc/sysconfig/docker文件
vi /etc/sysconfig/docker
在最下面添加一行
DOCKER_OPTS='-H unix:///var/run/docker.sock -H 0.0.0.0:2375'
2、在/usr/lib/systemd/system/docker.service,配置远程访问。
vi /usr/lib/systemd/system/docker.service
主要是在[Service]这个部分,修改ExecStart参数,在ExecStart后面添加 $DOCKER_OPTS \
如图:
3、重启
systemctl daemon-reload
systemctl restart docker
4、防火墙开放2375端口号
firewall-cmd --zone=public --add-port=2375/tcp --permanent
重启防火墙
firewall-cmd --reload
5、用浏览器访问查看是否成功
http://192.168.1.47:2375/images/json
二:配置springboot项目的pom.xml
<build> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <!--将插件绑定在某个phase执行--> <executions> <execution> <id>build-image</id> <!--用户只需执行mvn package ,就会自动执行mvn docker:build--> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <!--指定dockerfile文件目录--> <dockerDirectory>${project.basedir}/docker/demo</dockerDirectory> <!--指定生成的镜像名--> <imageName>ft/${project.artifactId}</imageName> <!--指定标签--> <imageTags> <imageTag>latest</imageTag> </imageTags> <forceTags>true</forceTags> <!--覆盖相同标签镜像--> <!--指定远程 docker api地址--> <dockerHost>http://192.168.1.XXX:2375</dockerHost> <!-- 这里是复制 jar 包到 docker 容器指定目录配置 --> <resources> <resource> <targetPath>/</targetPath> <!--jar 包所在的路径 此处配置的 即对应 target 目录--> <directory>${project.build.directory}</directory> <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 --> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins> </build>
三:编写dockerfile文件
# Docker image for springboot file run # 基础镜像使用java FROM java:8 # 作者 MAINTAINER jzq # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为app.jar ADD ft-service-demo.jar app.jar # 运行jar包 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
注:VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。该步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
项目的 jar 文件作为 “app.jar” 添加到容器的
ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source
如果是第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了。
四:maven打包即可
如果报错:
container_linux.go:247: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\"" /usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\"".
解决:主要原因还是centos系统版本兼容性问题,将系统做更新升级,即可解决:
1、执行:yum update
2、重启docker:systemctl restart docker
3、重新maven打包