docker compose入门7—详解build命令

docker-compose build 命令用于根据 Docker Compose 文件中的 build 配置来构建服务的 Docker 镜像。它从指定的 Dockerfile 或构建上下文中构建镜像,这样你可以将定制的镜像用于你的服务。

基本用法

复制代码
docker-compose build

该命令会查看 docker-compose.yml 文件中所有定义了 build 部分的服务,并为它们构建 Docker 镜像。

详细说明

在 docker-compose.yml 文件中,如果某个服务需要构建自定义镜像,需要在该服务的定义中包含 build 配置项:

复制代码
version: '3.8'

services:
  web:
    build:
      context: ./app  # 指定 Dockerfile 的构建上下文
      dockerfile: Dockerfile  # 可选,指定要使用的 Dockerfile(默认为 Dockerfile)
    ports:
      - "8080:80"
  db:
    image: postgres  # 使用现有的镜像而不是构建

在这个示例中,web 服务有一个 build 部分,它告诉 Docker Compose 在 ./app 目录下查找 Dockerfile,并使用该文件构建镜像。db 服务则使用现成的 postgres 镜像,所以不需要构建。

常用选项

  1. 强制重建镜像(--no-cache)

    • 默认情况下,Docker 会使用构建缓存来加快镜像构建速度。使用 --no-cache 选项可以强制不使用缓存。

    • 示例:

      复制代码
      docker-compose build --no-cache
  2. 只构建特定服务

    • 如果你只想构建某个特定的服务,可以在 build 后指定服务名称。

    • 示例:

      复制代码
      docker-compose build web
  3. 强制拉取基础镜像(--pull)

    • 如果你想确保 Docker 在构建过程中使用最新版本的基础镜像(如 FROM 指定的镜像),可以使用 --pull 选项来强制从镜像仓库拉取最新的镜像。

    • 示例:

      复制代码
      docker-compose build --pull
  4. 跳过未更改的服务(--parallel)

    • Docker Compose 3.4+ 版本支持 --parallel 选项,可以并行构建服务。这对于有很多服务的项目可以加速构建过程。

    • 示例:

      复制代码
      docker-compose build --parallel

完整示例

下面是一个带有 build 配置的完整示例,包含多个服务,并使用自定义 Dockerfile 构建:

复制代码
version: '3.8'

services:
  web:
    build:
      context: ./app
      dockerfile: Dockerfile.web
      args:
        - APP_ENV=production  # 可传递构建参数
    ports:
      - "8080:80"

  api:
    build:
      context: ./api
      dockerfile: Dockerfile.api
    environment:
      - API_KEY=myapikey
    ports:
      - "8081:80"

在这个例子中:

  • web 服务和 api 服务都从各自的 Dockerfile 构建镜像。
  • web 服务的 Dockerfile 文件名是 Dockerfile.web,并且传递了构建时的参数 APP_ENV=production。
  • api 服务从 Dockerfile.api 构建,设置了环境变量 API_KEY。

总结

  • docker-compose build 用于构建 docker-compose.yml 中定义的服务镜像,主要根据 build 部分的配置进行构建。
  • 常用选项包括 --no-cache(不使用缓存)、--pull(拉取最新镜像)、--parallel(并行构建)等。
  • 可以选择构建所有服务或仅构建指定的服务。

通过灵活使用这些选项,可以高效管理和构建项目中的 Docker 镜像。

相关推荐
程序员小孔.30 分钟前
基于 SpringBoot + UniApp + Vue 的家政服务系统设计与实现
前端·数据库·spring boot·python·docker·微信小程序
ggaofeng1 小时前
k8s中的dns
云原生·容器·kubernetes
林森i11 小时前
ida 安装教程
eureka
我不会起名字32212 小时前
Redis 从 0 到 1(九):主库宕机 30 秒自动切主——1 主 2 从 3 哨兵 + Go 客户端
redis·docker·sentinel·高可用·哨兵
姜鱼问生14 小时前
每次开机手动检查 6 样东西?我写了个 2 秒自检脚本
运维·网络·nginx·docker·容器
wangqiaowq14 小时前
PostgresSQL server Docker 安装部署
运维·docker·容器
程序员阿明14 小时前
docker搭建视频流服务go2rtc,webRTC
docker·容器·webrtc
TTATTC15 小时前
让 16 个 AI 员工在飞书群自我协同:基于 OpenClaw 的多 Agent 敏捷 Squad 拓扑与一人公司实操
docker·开源
TTATTC15 小时前
从分片续传到 SPI 插件化扩展:Free-FS 企业级文件系统核心架构与万能预览技术拆解
docker·开源
JavaPub-rodert16 小时前
Docker 容器为什么 stop 半天停不下来?讲透 PID 1、SIGTERM、SIGKILL、僵尸进程与 tini
运维·docker·容器