• 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
    
    转载请注明作者和出处。
  • 相关阅读:
    Maven工程无异常 启动没有出现Starting ProtocolHandler的原因
    Unknown return value type [java.lang.Boolean]] with root cause
    解决java.lang.IllegalArgumentException: No converter found for return value of type
    jsp页面的地址
    HTTP Status 500
    Could not resolve placeholder 'IMAGE_SERVER_URL' in string value "${IMAGE_SERVER_URL}"
    yum出现Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile解决方法
    【程序人生】百度员工应聘腾讯职位,结果亮了!
    【开源组件】FastDFS集群搭建与实战
    【开源组件】FastDFS极速入门与安装
  • 原文地址:https://www.cnblogs.com/itzhouq/p/docker-upload.html
Copyright © 2020-2023  润新知