IDEA中通过docker插件部署springboot项目

170 阅读3分钟

安装docker

查看我之前的教程最简单Centos7安装Docker

开启 docker 的 tcp 远程访问

```
# 1、编辑docker.service
vim /usr/lib/systemd/system/docker.service

# 2、修改ExecStart属性,在后面添加-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

# 3、刷新配置,重启服务
systemctl daemon-reload
systemctl restart docker

```

![image.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/702087c80bc44a7292435fce475c4388~tplv-k3u1fbpfcp-watermark.image?)
**打开浏览器,在地址栏中输入`http://Linux的ip地址:2375/version`,出现如下图片中的相关信息,则表示成功开启 docker 的 tcp 远程访问**
![image.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c81a142d23df47e19ee90b6cb863fce7~tplv-k3u1fbpfcp-watermark.image?)

idea安装 Docker 插件

1.1、在顶部工具栏中找到 File → Settings

1.2、找到 Plugins,点击 “Browse repositories” 按钮

1.3、在搜索框输入 Docker,选择 Docker 插件,点击 “Install” 按钮进行安装,然后点击 “Close” 按钮

3.2、可以看到 Docker 插件已经被我们安装上了,然后点击 "Apply" 按钮,再点击 "OK" 按钮,最后重启 IDEA 即可生效

配置 Docker 服务

2.1、在顶部工具栏中找到 File → Settings,进入到 Settings 设置页面中,找到 Build,Execution,Deployment → Docker,点击 "+",添加一个 docker 连接

2.2、在 Engine API URL 中输入你的 docker 服务地址,格式为:tcp://Linux(即: docker 宿主机) 的 ip 地址: 2375,配置好后,idea 会自动检测,然后在左下方输出 "connection successful",然后点击 "Apply" 按钮,再点击 "OK" 按钮

2.3、选择 IDEA 的 Docker 窗口,点击 "绿色运行按钮",连接 Linux 服务器上的 docker,连接成功之后,会显示 Containers 和 Images,即:docker 中已有的容器和镜像

通过 Docker 插件构建镜像

1、首先,在项目的 src/main 路径下,创建一个 docker 目录,并在 docker 目录下新建一个 Dockerfile 文件,其内容如下所示:

# Base images 基础镜像
FROM java:8u111

#MAINTAINER 维护者信息
MAINTAINER liboshuai<liboshuai01@gmail.com>

#VOLUME:挂载目录
VOLUME /temp

#ADD  将microservicecloud-eureka-7001-1.0-SNAPSHOT.jar文件将拷贝到容器中,默认拷贝到根路径下
#注意:microservicecloud-eureka-7001-1.0-SNAPSHOT.jar的名称前的microservicecloud-eureka-7001对应<artifactId>标签中的内容,1.0-SNAPSHOT对应<version>标签中的内容
ADD ./target/polaris-gateway-1.0-SNAPSHOT.jar app.jar

RUN bash -c "touch /app.jar"

#EXPOSE 容器暴露端口
EXPOSE 8080

#ENTRYPOINT 应用启动命令 参数设定
#由于tomcat的session id的生成主要通过java.security.SecureRandom生成随机数来实现,导致启动过程很慢
#通过-Djava.security.egd=file:/dev/./urandom参数可以加快随机数产生过程
ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-jar", "/app.jar"]

2、创建 Dockerfile 启动项

2.1、选择 Edit Configurations…

2.2、点击 "+",找到 Docker,选择 Dockerfile

2.3、配置 Dockerfile 启动项的相关信息 image.png

3、在 pom.xml 文件中添加 SpringBoot 的 maven 插件,如果不添加,运行容器时,会报错,错误信息为:no main manifest attribute, in /xxx.jar

<build>
   <plugins>
       <plugin>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-maven-plugin</artifactId>
           <!-- 项目基于maven pom多模块的开发的,需要设置goal-repackage属性为true,否则打包后文件依赖文件没有一起打包,然后镜像内没有可以运行的程序文件 -->
           <executions>
               <execution>
                   <goals>
                       <goal>repackage</goal>
                   </goals>
               </execution>
           </executions>
           <configuration>
               <includeSystemScope>true</includeSystemScope>
           </configuration>
       </plugin>
   </plugins>
</build>

4、执行 mvn clean install 命令,打包项目并安装到本地的 maven 仓库中

5、在本地 maven 仓库中找到刚才安装好的 microservicecloud-eureka-7001-1.0-SNAPSHOT.jar,拷贝到项目的 src/main/docker 目录下,并运行 Docker 启动项,Docker 插件会自动帮我们构建项目镜像,并启动容器实例(idea要用管理员权限启动,并且当前项目要在C盘的当前用户目录下)

因为我们在 Dockerfile 文件中配置了ADD microservicecloud-eureka-7001-1.0-SNAPSHOT.jar app.jar,而 Dockerfile 文件是放在项目的 src/main/docker 目录下,所以它会在当前目录(即:docker目录)下寻找microservicecloud-eureka-7001-1.0-SNAPSHOT.jar

6、访问项目