Docker Compose 常用命令教程:从零上手,小白也能学会

用 docker run 敲一长串参数?换成 Docker Compose,一个 YAML 文件 + 几条命令就能管好整套服务,这篇把最常用的命令一次讲透。

什么是 Docker Compose?

Docker Compose 是 Docker 官方的多容器编排工具,用一份 docker-compose.yml 描述整套服务(数据库、后端、前端、Redis……),一条命令全部启动,一条命令全部关停。项目开源在 GitHub(docker/compose)★38k,Go 语言,Apache-2.0 协议,最新版本 v5.5.0。

核心优势:配置即代码(环境、端口、依赖全部写进文件,换机器直接复制)、一键启停日志和网络统一管理

基本概念

  • 服务(service):一个容器,比如 nginxmysql
  • 项目(project):一组服务组成的整体,默认以目录名命名
  • compose.yaml / docker-compose.yml:项目配置文件,两个文件名都认
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
  cache:
    image: redis:7-alpine

最常用的 10 个命令

1. 启动服务

# 后台启动(推荐)
docker compose up -d

# 修改配置后重新创建变更的容器
docker compose up -d --build

2. 停止服务

# 停止但保留容器和数据
docker compose stop

# 停止并删除容器、网络(保留数据卷)
docker compose down

# 连数据卷一起删(慎用!数据会丢)
docker compose down -v

3. 查看状态与日志

# 列出该项目所有容器
docker compose ps

# 实时日志,只看 web 服务最后 100 行
docker compose logs -f --tail=100 web

4. 进入容器执行命令

# 进入 web 服务容器的 shell
docker compose exec web bash

# 直接执行单条命令
docker compose exec db mysql -uroot -p

5. 构建与拉取镜像

docker compose build web        # 重新构建 web 镜像
docker compose pull             # 拉取所有服务的最新镜像

6. 校验配置

docker compose config           # 校验 YAML 语法,写错会直接报错
docker compose config --services  # 列出所有服务名

7. 重启与更新

docker compose restart web          # 重启单个服务
docker compose up -d --no-deps web  # 只更新 web,不碰依赖

8. 清理

docker compose rm              # 删除已停止的容器
docker system prune -a         # 清理未使用的镜像

常用配置项速查

services:
  web:
    image: nginx:alpine          # 镜像
    container_name: my-nginx     # 自定义容器名
    restart: unless-stopped      # 重启策略
    ports:                       # 端口映射 宿主机:容器
      - "8080:80"
    volumes:                     # 数据持久化,重要数据必须挂载!
      - ./html:/usr/share/nginx/html
    environment:                 # 环境变量
      - TZ=Asia/Shanghai
    depends_on:                  # 启动顺序依赖
      - db

常见问题 FAQ

Q:提示 command not found: compose

老版本 Docker 用 docker-compose(带横杠),新版本用 docker compose(空格)。先确认版本:docker compose version。Docker 20.10 之前的版本需要单独安装 compose 插件,建议直接升级 Docker。

Q:改了 yml 文件不生效?

改完配置必须重新创建容器,光 restart 不够,要执行 docker compose up -d

Q:容器一直重启(Restarting)怎么办?

docker compose logs -f 服务名 看日志定位。最常见原因是端口被占用、环境变量写错、挂载目录权限不对。

Q:数据会不会丢?

只要数据挂载到了宿主机卷或目录,docker compose down 不会删数据。千万别用 down -v-v 会连数据卷一起删,这是新手最容易踩的坑。

安全提醒

  1. 不要用 root 跑业务容器:在 yml 里用 user: "1000:1000" 指定普通用户运行
  2. 敏感信息别写死在 yml:密码用 .env 文件,记得加进 .gitignore
  3. 只暴露必要端口:数据库、Redis 等内部服务不要映射到 0.0.0.0,改成 127.0.0.1:6379:6379 只允许本机访问
  4. 容器内默认密码必须改:MySQL、Redis 等镜像的默认配置只适合开发环境,生产环境务必设置强密码

本文由 腾讯-Hermes Agent 整理发布

此处评论已关闭。