Docker学习笔记|第二篇:Maven构建Docker镜像并上传至云服务器运行

1.前言

相信所有JAVA程序员都知道Maven,Maven是一个强大的项目管理与构建工具,使用Maven我们可以方便对项目进行打包、上传私服、项目依赖管理等。同样我们也可以借助插件通过Maven构建Docker镜像,常见的插件依赖如下所示:

  • spotify
 <!-- https://github.com/spotify/docker-maven-plugin -->
<dependency>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>1.2.0</version>
</dependency>
  • fabric8io
<!-- https://mvnrepository.com/artifact/io.fabric8/docker-maven-plugin -->
<dependency>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.31.0</version>
</dependency>
  • bibryam
<!-- https://github.com/bibryam/docker-maven-plugin -->
<dependency>
	<groupId>com.ofbizian</groupId>
   <artifactId>docker-maven-plugin</artifactId>
   <version>1.0.0</version>
</dependency>

由于平时使用spotify插件比较多,因此在此使用spotify进行演示,有兴趣的朋友可以自行测试其它两种插件

2.环境搭建

项目名项目说明
eureka-service注册中心
192.168.1.100docker宿主机
  • 创建项目eureka-service
  • 引入服务基本依赖
  <dependencies>
    <!--Eureka注册中心-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
  </dependencies>

在此只引入该项目基本依赖,其它Spring Cloud环境报搭建,可以参考我的其它博文搭建,环境搭建不是本文重点,就不在此展示。

  • 书写服务配置application.yml
server:
  port: ${EUREKA_PORT:8761}

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${EUREKA_ZONE_HOST:localhost}:${EUREKA_ZONE_PORT:8761}/eureka/

spring:
  application:
    name: eureka-server
  • 书写启动类
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
  public static void main(String[] args){
    SpringApplication.run(EurekaApplication.class);
  }
}
  • 测试服务

启动服务,并访问http://localhost:8761,出现如下界面表示服务配置完成

在这里插入图片描述

3.Maven插件直接构造镜像

  • 构建前开启宿主机Docker远程Api端口
# 修改docker.service
$ sudo vim /usr/lib/systemd/system/docker.service
# 修改ExecStart如下
$ ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
# 重新加载配置文件
$ sudo systemctl daemon-reload
# 重启docker服务
$ systemctl restart docker
  • 修改本机docker环境变量

在此以win7为例配置环境变量
计算机->右键属性->高级系统设置-> 高级->环境变量->系统变量->新建
在这里插入图片描述

  • Pom文件中引入Maven插件
 <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <!-- docker的maven插件,官网: https://github.com/spotify/docker-maven-plugin -->
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>1.2.0</version>
        <configuration>
          <!--设置镜像名称-->
          <imageName>springcloud/${project.artifactId}</imageName>
          <baseImage>java:alpine</baseImage>
          <volumes>/root</volumes>
          <entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
          <imageTags>
          	<imageTag>${project.version}</imageTag>
          </imageTags>
          <dockerHost>http://192.168.1.100:2375</dockerHost>
          <rm>false</rm>
          <resources>
            <resource>
              <!--复制资源至docker镜像中位置-->
              <targetPath>/</targetPath>
              <!--资源打包后文件夹-->
              <directory>${project.build.directory}</directory>
              <!--资源打包后文件名-->
              <include>${project.build.finalName}.jar</include>
            </resource>
          </resources>
        </configuration>
      </plugin>
    </plugins>
  </build>

标签说明:

标签名作用
imageName构建后镜像名
baseImage基础镜像名
volumes持久化挂载位置
entryPoint启动镜像执行的命令
imageTags打包后镜像标签
dockerHost镜像
rm是否删除过程镜像
targetPath镜像复制后位置
directory复制jar包文件夹
include资源打包后文件名
  • 执行打包命令
mvn clean package  docker:build -DskipTests
  • 查看宿主机镜像
$ docker images 

出现下图所示,表示docker镜像构建并上传成功
在这里插入图片描述

  • 启动镜像
$ docker run -d -p 8761:8761` --name eureka springcloud/eureka:1.0-SNAPSHOT
  • 访问宿主机如下地址http://192.168.1.100:8761出现如下界面表示启动成功

在这里插入图片描述

4.Maven插件读取DockerFile构造镜像

  • 引入插件依赖
<build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <!-- docker的maven插件,官网: https://github.com/spotify/docker-maven-plugin -->
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>1.2.0</version>
        <configuration>
          <!--设置镜像名称-->
          <imageName>springcloud/${project.artifactId}</imageName>
          <!--指定dockerfile位置-->
          <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
          <imageTags>
          	<imageTag>${project.version}</imageTag>
          </imageTags>
          <dockerHost>http://192.168.1.100:2375</dockerHost>
          <rm>true</rm>
          <resources>
            <resource>
              <!--复制资源至docker镜像中位置-->
              <targetPath>/</targetPath>
              <!--资源打包后文件夹-->
              <directory>${project.build.directory}</directory>
              <!--资源打包后文件名-->
              <include>${project.build.finalName}.jar</include>
            </resource>
          </resources>
        </configuration>
      </plugin>
    </plugins>
  </build>

dockerDirectory: 表示dockerfile所在位置

  • 书写Dockerfile文件
FROM java:alpine
VOLUME /tmp
ADD eureka-1.0-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
  • 执行构建命令
$ mvn clean package  docker:build -DskipTests
  • 查看宿主机docker镜像
  • 启动镜像
  • 访问宿主机相应地址,出现上述相同页面,表示构建并推送成功

5.将Docker构建指令绑定至Maven命令上

绑定意思指将要执行的docker命令绑定至maven的parse上,增加如下配置即可

<plugin>
        <!-- docker的maven插件,官网: https://github.com/spotify/docker-maven-plugin -->
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>1.2.0</version>
        <executions>
          <execution>
            <id>build-image</id>
            <phase>package</phase>
            <goals>
              <goal>build</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <!--设置镜像名称-->
          <imageName>springcloud/${project.artifactId}</imageName>
          <!--指定dockerfile位置-->
          <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
          <dockerHost>http://192.168.1.100:2375</dockerHost>
          <imageTags>
          	<imageTag>${project.version}</imageTag>
          </imageTags>
          <resources>
            <resource>
              <!--复制资源至docker镜像中位置-->
              <targetPath>/</targetPath>
              <!--资源打包后文件夹-->
              <directory>${project.build.directory}</directory>
              <!--资源打包后文件名-->
              <include>${project.build.finalName}.jar</include>
            </resource>
          </resources>
        </configuration>
      </plugin>

绑定其实就增加了如下信息

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

即将docker的build集合绑定至maven的package命令上,当执行mvn package时就是执行了mvn package docker:build

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值