Docker Compose 优先拉取镜像,若无镜像则自动构建并启动服务

言简意赅的讲解Docker Compose build解决的痛点

之前我介绍了 Docker 的一些基础使用和常见问题。
后续遇见了拉取不到镜像的网络问题,解决了网络问题之后,有些童鞋反馈很多项目现场无法拉取镜像,甚至有内网限制的情况,需要优先拉取镜像否则本地构建,大家的需求越来越复杂,那本文就给大家提供一个解决思路。

在应用开发中,使用 Docker Compose 来管理多容器环境已经成为一种标准做法。一个常见需求是,在没有远程镜像时,我们希望自动构建本地镜像,而当远程镜像存在时,又能够优先拉取最新版本的镜像。本文将展示如何通过 Docker Compose 配置文件实现这一功能

1. Docker Compose 配置说明:如何优先拉取镜像并自动构建

通常,Docker Compose 需要配置镜像来启动服务,但有时我们并不希望预先定义镜像,而是希望在镜像不存在时自动构建,存在时直接拉取。这种方式非常适合需要在本地开发环境中进行快速迭代的项目。

以下是 Docker Compose 文件的一个例子,展示了如何配置后端服务来优先拉取镜像,如果没有找到指定的镜像,Docker Compose 会自动从本地构建:

version: '3.8'

services:
  backend:
    image: wenhao/backend:latest
    container_name: backend
    ports:
      - "8080:8080"
    environment:
      - ENV_DB_HOST=postgresql
      - ENV_DB_PORT=5432
    volumes:
      - ./log/backend:/logs
    depends_on:
      - postgresql
      - keycloak
    build:
      context: ./backend  # 如果没有远程镜像,尝试本地构建
      dockerfile: Dockerfile
2. 关键配置解析
  • image:指定服务的镜像名称。当该镜像存在时,Docker Compose 会直接拉取并启动容器。如果镜像不存在,则跳过拉取步骤,执行 build 过程。

  • build:定义了构建镜像的上下文路径(context)以及 Dockerfile 的位置。此配置意味着当 Docker Compose 检测到镜像不可用时,会使用指定的本地目录和 Dockerfile 构建镜像。

  • depends_on:指定该服务依赖于 postgresqlkeycloak 服务,确保数据库和身份验证服务先启动。

  • volumes:将本地日志目录映射到容器中,以便后端服务生成的日志能够持久化到本地文件系统。

3. 如何使用 Docker Compose 启动服务

在配置好 docker-compose.yml 文件后,使用以下命令启动服务:

docker-compose up -d

-d 参数表示在后台启动容器。此时,如果 Docker Hub 上有 wenhao/backend:latest 镜像,Docker Compose 会优先拉取该镜像;如果镜像不可用,Docker Compose 会根据配置的 build 指令从本地目录构建镜像。

4. 项目目录结构:避免困惑

为了避免团队开发过程中对项目结构产生困惑,我们建议遵循以下的项目目录结构:

/my-project
├── docker-compose.yml      # Docker Compose 配置文件
├── /backend                # 后端服务代码
│   ├── Dockerfile           # 后端服务 Dockerfile
│   ├── /src                # 后端服务源代码
│   └── /logs               # 存储日志的目录
├── /postgresql             # PostgreSQL 数据库配置(如果有)
└── /keycloak               # Keycloak 身份认证服务配置(如果有)
  • backend/Dockerfile:该文件用于构建后端服务的镜像。你可以根据自己的需求修改 Dockerfile 中的构建步骤。
  • backend/src:后端服务的源代码所在目录。
  • backend/logs:存放容器日志的目录,通过 volumes 配置与宿主机同步。

这种目录结构确保了每个服务的代码和配置文件有清晰的分层,避免了代码混乱或服务间的依赖问题。

5. 启动成功后的展示

启动成功后,你还可以查看后台运行的服务状态:

docker-compose ps

以下是一个启动成功的示意图,可以看到这里提示拉取镜像失败,然后执行了本地构建并启动。

Docker Compose 启动成功示意图,本地构建优先

6. 总结:提高开发效率与灵活性

通过使用 Docker Compose 的 build 配置,我们可以在镜像可用时优先拉取,而没有镜像时再进行构建。这不仅提高了开发效率,还避免了在不同环境中手动构建镜像的麻烦。同时,清晰的项目目录结构和配套的 Dockerfile 使得团队成员可以更容易理解和参与到项目中。


通过上述内容,你就已经基本理解了这个方法,基础用法我也都有展示。如果你能融会贯通,我相信你会很强

Best
Wenhao (楠博万)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值