首页  

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 面试题精简版