idea连接docker实现一键部署

1.修改docker配置文件,打开2375端口

[root@s162 docker]# vim /usr/lib/systemd/system/docker.service
#查找 ExecStart,在末尾添加
#后面加上-H tcp://0.0.0.0:2375 

[root@s162 docker]# systemctl daemon-reload
[root@s162 docker]# systemctl start docker

## 查看2375端口是否启用
[root@s162 docker]# lsof -i:2375
COMMAND   PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
dockerd 27021 root    5u  IPv6 352598799      0t0  TCP *:2375 (LISTEN)

2. Idea安装配置docker插件

2.1. idea-plugins市场 安装docker插件

略…

2.2. 配置docker

在这里插入图片描述

3.springboot项目部署到docker服务器

3.1. 编写docker/dockerfile

在这里插入图片描述

3.2.maven添加docker-maven-plugin插件

    <plugin>
          <groupId>com.spotify</groupId>
          <artifactId>docker-maven-plugin</artifactId>
          <version>1.0.0</version>
          <configuration>
              <!--指定生成的镜像名,如果不指定tag,默认会使用latest-->
              <imageName>jhs/${project.artifactId}:${project.version}</imageName>
              <!--添加额外的指定标签, 非必须-->
              <!--
              <imageTags>
                  <imageTag>${project.version}</imageTag>
              </imageTags>
              -->

              <!-- 指定 Dockerfile 路径 :项目根路径下-->
              <dockerDirectory>${project.basedir}/docker</dockerDirectory>
              <!--指定远程 docker api地址-->
              <dockerHost>http://192.168.129.162:2375</dockerHost>


              <!-- copy资源 -->
              <resources>
                  <resource>
                      <targetPath>/</targetPath>
                      <directory>${project.build.directory}</directory>
                      <include>${project.build.finalName}.jar</include>
                  </resource>
              </resources>


              <!--docker build dockerfile时:设置镜像创建时的变量 -->
              <buildArgs>
                  <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
              </buildArgs>
          </configuration>
      </plugin>

3.3. docker:build

使用命令$ mvn clean package docker:build -Dmaven.test.skip=true构建镜像,在docker服务器上查看镜像是否上传成功:
在这里插入图片描述

3.4 docker:tag

docker命令行格式为#docker tag <imageId or imageName> <nexus-hostname>:<repository-port>/<image>:<tag>

插件配置
<configuration>补充配置:

 <configuration>
	  <image>jhs/${project.artifactId}:${project.version}</image>
      <!-- docker tag 打标签-->
      <newName>192.168.129.160:5000/${project.artifactId}:${project.version}</newName>
</configuration>

为镜像打上tag标签,为后续的push做准备:mvn clean docker:tag -Dmaven.test.skip=true -DskipDockerBuild
在这里插入图片描述

3.5 docker:push

插件配置
<configuration>补充配置:

 <configuration>
	  <!-- docker push 推送到远程镜像仓库-->
       <!-- serverId: 为在maven setting.xml配置的server信息id-->
       <serverId>nexus-docker-registry</serverId>
       <registryUrl>192.168.129.160:5000</registryUrl>
       	
       	<!-- 打上tag的新镜像 push 到nexus-->
		<imageName>192.168.129.160:5000/${project.artifactId}</imageName>
</configuration>

将上文打上tag标签的镜像,推送到私服nexus:mvn clean docker:push -Dmaven.test.skip=true -DskipDockerBuild -DskipDockerTag
在这里插入图片描述

3.6 docker插件参数

  • -DskipDockerBuild to skip image build
  • -DskipDockerTag to skip image tag
  • -DskipDockerPush to skip image push
  • -DskipDockerto skip any Docker goals

3.7 绑定命令到maven phases

 <executions>
     <execution>
           <id>build-image</id>
           <phase>package</phase>
           <goals>
               <goal>build</goal>
           </goals>
       </execution>

       <execution>
           <id>tag-image</id>
           <phase>package</phase>
           <goals>
               <goal>tag</goal>
           </goals>
           <configuration>
               <image>jhs/${project.artifactId}:${project.version}</image>
               <newName>192.168.129.160:5000/${project.artifactId}:${project.version}</newName>
           </configuration>
       </execution>


       <execution>
           <id>push-image</id>
           <phase>deploy</phase>
           <goals>
               <goal>push</goal>
           </goals>
           <configuration>
               <!-- docker push 推送到远程镜像仓库-->
               <!-- serverId: 为在maven setting.xml配置的server信息id-->
               <serverId>nexus-docker-registry</serverId>
               <registryUrl>192.168.129.160:5000</registryUrl>
               <imageName>192.168.129.160:5000/${project.artifactId}</imageName>
           </configuration>
       </execution>

   </executions>

3.8 最佳实践

  <properties>
     <docker.host>http://192.168.129.162:2375</docker.host>
     <docker.registry.url>192.168.129.160:5000</docker.registry.url>
 </properties>
 
<build>
 <plugins>
  	<plugin>
       <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>1.0.0</version>
        <configuration>
            <imageName>dic/${project.artifactId}:${project.version}</imageName>
            <!--添加额外的指定标签(可配置多个), 若果没做指定,则为latest-->
            <!--
             <imageTags>
                 <imageTag>${project.version}</imageTag>
             </imageTags>
             -->


            <!-- 指定 Dockerfile 路径 :项目根路径下-->
            <dockerDirectory>${project.basedir}/docker</dockerDirectory>
            <!--指定远程 docker api地址-->
            <dockerHost>${docker.host}</dockerHost>


            <!-- copy资源 -->
            <resources>
                <resource>
                    <targetPath>/</targetPath>
                    <directory>${project.build.directory}</directory>
                    <include>${project.build.finalName}.jar</include>
                </resource>
            </resources>


            <!--docker build dockerfile时:设置镜像创建时的变量 -->
            <buildArgs>
                <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
            </buildArgs>
        </configuration>

        <executions>
            <execution>
                <id>build-image</id>
                <phase>package</phase>
                <goals>
                    <goal>build</goal>
                </goals>
            </execution>

            <execution>
                <id>tag-image</id>
                <phase>package</phase>
                <goals>
                    <goal>tag</goal>
                </goals>
                <configuration>
                    <image>dic/${project.artifactId}:${project.version}</image>
                    <newName>${docker.registry.url}/${project.artifactId}:${project.version}</newName>
                </configuration>
            </execution>


            <execution>
                <id>push-image</id>
                <phase>deploy</phase>
                <goals>
                    <goal>push</goal>
                </goals>
                <configuration>
                    <!-- docker push 推送到远程镜像仓库-->
                    <!-- serverId: 为在maven setting.xml配置的server信息id-->
                    <serverId>nexus-docker-registry</serverId>
                    <registryUrl>${docker.registry.url}</registryUrl>
                    <imageName>${docker.registry.url}/${project.artifactId}</imageName>
                </configuration>
            </execution>

        </executions>
    </plugin>
  </plugins>
 </build>

4.nexus搭建docker私服(补充)

https://blog.csdn.net/it_freshman/article/details/109214524

附录

dockerfile-maven-plugin 插件

          <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <repository>jhs/${project.artifactId}</repository>
                    <tag>${project.version}</tag>

                    <!--
                    docker build - -build-arg JAR_FILE=xxxx.jar -t eureka:v1

                    # -f ${project_name} 可省略
                    mvn -f ${project_name} clean package dockerfile:build
                    -->
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>

执行命令:mvn clean package dockerfile:build -Dmaven.test.skip=true

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值