如果你曾经为“在我机器上能跑,上线就崩”这种问题头疼过,那 你绝对该掌握Docker。而当你开始搭建包含 Web、数据库、缓存等多个组件的应用时,Docker Compose 就成了不可或缺的帮手。这篇文章不讲虚的,直接上干货,从基础概念到 WordPress 实战部署,一步步带你玩转容器编排。
一、Docker 是啥?为什么值得学?
简单来说,Docker 是一个能把应用和它依赖的环境打包成“集装箱”的工具。这个“集装箱”叫容器(Container),无论你把它搬到哪台 Linux 机器上,只要装了 Docker,就能原样运行——彻底告别“环境不一致”的噩梦。
和传统虚拟机不同,Docker 不需要模拟整个操作系统,而是直接复用宿主机的内核,因此启动快、资源省、体积小。开发、测试、生产环境用同一套镜像,部署效率直线拉满。

程序员导航
优网导航旗下整合全网优质开发资源,一站式IT编程学习与工具大全网站
核心概念三件套
- 镜像(Image):相当于容器的“模板”,只读,包含代码、依赖、配置等一切运行所需。
- 容器(Container):镜像跑起来的实例,可读写,相互隔离。
- 仓库(Repository):存放镜像的地方,比如官方的 Docker Hub。
底层干活的是 Docker Engine,负责管理镜像和容器的生命周期。
二、快速安装 Docker(Ubuntu 用户看这里)
推荐用官方一键脚本安装,省心又靠谱:
# 下载并执行安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 启动服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
装完后可以用 docker --version 验证是否成功。
三、Docker 基础操作速查
1. 镜像管理
# 拉取镜像(默认 latest 标签)
docker pull nginx:1.23
docker pull redis
# 查看本地已有镜像
docker images
# 删除镜像(先删容器!)
docker rmi nginx:1.23
docker rmi -f <镜像ID> # 强制删除
💡 提示:如果本地没有指定镜像,
docker run会自动从 Docker Hub 下载。AI 工具导航
优网导航旗下AI工具导航,精选全球千款优质 AI 工具集
2. 容器操作
# 后台运行一个 Nginx 容器,映射 80 端口,命名为 my-nginx
docker run -d -p 80:80 --name my-nginx nginx:1.23
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 启停重启
docker start my-nginx
docker stop my-nginx
docker restart my-nginx
# 进入容器调试(交互式 Bash)
docker exec -it my-nginx /bin/bash
# 实时查看日志
docker logs -f my-nginx
# 删除容器
docker rm my-nginx # 先 stop
docker rm -f my-nginx # 强制删
3. 数据持久化:别让数据随容器消失!
容器一删,里面的数据就没了。解决办法是挂载数据卷:
# 方式1:绑定宿主机目录
docker run -d -p 80:80 -v /host/nginx/html:/usr/share/nginx/html --name my-nginx nginx:1.23
# 方式2:使用命名卷(推荐用于生产)
docker volume create nginx-data
docker run -d -p 80:80 -v nginx-data:/usr/share/nginx/html --name my-nginx nginx:1.23
这样即使容器重建,数据依然安全。
四、当项目变复杂:引入 Docker Compose
手动敲一堆 docker run 命令来启动 Web + DB + Redis?太原始了。Docker Compose 就是为多服务协同而生的。
它用一个 docker-compose.yml 文件定义所有服务,一条命令就能全拉起来,还能自动处理网络、依赖顺序等问题。
1. 安装 Compose(Linux)
# 从 GitHub 下载二进制(记得替换为最新版)
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 创建软链接方便调用(可选)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 验证
docker-compose --version
⚠️ 注意:Alpine 系统需额外安装 Python 和编译依赖。
2. YAML 配置文件怎么写?
docker-compose.yml 是核心,格式必须严格(缩进用空格,别混 Tab)。结构大致如下:

免费在线工具导航
优网导航旗下整合全网优质免费、免注册的在线工具导航大全
- 第一层:
version(配置版本)、services(服务列表) - 第二层:服务名(如
app,db) - 第三层:具体配置(镜像、端口、卷、环境变量等)
命名建议
- 主应用 →
app - 数据库 →
db - 缓存 →
redis或cache
名字起得清楚,后期维护少踩坑。
镜像标签别乱用 latest
虽然 wordpress:latest 很方便,但生产环境强烈建议指定具体版本(如 mysql:5.7),否则不同时间部署可能因镜像更新导致行为不一致。可以在 Docker Hub 查版本,或者用 RSS 订阅更新提醒。
五、实战:用 Compose 一键部署 WordPress
下面这个例子包含三个服务:MySQL、WordPress、Redis,展示了 Compose 如何协调多容器协作。
version: '3.0'
services:
# MySQL 数据库
db:
image: mysql:5.7
container_name: wordpress-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: yourpassword
volumes:
- './db:/var/lib/mysql' # 持久化数据库文件
networks:
- default
# WordPress 应用
app:
image: wordpress:latest
container_name: wordpress-app
restart: unless-stopped
ports:
- "18080:80" # 访问 http://你的IP:18080
environment:
WORDPRESS_DB_HOST: db # 直接用服务名通信!
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: yourpassword
volumes:
- './app:/var/www/html' # 保存主题和插件
depends_on:
- db
- redis
networks:
- default
# Redis 缓存(加速访问)
redis:
image: redis:alpine
container_name: wordpress-redis
restart: unless-stopped
volumes:
- './redis-data:/data'
networks:
- default
# 自定义网络,让服务能通过名字互相访问
networks:
default:
name: wordpress
关键点解析
- 服务间通信:
WORDPRESS_DB_HOST: db中的db就是上面定义的服务名,Compose 会自动解析为对应容器的 IP。 - 启动顺序:
depends_on确保数据库和 Redis 先跑起来,再启动 WordPress。 - 数据持久化:所有重要数据都挂载到当前目录下的子文件夹,迁移或重建容器都不怕丢数据。
- 端口映射:宿主机 18080 → 容器 80,记得开放防火墙。
📌 ARM 设备(如 M1/M2 Mac)用户注意:
mysql:5.7可能不兼容,可改用mysql:oracle。
六、常用 Compose 命令清单
# 启动服务(前台,看日志)
docker-compose up
# 后台启动(推荐)
docker-compose up -d
# 查看状态
docker-compose ps
# 停止(保留容器)
docker-compose stop
# 停止并清理容器、网络(保留数据卷)
docker-compose down
# 彻底删除(包括数据卷!慎用)
docker-compose down -v
# 更新镜像(对 :latest 有效)
docker-compose pull
# 实时看日志
docker-compose logs -f
七、总结:为什么我离不开 Compose?
Docker 解决了“环境一致性”,而 Docker Compose 解决了“多服务协同部署”的痛点。相比手动敲命令,YAML 配置文件清晰、可版本控制、易复用。换服务器?拷贝目录,docker-compose up -d,搞定。
现在我的所有项目都用 Compose 管理,连 NAS 上的小工具也不例外。它不只是个工具,更是现代 DevOps 的基本功。




