背景
在容器化部署过程中,使用原生 docker run 命令存在以下痛点:
docker run --name nginx p : p : \
v nginxusrnginxhtml \
v nginxnginx.conf:nginx \
v nginxetcconf.d \
v nginxnginx \
v nginxetcssl \
privileged d restartalways nginx
Docker Compose 是 Docker 官方提供的容器编排工具,用于简化多容器应用的定义、配置和部署过程。通过 YAML 配置文件统一管理多个关联容器,解决原生 docker run 命令冗长复杂、批量操作困难及环境一致性差等问题。文章涵盖 Linux/macOS 命令行快速安装及网络受限环境下的手动安装步骤,包括版本确定、链接拼接、文件移动及权限赋予。此外提供 docker-compose.yml 配置示例及 up、down、logs、ps 等常用命令说明,辅助开发者实现本地开发环境搭建、微服务测试及 CI/CD 流程集成。

在容器化部署过程中,使用原生 docker run 命令存在以下痛点:
docker run --name nginx p : p : \
v nginxusrnginxhtml \
v nginxnginx.conf:nginx \
v nginxetcconf.d \
v nginxnginx \
v nginxetcssl \
privileged d restartalways nginx
Docker Compose 可以解决以上问题
Docker Compose 是 Docker 官方提供的容器编排工具,用于简化多容器应用的定义、配置和部署过程。它通过一个 YAML 格式的配置文件(docker-compose.yml)统一管理多个关联容器,解决以下核心问题:
典型应用场景
支持两种安装方式,推荐选择与系统架构匹配的方式
安装
# 安装 curl
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose
授予执行权限
sudo chmod +x /usr/local/bin/docker-compose
验证安装
docker-compose --version
如果使用命令下载的很慢,可以手动从 Github 下载,然后上传到服务器即可,先解释一下上面的下载命令。
curl -L
curl 自动跟随重定向。GitHub 的 Releases 链接通常会重定向到实际文件地址,此选项确保能正确下载文件。下载地址解释
https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)
uname -s:获取操作系统名称(如 Linux、Darwin(macOS))。uname -m:获取硬件架构(如 x86_64、arm64)。输出重定向
> /usr/local/bin/docker-compose
>:将 curl 下载的内容保存到指定路径。
sudo curl -L ... > /usr/local/bin/docker-compose
/usr/local/bin/docker-compose:Docker Compose 的安装路径,通常需要管理员权限才能写入。
所以,手动下载有以下几个步骤
uname -s
uname -m
https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)
使用步骤 1 的 uname -s 和 uname -m 替换掉链接中的 uname -s 和 uname -m,例如:
https://github.com/docker/compose/releases/download/1.23.1/docker-compose-Linux-x86_64
浏览器中输入该链接即可下载 docker compose 文件。
将下载好的 docker compose 文件移动到 /usr/local/bin/docker-compose 目录下即可。
赋予 docker compose 文件可执行权限。
sudo chmod +x /usr/local/bin/docker-compose
version: '3.8' # 指定兼容的 Compose 规范版本
services: # 服务定义区块
webapp: # 服务名称(自定义)
image: nginx:alpine # 基础镜像
container_name: my-nginx # 容器命名(可选)
ports:
- "80:80" # 端口映射(主机:容器)
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf # 挂载配置文件
- html:/usr/share/nginx/html # 使用命名卷
networks:
- frontend # 加入指定网络
depends_on:
- database # 声明依赖关系
database:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secure_password # 环境变量注入
volumes:
- mysql_data:/var/lib/mysql # 数据持久化
networks:
- backend
volumes: # 声明数据卷(自动创建)
html:
mysql_data:
networks: # 自定义网络(隔离通信)
frontend:
backend:
执行 docker compose(或旧版 docker-compose)命令时,默认在 当前工作目录 下查找以下文件:
若 文件不在当前目录 或使用 自定义文件名,需通过 -f(或 --file)参数指定路径:
# 指定其他目录或文件名
docker compose -f /path/to/custom-compose.yml up
# 使用多个 Compose 文件(合并配置)
docker compose -f docker-compose.yml -f docker-compose.prod.yml up
| 命令 | 作用 |
|---|---|
| docker-compose up | 启动所有服务(前台运行) |
| docker-compose up -d | 后台启动所有服务 |
| docker-compose down | 停止并删除容器、网络(保留数据卷) |
| docker-compose down -v | 停止并删除容器、网络及数据卷 |
| docker-compose logs | 查看所有服务的日志 |
| docker-compose logs -f web | 实时跟踪 web 服务的日志 |
| docker-compose ps | 查看运行中的容器状态 |
| docker-compose exec web sh | 进入 web 容器的 Shell |
| docker-compose build | 根据 build: 配置构建镜像(需在 Compose 文件中定义) |

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online