(十四)、为 SpringCloud 项目生成 Docker 镜像

发布于:2024-09-17 ⋅ 阅读:(71) ⋅ 点赞:(0)

1、原理

类似 借助 Dockerfile生成新镜像-以nginx为例 中,基于 Nginx 已有镜像,可以生成新的自定义镜像。
为 SpringCloud 项目生成自定义镜像的基础镜像是 Java jdk镜像,基于此,添加 SpringCloud 启动模块的 jar 包,生成一个新镜像

2、最佳实践

2.1、获得 SpringCloud 微服务启动模块的 jar 文件

参考 将一个 SpringCloud 微服务运行 以 jar 方式运行

2.2、准备文件夹和 Dockerfile 文件

  • 把 2.1 中获得的jar 放到该目录下
  • 创建 Dockerfile 文件

在这里插入图片描述

2.3、 Dockerfile 文件的内容

# 使用官方的Java运行时作为父镜像
FROM openjdk:8-jre-alpine

# 将当前目录下的可执行jar包复制到容器中的/app目录下
ADD bestcxx-starter.jar /app/bestcxx-starter.jar

# 声明容器运行时需要开放的端口
EXPOSE 8080

# 设置容器启动时执行的命令
ENTRYPOINT ["java", "-jar", "/app/bestcxx-starter.jar"]

2.4、通过命令行构件新镜像

在文件夹目录下打开命令行,执行命令

// . 表示 文件相对路径
`docker build -t bestcxx-starter:0.0.1 .

顺利的话,你可以在本地看到新生成了镜像了
在这里插入图片描述

3、异常情况和处理:failed to create LLB definition

3.1、现象

在文件夹目录下直接运行 docker build -t bestcxx-starter:0.0.1 . 控制台报错


➜  docker-bestcxx docker build -t bestcxx-starter:0.0.1 .
[+] Building 151.7s (3/3) FINISHED                                                
 => [internal] load build definition from Dockerfile                         0.0s
 => => transferring dockerfile: 606B                                         0.0s
 => [internal] load .dockerignore                                            0.0s
 => => transferring context: 2B                                              0.0s
 => ERROR [internal] load metadata for docker.io/library/openjdk:8-jre-al  151.6s
------
 > [internal] load metadata for docker.io/library/openjdk:8-jre-alpine:
------
failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed commit on ref "unknown-sha256:360132d4d86b72fa978fa16437fe9aed6127dba50dc64149bc0f50ab9bd8af99": "unknown-sha256:360132d4d86b72fa978fa16437fe9aed6127dba50dc64149bc0f50ab9bd8af99" failed size validation: 8175 != 7882: failed precondition

3.2、解决

这种原因是网络不好,可以使用命令行单独拉取镜像,然后再运行 build

配置国内镜像源&清理缓存&手动拉镜像&build

配置国内镜像仓库

Docketesktop->Docker Engine

"registry-mirrors": [
    "http://hub-mirror.c.163.com",
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://cr.console.aliyun.com",
    "https://mirror.ccs.tencentyun.com"
  ]
}
清理本地不使用 docker 资源
docker system prune -a //清理未使用的容器、镜像、网络和构建缓存。
docker system prune -a --volumes //在上述基础上还增加了对未使用的数据卷的清理。
手动拉取镜像
docker pull openjdk:8-jre-alpine
再次build
docker build -t bestcxx-starter:0.0.1 .

4、运行

4.1、简单运行

docker run -d -p 8877:8080 --name my_bestcxx_container bestcxx-starter:0.0.1

4.2、使用 Docker Compose

docker-compose up -d 运行

version: '3'

services:
  my_bestcxx_container:
    image: bestcxx-starter:0.0.1
    container_name: my_bestcxx_container
    ports:
      - "8877:8080"
    restart: always

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到