【Docker】Docker Compose 的安装与基本使用
目录
- 背景
- 简介
- 一、下载
- 1.1 命令行快速安装(Linux/macOS)
- 1.2 手动安装(网络受限环境)
- 1.2.1 确定版本信息
- 1.2.2 拼接下载链接
- 1.2.3 移动文件到指目录下
- 1.2.4 赋予文件可执行权限
- 二、 基本使用
- 2.1 常用命令
背景
在容器化部署过程中,使用原生 docker run
命令存在以下痛点:
docker run --name nginx -p 80:80 -p 443:443
-v /data/nginx/html:/usr/share/nginx/html
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf/
-v /data/nginx/conf.d:/etc/nginx/conf.d/
-v /data/nginx/logs:/var/log/nginx
-v /data/nginx/ssl:/etc/nginx/ssl
--privileged=true -d --restart=always nginx
- 命令冗长复杂:多参数拼接导致可读性差,维护成本高
- 批量操作困难:多容器场景需重复执行命令,缺乏统一管理
- 环境一致性差:人工输入易出错,难以保证配置统一
Docker Compose
可以解决以上问题
简介
Docker Compose 是 Docker 官方提供的容器编排工具,用于简化多容器应用的定义、配置和部署过程。它通过一个 YAML 格式的配置文件(docker-compose.yml
)统一管理多个关联容器,解决以下核心问题:
- 简化多容器应用部署
允许通过单一配置文件定义多个服务(如 Web 应用、数据库、缓存等),无需手动编写复杂 docker run 命令链,实现一键启动 / 停止所有关联容器。 - 统一环境配置
将容器依赖(镜像版本、网络、端口映射、数据卷、环境变量等)集中声明,确保开发、测试、生产环境的一致性,避免因环境差异导致的运行问题。 - 自动化服务依赖管理
支持定义服务间的启动顺序和依赖关系(如先启动数据库再启动应用),确保容器按逻辑顺序初始化。 - 隔离与复用性
通过独立网络和卷配置,隔离不同项目的容器环境,同时复用同一物理机的资源,提升开发效率。
典型应用场景
- 本地开发环境搭建:快速启动包含前后端服务、数据库、消息队列等的完整开发栈。
- 微服务架构测试:模拟多服务交互场景,验证服务间的通信和容错机制。
- CI/CD 流程集成:在自动化流水线中通过 Compose 文件定义测试环境,实现快速验证。
一、下载
支持两种安装方式,推荐选择与系统架构匹配的方式
1.1 命令行快速安装(Linux/macOS)
安装
# 安装
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
1.2 手动安装(网络受限环境)
如果使用命令下载的很慢,可以手动从Github下载,然后上传到服务器即可,先解释一下上面的下载命令
curl -L
- curl:命令行工具,用于通过 URL 传输数据(如下载文件)。
- -L:让
curl
自动跟随重定向。GitHub 的 Releases 链接通常会重定向到实际文件地址,此选项确保能正确下载文件。
下载地址解释
https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m`
- 版本号 1.23.1:指定要下载的 Docker Compose 版本,可替换为其他版本号。
- 动态生成文件名:
uname -s
:获取操作系统名称(如 Linux、Darwin(macOS))。
uname -m
:获取硬件架构(如 x86_64、arm64)。
最终文件名示例:
Linux 64 位系统 → docker-compose-Linux-x86_64
macOS ARM 架构 → docker-compose-Darwin-arm64
输出重定向
> /usr/local/bin/docker-compose
>
:将 curl 下载的内容保存到指定路径。/usr/local/bin/docker-compose
:Docker Compose 的安装路径,通常需要管理员权限才能写入。- 若权限不足,需在命令前加 sudo,即:
sudo curl -L ... > /usr/local/bin/docker-compose
所以,手动下载有以下几个步骤
1.2.1 确定版本信息
uname -s
uname -m
1.2.2 拼接下载链接
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
文件,建议使用科学上网或者使用下载器下载(IDM,迅雷)
1.2.3 移动文件到指目录下
将下载好的docker compose
文件移动到/usr/local/bin/docker-compose
目录下即可
1.2.4 赋予文件可执行权限
赋予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:
2.1 常用命令
执行 docker compose(或旧版 docker-compose)命令时,默认在当前工作目录
下查找以下文件:
- docker-compose.yml
- docker-compose.yaml
若文件不在当前目录
或使用自定义文件名
,需通过 -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 文件中定义) |