1.打开Docker远程访问
找到docker.service,一般地址在/usr/lib/systemd/system/docker.service
vi /usr/lib/systemd/system/docker.service
注释掉这行:ExecStart=/usr/bin/dockerd -H fd:
加上这行:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
重新加载docker配置文件,并重启docker
#重新加载配置文件
systemctl daemon-reload
#重启服务
systemctl restart docker.service
然后在系统中打开2375防火墙
2. 编写Dockfile
在src/main/docker里面编写Dockerfile
# Docker image for real_estate_analysis run
# VERSION 0.0.1
# Author: sunhu
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER sunhuwh <764503410@qq.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
ADD real_estate_analysis.jar real_estate_analysis.jar
# 运行jar包
RUN bash -c 'touch /real_estate_analysis.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/real_estate_analysis.jar"]
3. 使用MVN发布镜像
在pom.xml中加入:
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 镜像名称-->
<imageName>${project.artifactId}</imageName>
<!-- 镜像标签-->
<imageTags>
<!--可以指定多个标签 建议弄成自增序列或者时间戳类型,用于区分版本-->
<imageTag>${maven.build.timestamp}</imageTag>
</imageTags>
<baseImage>java</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<!-- dockerfile文件路径-->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
</build>
运行mvn clean package就可以直接打包镜像,然后把文件丢到Docker宿主机上构建镜像。
4. IDEA支持Docker脚本
可以在IDEA中安装docker插件,可以操作容器和镜像。
5. 总结
个人感觉IDEA操作docker风险高,需有权限的人来操作更安全。
更推荐使用Jenkins + Docker来管理发布任务。功能更多,更灵活。