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 "
             │
             └────── 容器内部(小黑屋里的软件)
  • 🗣️ 记忆黄金口诀【左外右内】
  • 冒号左边:是你服务器暴露给外界访问的公网门牌号(可以在合规范围内随意换,比如 80808888);
  • 冒号右边:是容器内部程序天生监听的端口(不能瞎改,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.yamlhtml/ 目录均已成功创建。

第 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 versiondocker compose version 均能正常返回版本号;
  • [ ] 左外右内烂熟于心:明白 8080:80 对应的主机与容器关系,不会再配反端口;
  • [ ] 数据与生命周期解耦:所有需要持久保存的文件均挂载在外部宿主机目录中,容器随时可删可重建;
  • [ ] 高频管理操作跟手:能够熟练使用 up -dpslogs -f 查看服务健康度与报错;
  • [ ] 开机自愈配置合规:生产容器均声明了 unless-stopped,哪怕宿主机重启,服务也会在后台自动唤醒!