Docker 与容器编排快速上手指南
适合谁:在 Linux 上配置环境被各种依赖冲突、版本不兼容折磨到崩溃,经常听说 Docker 神器却分不清“镜像、容器、数据卷”,害怕一重启或更新数据全丢的新手玩家。
支持系统:Debian 11/12/13、Ubuntu 20.04/22.04/24.04 LTS 等主流 Linux 系统通用。
耗时预期:约 15 ~ 25 分钟(跟着动手敲一遍,终身掌握现代运维核心底层)。
做完你将得到:彻底参透 Docker 容器化与 Compose 编排的底层逻辑;学会用一行配置拉起任意复杂开源项目;掌握数据持久化挂载安全法则与磁盘无损瘦身清理!
⚠️ 全程唯一保命铁律: 容器本身是“随时可抛弃的耗材”,所有重要数据必须挂载到宿主机目录(Volume)! 只要数据在宿主机上,无论容器被删除、升级还是崩溃重拉,你的数据都永生不死。
🧭 核心概念:搞懂 Docker 三剑客(10 秒顿悟,绝不丢数据)
很多新手刚接触 Docker 时觉得抽象,其实把它对应成我们平时电脑里的东西,一秒就能懂:
┌─────────────────────────────────────────────────────────────┐
│ 1. 镜像 (Image) ──► 【软件安装包 / 游戏光盘】 │
│ - 只读的静态模板,别人打包好的纯净系统与环境。 │
├─────────────────────────────────────────────────────────────┤
│ 2. 容器 (Container) ──► 【正在运行的程序窗口】 │
│ - 从镜像跑起来的一个活体实例,坏了直接关掉扔掉重开。 │
├─────────────────────────────────────────────────────────────┤
│ 3. 数据卷 (Volume) ──► 【插在电脑上的外接移动硬盘】 │
│ - 把你云服务器里的真实目录挂进容器里,所有生成的数据全存这, │
│ - 即使把容器杀掉,移动硬盘里的数据依然完好无损! │
└─────────────────────────────────────────────────────────────┘
- 再加一个 Docker Compose:
- 如果 Docker 是一件件独立家用电器(电冰箱、电视机、音响);
- 那 Docker Compose 就是「智能家居中控大屏」,用一个简洁的
docker-compose.yaml清单,把所有电器怎么插电、怎么联网写得明明白白,一个开关一键全开!
📋 开始前的准备清单(缺一项都别往下走)
- [ ] 一台云服务器(VPS):拥有 root 登录权限的 Linux 机器;
- [ ] 网络连通性:服务器能够正常访问外网以下载软件包;
- [ ] 云控制台安全组意识:如果容器服务需要外网访问(如 80、8080),确保云平台安全组已放行对应端口。
第 1 步:极速安装官方正版 Docker 与 Compose 引擎
不要用系统自带的陈旧软件包!直接运行 Docker 官方维护的全自动跨发行版安装引擎:
💻 【你本地的电脑】 打开终端连入服务器,进入 🖥️ 【服务器窗口】。
整段粘贴执行以下官方标准脚本:
# 1. 运行官方一键全自动安装引擎
curl -fsSL https://get.docker.com | bash
# 2. 启动 Docker 守护进程并设置为开机自启
systemctl enable --now docker
# 3. 验证 Docker 与 Compose 核心版本
docker --version
docker compose version
- ✅ 成功标志:终端屏幕清晰输出类似
Docker version 27.x.x以及Docker Compose version v2.x.x的字样。
第 2 步:彻底攻克端口映射法则(左外右内,一秒搞定)
在配置容器时,几乎所有人都会遇到形如 "8080:80" 的端口映射指令,新手常常分不清哪个是哪个:
┌───────── 宿主机(你的云服务器外壳)
│
" 8080 : 80 "
│
└────── 容器内部(小黑屋里的软件)
- 🗣️ 记忆黄金口诀:【左外右内】!
- 冒号左边:是你服务器暴露给外界访问的公网门牌号(可以在合规范围内随意换,比如
8080、8888); - 冒号右边:是容器内部程序天生监听的端口(不能瞎改,Nginx 默认就是
80,Halo 默认就是8090); - 外界访客敲
http://你的IP:8080,流量就会被精准送进容器内部的80端口!
第 3 步:第一个生产级实战(现代化 Compose 极简建站)
学会写 Compose 配置文件,是迈入现代 DevOps 的分水岭。我们来亲手拉起一个轻量、带持久化网页的 Nginx 容器。
🖥️ 【服务器窗口】 复制下面整段代码,粘贴并回车(自包含防呆脚本写入):
# 1. 创建项目独立目录
mkdir -p /opt/my-web && cd /opt/my-web
# 2. 写入自包含 docker-compose.yaml 编排清单
cat << 'EOF' > /opt/my-web/docker-compose.yaml
version: "3"
services:
web:
image: nginx:alpine
container_name: my-web-nginx
restart: unless-stopped
ports:
- "8080:80"
volumes:
# 数据持久化核心:把宿主机的 html 目录挂载进容器内部的网页根目录
- ./html:/usr/share/nginx/html
EOF
# 3. 准备一份属于你的首页网页代码
mkdir -p /opt/my-web/html
cat << 'EOF' > /opt/my-web/html/index.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>我的第一个 Docker 站点</title>
<style>
body { font-family: system-ui, sans-serif; background: #0f172a; color: #f8fafc; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; }
.card { background: #1e293b; padding: 2.5rem; border-radius: 12px; box-shadow: 0 10px 25px rgba(0,0,0,0.3); text-align: center; border: 1px solid #334155; }
h1 { color: #38bdf8; margin-top: 0; }
p { color: #94a3b8; font-size: 1.1rem; }
</style>
</head>
<body>
<div class="card">
<h1>🎉 Docker 容器启动成功!</h1>
<p>这是由 Docker Compose 驱动的轻量 Nginx 生产容器</p>
<p style="font-size: 0.9rem; color: #64748b;">数据已通过 Volume 牢牢锚定在服务器宿主机磁盘中</p>
</div>
</body>
</html>
EOF
# 4. 检查文件是否落地
ls -la /opt/my-web
- ✅ 成功标志:终端显示
docker-compose.yaml和html/目录均已成功创建。
第 4 步:一行命令后台启动与状态核查
配置文件就绪后,启动容器只需要敲一个命令。
🖥️ 【服务器窗口】 执行一键后台启动:
cd /opt/my-web
docker compose up -d
- 🗣️ 大白话:
-d代表detach(后台静默运行),启动后终端不会被霸占,你可以继续敲其他命令。
检查运行状态:
docker compose ps
- ✅ 成功标志:
my-web-nginx容器状态显示为Up,端口显示为0.0.0.0:8080->80/tcp。
现在打开你本地电脑的浏览器,输入:
http://你的服务器IP:8080
- ✅ 大功告成标志:屏幕上瞬间弹出充满极客质感的炫酷深色网页,恭喜你成功拉起了第一个容器化生产服务!🚀
第 5 步:必须刻进 DNA 的 5 个高频运维神级指令
日常管理任何 Docker 项目,只要进入该项目所在的目录(如 cd /opt/my-web),记住这 5 个命令就能横着走:
| 运维动作 | 终端命令 | 说明与效果 |
|---|---|---|
| 启动 / 更新配置 | docker compose up -d |
启动所有服务;如果改动了 yaml 配置,它会自动只重建改动的容器 |
| 查看实时运行状态 | docker compose ps |
查看哪些容器在活蹦乱跳(Up),哪些崩溃退出了(Exited) |
| 追踪实时滚动日志 | docker compose logs -f --tail=50 |
排障第一神技!查看容器报错,按 Ctrl+C 退出日志跟踪 |
| 平滑重启服务 | docker compose restart |
当服务卡顿或微调了数据后,一键重载容器进程 |
| 优雅彻底停止 | docker compose down |
停止并移除容器,但挂载的数据卷文件绝对不会丢失 |
第 6 步:磁盘瘦身与垃圾清理(防爆盘必修课)
Docker 用了几个月后,很多人的 VPS 硬盘会被塞满爆盘,这是因为每次更新版本拉取的旧镜像和临时构建缓存残留在硬盘上(被称为悬空镜像 Dangling Images)。
🖥️ 【服务器窗口】 掌握这条官方标准的安全瘦身指令:
# 安全清理所有停止的无用容器、未使用的网络以及悬空的孤儿无标签镜像
docker system prune -f
- 💡 安全承诺:这条命令绝对不会删除正在运行的容器,也不会删除你挂载在磁盘里的任何重要业务数据,只清理纯正的系统垃圾,执行完瞬间能为小 VPS 回血几个 GB 空间!
🚑 翻车急救站(新手高频卡点救砖速查)
| 异常现场 | 真实根因 | 对应一秒救命招式 |
|---|---|---|
启动时报 address already in use |
宿主机端口被抢占(比如 8080 已被别的程序占用) | 改用其他空闲端口!将 yaml 中冒号左边的端口改为 8088:80,重新 docker compose up -d。 |
容器状态显示 Restarting 反复崩溃 |
容器内部程序启动报错闪退 | 敲 docker compose logs web 看日志末尾最后几行,99% 是配置文件语法写错或数据目录权限不足。 |
| 浏览器打不开网页,提示连接超时 | 云厂商控制台外部防火墙未放行 | 登录购买服务器的网页控制台,在安全组入站规则中放行对应的 TCP 端口(如 8080)。 |
| 容器重新拉起后发现数据全没了 | 忘了配置 volumes 数据持久化挂载 |
深刻铭记:容器内部文件是临时的!必须在 yaml 里的 volumes 下把宿主机文件夹挂进去。 |
| 重启服务器后容器全关机了 | 漏写了自动重启保活参数 | 在 yaml 的 service 下补上一行 restart: unless-stopped,从此开机容器默默自动自愈! |
🎓 毕业全维度自检清单
核对以下 5 项指标,全部通过即代表你的 Docker 容器化功底已达到合格生产标准:
- [ ] 引擎与编排双就绪:终端输入
docker version与docker compose version均能正常返回版本号; - [ ] 左外右内烂熟于心:明白
8080:80对应的主机与容器关系,不会再配反端口; - [ ] 数据与生命周期解耦:所有需要持久保存的文件均挂载在外部宿主机目录中,容器随时可删可重建;
- [ ] 高频管理操作跟手:能够熟练使用
up -d、ps与logs -f查看服务健康度与报错; - [ ] 开机自愈配置合规:生产容器均声明了
unless-stopped,哪怕宿主机重启,服务也会在后台自动唤醒!
0 RESPONSES
读者回应
把读完后的余温,留在这篇文章下面。