本文是一份面向 Debian / Ubuntu 的 Docker 实战指南,重点讲清楚如何安装 Docker Engine、安装 Compose 插件、验证运行状态、管理镜像和容器、处理权限问题,以及如何在真实服务器上稳定使用。
适用场景
- 本地开发环境容器化
- 服务器上运行单个容器或多容器服务
- 使用 Docker Compose 编排应用
- 容器化部署 Web、数据库、缓存、任务队列等服务
- 需要统一运维命令和环境隔离
Docker 是什么
Docker 是一个容器运行平台。它的核心价值是:
- 把应用和运行环境打包在一起
- 减少“我本地能跑,服务器不能跑”的问题
- 更容易进行部署、回滚和隔离
Docker 的主要组件包括:
- Docker Engine:容器运行时和守护进程
- Docker CLI:命令行工具
- Docker Compose:多容器应用编排工具
安装前准备
先确认:
- 你使用的是 Debian / Ubuntu
- 有 sudo 权限
- 系统能够访问 Docker 官方仓库
- 你不需要先保留旧版冲突安装
如果系统里已经有旧版 Docker 或冲突包,建议先梳理清楚再安装。
安装 Docker Engine
Docker 官方推荐通过其仓库安装 Docker Engine 和 CLI。
1. 卸载旧包
sudo apt remove -y docker docker-engine docker.io containerd runc2. 更新索引并安装依赖
sudo apt update
sudo apt install -y ca-certificates curl gnupg3. 添加 Docker 官方 GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg如果你是 Ubuntu,把 debian 换成 ubuntu。
4. 添加 Docker 软件源
Debian 示例:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null5. 安装 Docker Engine 和 Compose 插件
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin启动服务并设置开机自启
sudo systemctl enable docker
sudo systemctl start docker查看状态:
sudo systemctl status docker正常情况下应显示 active (running)。
验证安装
查看版本:
docker version
docker compose version运行测试容器:
docker run --rm hello-world如果能输出欢迎信息,说明 Docker 可用。
Docker Compose
Docker Compose 是用 YAML 描述并运行多容器应用的工具。官方推荐使用 docker compose 子命令,也就是 Compose 插件。
常见文件名:
- compose.yaml
- docker-compose.yaml
基础命令
docker compose up -d
docker compose down
docker compose ps
docker compose logs -f
docker compose exec app sh说明
- up -d:后台启动
- down:停止并移除容器、网络
- ps:查看服务状态
- logs -f:跟随日志
- exec:进入运行中的容器
常用 Docker 命令
镜像
docker images
docker pull nginx:latest
docker rmi nginx:latest
docker build -t myapp:latest .容器
docker ps
docker ps -a
docker run --name mynginx -d -p 8080:80 nginx:latest
docker stop mynginx
docker start mynginx
docker restart mynginx
docker rm mynginx日志与进入容器
docker logs mynginx
docker logs -f mynginx
docker exec -it mynginx sh卷与网络
docker volume ls
docker volume inspect mydata
docker network ls
docker network inspect bridge基础运行模型
一个 Docker 容器的典型启动模式包括:
- 后台运行
- 端口映射
- 环境变量
- 挂载卷
- 自定义网络
示例:
docker run -d \
--name web \
-p 8080:80 \
-e APP_ENV=prod \
-v /srv/web/data:/data \
nginx:latestCompose 示例
一个简单的 compose.yaml 示例:
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
restart: unless-stopped启动:
docker compose up -d数据持久化
容器本身是短生命周期的,重要数据要放到卷或宿主机目录。
推荐方式:
- 数据库数据使用 volume
- 应用上传文件使用 volume 或宿主目录
- 配置文件按需挂载
示例:
docker run -d --name db \
-v mysql-data:/var/lib/mysql \
mysql:8.0网络
Docker 默认会创建桥接网络。常见做法是:
- 前端服务暴露端口
- 后端服务只在内部网络通信
- 数据库不要直接对公网暴露
查看网络:
docker network ls权限与用户
直接使用 docker 组
把用户加入 docker 组后,可以不用每次都写 sudo:
sudo usermod -aG docker $USER然后重新登录生效。
风险说明
Docker 组权限非常高,接近主机管理员权限。不要把不可信用户加入该组。
Rootless Mode
Docker 官方支持 rootless mode,用非 root 用户运行 Docker daemon 和容器。它更适合对安全隔离要求更高的环境。
适合场景:
- 开发机
- 受限环境
- 希望减少 daemon root 风险
前提条件:
- 安装 uidmap
- 系统有 newuidmap / newgidmap
- 配好 /etc/subuid 和 /etc/subgid
如果你只是一般服务器部署,先用常规模式通常更简单。
清理资源
删除停止的容器
docker container prune删除无用镜像
docker image prune删除无用卷
docker volume prune一次性清理
docker system prune注意:
- 卷删除要非常小心,可能会丢数据
- 清理前先确认数据是否已经备份
日志排查
看容器日志
docker logs -f myapp看 Docker 服务日志
sudo journalctl -u docker -xe看容器详细信息
docker inspect myapp常见问题
1. docker: command not found
说明 Docker 没安装成功,或者 PATH 没刷新。
2. permission denied while trying to connect to the Docker daemon socket
通常是:
- 没用 sudo
- 用户不在 docker 组
- Docker 服务没起来
3. 容器端口访问不到
检查:
- -p 映射是否正确
- 宿主机防火墙是否放行
- 应用是否监听容器内正确端口
4. Compose 启动失败
检查:
- YAML 缩进
- 镜像名
- 环境变量
- 卷路径
5. 容器退出后立刻停止
常见原因:
- 主进程已结束
- 启动命令错误
- 应用配置异常
先看:
docker logs <container>安全建议
- 不要把 Docker 暴露到不可信网络
- 不要把密钥直接写进镜像
- 不要把数据库端口直接暴露公网
- 生产环境尽量使用最小权限容器
- 持久化数据要做备份
最小可用流程
如果你只想快速安装一遍,顺序可以是:
sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable docker
sudo systemctl start docker
docker run --rm hello-world
docker compose version结论
Docker 的核心不是“会拉镜像”,而是:
- 明确 Engine、CLI、Compose 的关系
- 正确安装官方仓库版本
- 学会端口、卷、网络和环境变量
- 理解权限模型和 rootless 的边界
- 用 Compose 管理多容器应用