Docker Compose 安装、部署与使用说明
所属分类 docker
浏览量 9
Docker Compose 是 Docker 官方的容器编排工具,
通过一个 YAML 文件定义多容器应用的服务、网络、存储等,
用一条命令即可完成整个应用的启动、停止、管理,大幅简化多容器应用的部署与运维。
一、前置条件
必须先安装 Docker Engine(Docker 核心引擎),Docker Compose 依赖其运行。
Windows/macOS:安装 Docker Desktop 会自动包含 Docker Compose(v2 版本)。
Linux:需先安装 Docker Engine,再单独安装 Docker Compose
二、Docker Compose 安装(2026 最新版)
1. Linux 系统(CentOS/Ubuntu/Debian)
方式 1:官方二进制安装(推荐,v2 最新版)
# 1. 下载最新版(自动适配系统架构,国内用ghproxy加速)
sudo curl -L "https://mirror.ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 2. 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 3. (可选)创建软链接(兼容旧命令docker-compose)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 4. 验证安装
docker-compose --version
# 或新版命令(Docker CLI插件)
docker compose version
# 输出示例:Docker Compose version v2.27.1
方式 2:pip 安装(依赖 Python3)
# 安装pip3
sudo yum install python3-pip -y # CentOS/RHEL
sudo apt install python3-pip -y # Ubuntu/Debian
# 安装Docker Compose
sudo pip3 install docker-compose
# 验证
docker-compose --version
2. Windows/macOS 系统
安装 Docker Desktop(官网下载),安装完成后自动集成 Docker Compose v2。
验证:打开终端 / PowerShell,执行
docker compose version
3. Windows Server 安装
powershell
# 以管理员身份运行PowerShell
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest "https://mirror.ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-Windows-x86_64.exe" -UseBasicParsing -OutFile $Env:ProgramFiles\Docker\docker-compose.exe
# 验证
docker-compose --version
三、核心概念:docker-compose.yml 配置文件
Compose 通过 YAML 文件 定义应用
默认名 docker-compose.yml/compose.yaml
核心字段如下:
字段/作用/示例
version Compose 文件版本(v2 无需显式声明) version: '3.8'
services 定义所有容器服务(核心) services: {web, db, redis}
image 指定容器镜像 image: nginx:1.25
container_name 自定义容器名 container_name: my-nginx
ports 端口映射(宿主机:容器) ports: ["80:80", "443:443"]
volumes 数据卷挂载(持久化) volumes: ["./html:/usr/share/nginx/html"]
environment 环境变量 environment: ["MYSQL_ROOT_PASSWORD=123456"]
depends_on 服务依赖(启动顺序) depends_on: [db]
restart 重启策略 restart: always(always/on-failure/unless-stopped)
networks 自定义网络 networks: {app-net: {driver: bridge}}
四、应用部署实战(以 Nginx+MySQL+PHP 为例)
步骤 1:创建项目目录与配置文件
# 创建项目目录
mkdir my-web-app && cd my-web-app
# 创建docker-compose.yml
vim docker-compose.yml
步骤 2:编写 docker-compose.yml
version: '3.8'
# 自定义网络(服务间互通)
networks:
app-network:
driver: bridge
# 数据卷(持久化MySQL)
volumes:
mysql-data:
# 定义服务
services:
# MySQL服务
mysql:
image: mysql:8.0
container_name: app-mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: mydb
volumes:
- mysql-data:/var/lib/mysql
networks:
- app-network
restart: always
# PHP服务
php:
image: php:8.2-fpm
container_name: app-php
volumes:
- ./html:/var/www/html
networks:
- app-network
depends_on:
- mysql
restart: always
# Nginx服务
nginx:
image: nginx:1.25
container_name: app-nginx
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
networks:
- app-network
depends_on:
- php
restart: always
步骤 3:补充 Nginx 配置
创建 nginx.conf:
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.php index.html;
location ~ \.php$ {
fastcgi_pass php:9000; # 用服务名访问PHP
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
步骤 4:创建网站目录
mkdir html
echo "" > html/index.php
五、Docker Compose 常用命令(核心)
1. 启动应用
# 前台启动(日志打印到终端)
docker-compose up
# 后台启动(-d:detached,推荐)
docker-compose up -d
# 启动并重新构建镜像(Dockerfile修改后)
docker-compose up -d --build
```{insert\_element\_1\_}
### 2. 停止/删除应用
# 停止服务(不删除容器/网络/卷)
docker-compose stop
# 启动已停止的服务
docker-compose start
# 停止并删除容器、网络(保留数据卷)
docker-compose down
# 停止并删除容器、网络、数据卷(谨慎!数据会丢失)
docker-compose down -v
3. 查看状态与日志
# 查看服务状态
docker-compose ps
# 实时查看所有日志
docker-compose logs -f
# 查看指定服务日志(如nginx)
docker-compose logs -f nginx
### 4. 进入容器(调试)
# 进入Nginx容器bash
docker-compose exec nginx bash
# 进入MySQL容器执行命令
docker-compose exec mysql mysql -uroot -proot123
5. 其他常用命令
# 验证配置文件语法
docker-compose config -q
# 拉取最新镜像
docker-compose pull
# 重启所有/指定服务
docker-compose restart
docker-compose restart nginx
# 扩展服务实例(如启动3个PHP)
docker-compose up -d --scale php=3
六、生产环境部署最佳实践
版本固定:镜像指定具体版本(如 nginx:1.25 而非 latest),避免更新导致不兼容。
数据持久化:关键数据(MySQL、上传文件)必须用 volumes 挂载,防止容器删除丢失数据。
重启策略:生产环境设置 restart: always,保证服务异常后自动恢复。
网络隔离:使用自定义 networks,避免服务暴露到公网。
日志管理:配置日志驱动(如 json-file/fluentd),防止日志占满磁盘。
安全配置:MySQL 不映射 3306 端口到公网,环境变量用 .env 文件管理(敏感信息不写在 YAML)
七、常见问题
命令不生效:
旧版:用 docker-compose(v1);新版:用 docker compose(v2,Docker CLI 插件)。
权限问题:添加 sudo 或将用户加入 docker 组。
端口冲突:修改 ports 宿主机端口(如 8080:80)。
服务无法互通:确保服务在同一 networks 下,用服务名作为域名访问(如 mysql:3306)。
docker-compose.yml 通用标准模板
version: '3.8'
# 自定义数据卷(用于数据持久化)
volumes:
mysql_data: # 自定义名称,随便改
redis_data: # 自定义名称,随便改
# 自定义网络(服务之间内网互通)
networks:
app_net: # 网络名,自定义,随便改
driver: bridge
# 服务定义(核心)
services:
# ======================================
# Nginx 示例服务(服务名可自定义)
# ======================================
nginx:
image: nginx:alpine
container_name: my-nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./html:/usr/share/nginx/html
networks:
- app_net
# ======================================
# MySQL 数据库服务
# ======================================
mysql:
image: mysql:8.0
container_name: my-mysql
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: mydb
volumes:
- mysql_data:/var/lib/mysql
networks:
- app_net
# ======================================
# Redis 缓存服务
# ======================================
redis:
image: redis:alpine
container_name: my-redis
restart: always
ports:
- "6379:6379"
volumes:
- redis_data:/data
networks:
- app_net
# ======================================
# 后端应用(Java/Node/PHP/Python 等)
# ======================================
app:
image: your-app-image:latest # 换成你的镜像
container_name: my-app
restart: always
ports:
- "8080:8080"
depends_on:
- mysql
- redis
environment:
# 容器之间直接用服务名当域名!
DB_HOST: mysql
DB_PORT: 3306
DB_USER: root
DB_PASS: 123456
REDIS_HOST: redis
networks:
- app_net
需要修改的地方
image 换成自己的镜像
ports 端口不冲突即可
environment 里的密码、数据库名
不需要的服务(如 redis)直接删掉
配套常用命令
# 后台启动
docker-compose up -d
# 查看运行状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 重启所有服务
docker-compose restart
# 停止服务(不删数据)
docker-compose down
# 停止并删除数据卷(谨慎!数据会清空)
docker-compose down -v
上一篇
下一篇
日常正确姿势指南
核心收紧、肩胛骨夹紧 立腰立颈
windows开发环境搭建
Docker & Docker Compose 面试题精简版