一、前言
Docker 已经是现代开发者的标配技能,而 Docker Compose 更是部署多容器应用的利器。在智能体工作流(如 Dify、Coze)或微服务架构中,没有 Compose 就像只拿了一半的武器。
本文将手把手教你在 Ubuntu 22.04 上安装 Docker & Docker Compose,并且指出常见坑点和优化方案,帮你快速搭建一个稳定的容器化环境。
二、Docker 和 Compose 的关系
-
Docker Engine:单个容器的运行引擎,能用 docker run 起一个容器。
-
Docker Compose:容器编排工具,用一份 docker-compose.yml 文件,一键启动一整套服务(数据库、后端、前端、消息队列......)。
✅ 从 Docker v20.10+ 开始,Compose 已经作为插件内置在 Docker CLI 里,不需要单独安装旧版 docker-compose。
三、单容器 vs. 多容器举例
1. 只有 Docker(逐个起容器)
bash
docker run -d --name db -e POSTGRES_PASSWORD=123 postgres
docker run -d --name web --link db:db -p 3000:3000 my-web-app
要记住一堆参数,先起数据库再起 Web,麻烦又容易出错。
2. Docker Compose(批量编排)
XML
# docker-compose.yml
version: "3.8"
services:
db:
image: postgres
environment:
POSTGRES_PASSWORD: 123
volumes:
- db-data:/var/lib/postgresql/data
web:
image: my-web-app
ports:
- "3000:3000"
depends_on:
- db
volumes:
db-data:
一条命令搞定:
bash
docker compose up -d
数据库和 Web 服务一次性全部启动,卷和网络自动配置,优雅又高效。
四、安装前的准备(清理旧版本)
有些 Linux 发行版自带了非官方的 docker.io 包,会冲突。先清理:
bash
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
sudo apt-get remove -y $pkg 2>/dev/null || true
done

五、正式安装(使用官方 apt 源)
1. 添加 GPG key 和源
bash
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release; echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

2. 安装 Docker Engine + Compose 插件
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3. 允许非 root 用户使用 Docker
sudo usermod -aG docker $USER
# 重新登录 shell 生效

4. 验证安装
docker --version
docker compose version
sudo docker run --rm hello-world
看到 "Hello from Docker!" 就说明大功告成 🎉。

六、常见坑点与优化
-
重复安装 docker-compose
- 👉 新版已内置 docker compose,不要再单独安装 docker-compose 二进制
-
防火墙绕过
-
👉 Docker 暴露的端口会绕过 UFW 默认策略,需要在 DOCKER-USER 链里加规则,比如限制只允许 Tailscale等内网访问:
bash# sudo iptables -I DOCKER-USER -p tcp --dport 3000 -s 100.64.0.0/10 -j ACCEPT # sudo iptables -I DOCKER-USER -p tcp --dport 3000 -j DROP # 上面代码不需要执行,只是当你需要关闭防火墙的时候借鉴用
-
-
非 root 用户权限
👉 一定要把自己加到 docker 用户组,不然每次都要 sudo,很不方便。
-
数据持久化
👉 数据库要挂载卷(volumes),否则容器删了数据也没了。
七、在 Dify/Coze 智能体场景下的价值
像 Dify、Coze 这种智能体工作流平台,一般需要多个组件:数据库、后端、前端、向量库。
👉 直接用 Compose,一份 docker-compose.yml 一键起停,几分钟就能跑起来一个完整环境。
这就是 Compose 的威力。
八、卸载(可选)
如果以后需要完全卸载 Docker:
bash
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker /var/lib/containerd
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.gpg
👉 如果这篇文章帮你顺利装好 Docker & Compose,请点个 赞 👍 再转发给你的朋友!
👉 评论区聊聊:你在装 Docker 的时候踩过哪些坑? 说不定能帮后来人少走弯路 🚀。
参考来源: