IDEA一键部署服务至Docker

IDEA 集成 Docker 实现一键部署

开始第一步前先看下我的IDEA版本,IntelliJ IDEA 2023.1.2 (Ultimate Edition),如图

IDEA版本.png

由于我使用的是新版IDEA,设置-Build,Execution,Deployment自带Docker,如果是旧版需要按照Docker tool插件,这里不再赘述,网上有教程

接下来就是开启2375端口

vim /usr/lib/systemd/system/docker.service

进入daemon配置文件,修改

ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock -H unix:///var/run/docker.sock

重新加载配置文件

systemctl daemon-reload

重新启动Docker service(docker如果有正在运行的容器,建议先停止docker stop containerID再重启)

systemctl restart docker.service

查看端口是否开启

netstat -nptl

查看端口是否开启.png

正式开始

  • 第一步:如图配置docker仓库URL

IDEA配置URL.png

配置后当connecting变成successfully说明连接成功,此时我们对的IDEA就成功和Docker建立连接了。接下来我们就可以去配置项目以便打包部署至Docker了(如果连接时请求拒绝或超时,那么很有可能是你开启了防火墙的缘故,要么关闭防火墙,要么添加以下命令)

iptables -I INPUT -s 39.170.xxx.xxx(本机公网IP地址) -p tcp --dport 2375 -j ACCEPT (-I不是-l,大写i)
  • 第二步:项目配置(pom.xml)

      <groupId>tech.wedev.demo</groupId>
      <artifactId>demo</artifactId>
      <version>0.0.1.RELEASE</version>
      <packaging>jar</packaging>
      <name>demo</name>
      <description>demo</description>
      <properties>
          <java.version>8</java.version>
          <!--设置时间戳-->
          <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
          <!--设置docker image 前缀-->
          <docker.prefix>demo</docker.prefix>
      </properties>
    
      <dependencies>
      	省略中间的依赖···
      </dependencies>
    
      <build>
          <plugins>
              <plugin><!--springboot的打包插件-->
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-maven-plugin</artifactId>
                  <executions>
                      <execution>
                          <goals>
                              <goal>repackage</goal>
                          </goals>
                      </execution>
                  </executions>
              </plugin>
    
              <!-- docker插件 -->
              <plugin>
                  <groupId>com.spotify</groupId>
                  <artifactId>docker-maven-plugin</artifactId>
                  <version>1.2.2</version>
                  <!--将插件绑定在某个phase执行-->
                  <executions>
                      <execution>
                          <id>build-image</id>
                          <!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build-->
                          <phase>package</phase>
                          <goals>
                              <goal>build</goal>
                          </goals>
                      </execution>
                  </executions>
    
                  <configuration>
                      <!--设置镜像名称-->
                      <imageName>${docker.prefix}/${project.artifactId}_${maven.build.timestamp}</imageName>
                      <!-- docker远程服务器地址 -->
                      <dockerHost>http://127.0.0.1:2375</dockerHost>
                      <!--设置目录,该目录下放dockerfile-->
                      <dockerDirectory>${project.basedir}</dockerDirectory>
                      <resources>
                          <resource>
                              <targetPath>/</targetPath>
                              <directory>${project.build.directory}</directory>
                              <include>${project.build.finalName}.jar</include>
                          </resource>
                      </resources>
                  </configuration>
              </plugin>
          </plugins>
      </build>
    
  • 第三步,编写Dockerfile

      FROM java:8
      MAINTAINER demo
    
      VOLUME /tmp
    
      COPY demo-0.0.1.RELEASE.jar demo-1.0.0.jar
    
      EXPOSE 9081
    
      ENTRYPOINT ["java","-jar","demo-1.0.0.jar"]
    

打包项目:(如果项目有test,可以点击'Skip Tests'后再打包)

如果有本地修改记录,不用提交GitHub仓库,直接打包即可

打包项目.png

打包完成后,镜像也制作完成了

制作镜像-docker端查看.png

  • 第四步,在IDEA中进行项目部署

右键刚刚制作的镜像

创建容器1.png

Create Docker Configuration

创建容器2.png

绑定端口,Port Bindings Port Bindings.png

容器创建成功后,自动启动容器

创建容器成功.png

可以看到容器里的项目已经启动了

启动容器里的项目-启动日志.png

-------------------------完-------------------------

遇到的问题 我在操作的过程中,碰到两个问题一个是打包的时候报There are test failures错误;一个是容器创建成功后,容器启动时报no main manifest attribute, in demo-1.0.0.jar错误。

解决:第一个问题就是打包的时候直接Skip Tests就好了,第二个问题参考:jar运行报错no main manifest attribute

参考文章:

使用IDEA一键部署服务至Docker

在IDEA中使用Docker部署SpringBoot项目

IDEA 集成 Docker 实现一键部署


已有 0 条评论

    感谢参与互动!