docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker build 和compose

docker build 和compose 学习笔记

作者:AI算法网奇

Docker build构建镜像,docker-compose up -d启动多容器应用,前者需Dockerfile,后者需docker-compose.yml,Compose可自动调用Build或使用现有镜像,协同提升开发效率与环境一致性,本文给大家分享docker build 和compose 学习笔记,感兴趣的朋友一起看看吧

docker build 和 docker compose up -d 是 Docker 生态系统中两个不同的命令,用于不同的场景。以下是它们的核心区别:

docker build 笔记

docker build -t my-app:1.0 . 

是的,docker build -t my-app:1.0 . 命令会自动读取当前目录下的 Dockerfile(文件名必须严格为 Dockerfile,大小写敏感)。以下是详细说明:

1. 路径解析

docker build -t my-app:1.0 -f ./subdir/CustomDockerfile .

2. 关键注意事项

  1. Dockerfile 必须存在:
    如果当前目录没有 Dockerfile,会报错:

ERROR: Cannot locate specified Dockerfile: Dockerfile

  1. 构建上下文的影响

    • Docker 会将上下文目录的所有文件发送给守护进程(可能导致传输量大)。

    • 通过 .dockerignore 文件可排除不需要的文件(类似 .gitignore)。

  2. 镜像标签(-t):
    -t my-app:1.0 为生成的镜像指定名称和标签,后续可通过 docker run my-app:1.0 运行。

2.docker compose up -d

作用
根据 docker-compose.yml 文件启动和管理多容器应用(包括构建镜像、创建网络、挂载卷等)。

关键特点

示例

docker compose up -d  # 根据 docker-compose.yml 启动所有服务(-d 表示后台运行)

核心区别对比

特性docker builddocker compose up -d
作用对象单个镜像多容器应用(服务、网络、卷等)
输入文件Dockerfiledocker-compose.yml
输出结果生成镜像启动容器(可能包含构建镜像的步骤)
典型场景构建自定义镜像部署完整的多服务环境
依赖关系不涉及其他容器可定义服务间的依赖(如数据库先启动)
网络/卷管理自动创建网络和卷

常见工作流

  1. 开发阶段

    • 用 docker build 构建镜像。

    • 用 docker compose up 测试多服务交互。

  2. 生产部署

    • 直接使用 docker compose up -d(如果 docker-compose.yml 中已定义镜像来源)。

  3. 调试

    • docker build 失败时检查 Dockerfile

    • docker compose up 失败时检查服务配置或日志。

补充说明

1. 功能区别

命令/工具docker builddocker compose
核心职责构建镜像(从 Dockerfile 生成镜像)编排多容器应用(定义和运行多服务环境)
输入文件Dockerfiledocker-compose.yml
操作对象单个镜像多个容器、网络、存储卷等资源
典型场景将代码打包成可运行的镜像一键启动完整的应用栈(如 Web + DB + Redis)

2. 协作关系

场景 1:Compose 自动调用 Build

如果 docker-compose.yml 中定义了 build 字段,运行 docker compose up 时会自动触发 docker build

services:
  webapp:
    build: .  # 根据当前目录的 Dockerfile 构建镜像
    ports:
      - "8000:8000"

执行命令:

docker compose up -d  # 自动构建镜像并启动容器

场景 2:先 Build 后 Compose

  1. 手动构建镜像

docker build -t my-app:1.0 .
  1. 在 Compose 中引用已有镜像

services:
  webapp:
    image: my-app:1.0  # 直接使用已构建的镜像
    ports:
      - "8000:8000"
  1. 启动服务

docker compose up -d

3. 关键区别

维度docker builddocker compose
层级底层命令(镜像构建)高层工具(应用编排)
依赖只需要 Dockerfile依赖 docker-compose.yml 和镜像
是否管理容器是(创建、启动、停止容器)
网络/卷不涉及自动管理网络和存储卷

4. 为什么需要协作?

5. 实际工作流示例

开发阶段

  1. 编写 Dockerfile 定义应用环境。

  2. 编写 docker-compose.yml 配置服务依赖。

  3. 运行:

docker compose up --build  # 强制重新构建镜像并启动

生产部署

  1. 构建生产镜像:

docker build -t my-app:prod .

通过 Compose 部署:

# docker-compose.prod.yml
services:
  app:
    image: my-app:prod  # 直接使用构建好的镜像
    deploy:
      replicas: 3
  1. 启动:

docker compose -f docker-compose.prod.yml up -d

总结

到此这篇关于docker build 和compose 学习笔记的文章就介绍到这了,更多相关docker build 和compose内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文