SpringBoot 项目构建 Docker 镜像

SpringBoot 项目构建 Docker 镜像

Spring Boot 项目部署有多种方式,这里记录其中一种。借助 maven 插件将 SpringBoot应用打包为 Docker 镜像,并上传到私有镜像仓库 Docker Registry。

安装 Docker Registry

  • 首先为了保证网速建议 Docker 使用阿里云或者国内镜像仓库。修改 /etc/docker/daemon.json 添加镜像。
{
  "registry-mirrors": ["https://hhuovh45.mirror.aliyuncs.com"]
}
  • 下载 Redistry 的 Docker 镜像
docker pull registry:2
  • 使用Docker容器运行Registry服务,需要添加环境变量REGISTRY_STORAGE_DELETE_ENABLED=true开启删除镜像的功能;
docker run -p 5000:5000 --name registry2 
--restart=always 
-e REGISTRY_STORAGE_DELETE_ENABLED="true" 
-d registry:2
  • 由于Docker默认使用HTTPS推送镜像,而我们的镜像仓库没有支持,所以需要添加如下配置,改为使用HTTP推送;
{
  "registry-mirrors": ["https://hhuovh45.mirror.aliyuncs.com"],
  "insecure-registries": ["42.192.99.111:5000"]
}

这里 42.192.99.111 是自己服务器的 IP 地址。

  • Docker 开启远程 API,保证稍后我们的 jar包能上传到该服务器。修改 /usr/lib/systemd/system/docker.service

修改前:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

修改后:

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

0.0.0.0 指的是任何 IP 地址的客户端都能上传镜像到该服务器

  • 重启Docker服务
systemctl daemon-reload && systemctl restart docker
  • 开启防火墙的Docker构建端口(如果开启了防火墙)
firewall-cmd --zone=public --add-port=2375/tcp --permanent 
firewall-cmd --reload

构建镜像

  • 下载示例项目

使用一个项目测试功能。项目地址:demo-code-itzhouq

  • docker-maven-plugin 插件构建 Docker 镜像
<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    <plugin>
      <groupId>com.spotify</groupId>
      <artifactId>docker-maven-plugin</artifactId>
      <version>1.1.0</version>
      <executions>
        <execution>
          <id>build-image</id>
          <phase>package</phase>
          <goals>
            <goal>build</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <imageName>itzhouq/${project.artifactId}:${project.version}</imageName>
        <dockerHost>http://42.192.99.111:2375</dockerHost>
        <baseImage>java:8</baseImage>
        <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
        <resources>
          <resource>
            <targetPath>/</targetPath>
            <directory>${project.build.directory}</directory>
            <include>${project.build.finalName}.jar</include>
          </resource>
        </resources>
      </configuration>
    </plugin>
  </plugins>
</build>
  • 相关配置说明:

    • executions.execution.phase:配置执行 maven package 时构建 docker 镜像。
    • imageName:用于指定镜像名称,itzhouq 是仓库名称,${project.artifactId} 是镜像名称,${project.version} 是镜像版本号。
    • dockerHost:打包后上传到的 docker 服务器地址;
    • baseImage:该应用所依赖的基础镜像,此处为 java;
    • entryPoint:docker容器启动时执行的命令;
    • resources.resource.targetPath:将打包后的资源文件复制到该目录;
    • resources.resource.directory:需要复制的文件所在目录,maven 打包的应用 jar 包保存在 target 目录下面;
    • resources.resource.include:需要复制的文件,打包好的应用jar包。
  • 打包后自动上传构建好的镜像到私有仓库

  • 私有仓库

启动 SpringBoot项目

  • 使用 Docker 命令启动项目
docker run -p 8081:8081 --name spring-boot-docker 
-v /etc/localtime:/etc/localtime 
-v /mydata/app/spring-boot-docker/logs:/var/logs 
-d itzhouq/spring-boot-docker:0.0.1-SNAPSHOT
转载请注明作者和出处。
原文地址:https://www.cnblogs.com/itzhouq/p/docker-upload.html