前置条件:默认已有可连接的centos7服务且安装了docker
1、idea中首先去插件市场安装docker,安装好后进行重启
2、配置docker插件
通过账号密码远程ssh连接即可
3、配置每一个需要启动服务的pom文件
<build>
<!-- 生成jar包的名字,记得和Dockerfile文件里面的名字对应 -->
<finalName>${artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
finalName:maven 点击package执行之后,会以该名称生成jar包
springboot.version:和自身采用的springboot版本一致即可
4、创建Dockerfile文件
在要运行的项目模块的根目录下创建Dockerfile文件
Dockerfile内容如下
# 该镜像需要依赖的基础镜像
FROM openjdk:8-jdk-alpine
# 声明服务运行在8080端口
EXPOSE 8080
# 将当前目录下的jar包复制到docker容器的/目录下
ADD ./target/zhulin-gateway.jar zhulin-gateway.jar
# 指定临时文件目录
VOLUME /tmp
# 项目配置的日志文件目录
VOLUME /logs
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java","-jar","/zhulin-gateway.jar"]
# 指定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 指定维护者的名字
MAINTAINER henyi
openjdk:8-jdk-alpine如果docker中无该镜像会自行下载
VOLUME /logs 是我的日志文件配置了在该目录下,根据自己的项目存放的目录来进行处理即可
./target/zhulin-gateway.jar是自定义的jar包名称,和上面pom中的finalName保持一致
ENTRYPOINT ["java","-jar","/zhulin-gateway.jar"] 这里的zhulin-gateway.jar和ADD ./target/zhulin-gateway.jar zhulin-gateway.jar后一个zhulin-gateway.jar是一致的,相信不难理解
5、使用docker插件执行Dockerfile
如果你在上面没找到对应的选项,那么就是藏在Modify里了,点击进行好好查找
Run options: 这里可以只配置端口映射即可,但是一般来说日志文件也会映射出来,下面是我的配置,可进行简单修改即可
-p 8080:8080 -v /mydata/zhulin/gateway/tmp:/tmp -v /mydata/zhulin/gateway/logs:/logs
-v /mydata/zhulin/gateway/tmp:/tmp -v /mydata/zhulin/gateway/logs:/logs
这里的:/tmp就是上面dockerfile的tmp目录,logs同理,这里就是为了映射docker容器的目录出来
6、先执行maven的clean, 再执行package(一般来说我们都喜欢直接在父项目点clean和package,你想到具体的服务模块点也可以)
点击package之后会打出包
7、执行docker插件启动
执行后会生成镜像和容器 如下图所示:
然后点击log可看到我们的项目启动起来了
缺点:当我们多次更新代码,重新clean,package之后,重新点击docker插件执行,会生成多余无用镜像,会占用我们的空间,并且也不美观。目前这个暂时没法解决,只能人为的执行docker命令来进行删除
删除<none>镜像命令:
docker rmi $(docker images -f "dangling=true" -q)