文章目录
- [一、Docker 安装](#一、Docker 安装)
-
- [1. Ubuntu / Debian(官方仓库)](#1. Ubuntu / Debian(官方仓库))
- [2. RHEL / CentOS / Rocky / AlmaLinux](#2. RHEL / CentOS / Rocky / AlmaLinux)
- [3. 验证](#3. 验证)
- [4. macOS / Windows(Docker Desktop)](#4. macOS / Windows(Docker Desktop))
- [二、Docker Compose(V2)安装与基本用法](#二、Docker Compose(V2)安装与基本用法)
-
-
- 1) 验证 验证)
- 2) 最小示例(Nginx + Redis) 最小示例(Nginx + Redis))
-
- [三、Docker Runtime(运行时)配置](#三、Docker Runtime(运行时)配置)
-
- [1. daemon.json(核心配置)](#1. daemon.json(核心配置))
- [2. GPU(NVIDIA)运行时](#2. GPU(NVIDIA)运行时)
- [3. containerd 补充](#3. containerd 补充)
- 四、常用运维操作
-
- [1. 设置开机自启 / 状态查看](#1. 设置开机自启 / 状态查看)
- [2. 清理空间](#2. 清理空间)
- [3. 卸载(Linux)](#3. 卸载(Linux))
- 五、三件套示例(可直接上手)
- 六、应用场景对比
-
- 1) Docker(引擎) Docker(引擎))
- 2) Docker Compose Docker Compose)
- 3) Docker Runtime(运行时) Docker Runtime(运行时))
- 七、常见问题速解
本文涵盖:
- Docker 安装(Linux / Windows / macOS)
- Docker Compose 安装与使用
- Docker Runtime(运行时)配置(含 GPU、日志、cgroup 驱动等)
- 常见验证、开机自启、卸载清理
- 应用场景(分别说明 Docker / Compose / Runtime 适用的典型场景)
- 赠送一个可直接
docker compose up -d
跑起来的三件套示例(Nginx + Redis + MySQL)
说明:示例命令尽量采用官方推荐做法;Linux 以 Ubuntu/Debian 与 RHEL/CentOS/Rocky/AlmaLinux 两大系为主;Windows 建议 Docker Desktop(WSL2);macOS 用 Docker Desktop。
如机器在生产环境,请在变更前纳入变更/回滚计划。
一、Docker 安装
1. Ubuntu / Debian(官方仓库)
bash
# 1) 清理旧版本(可选)
sudo apt-get remove -y docker docker-engine docker.io containerd runc || true
# 2) 依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
# 3) 安装 GPG key & 源(Ubuntu/Debian 通用)
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/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/$(. /etc/os-release; echo "$ID") \
$(. /etc/os-release; echo "$VERSION_CODENAME") stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 4) 安装 Docker 引擎 + Buildx + Compose v2 插件
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
# 5) 开机自启 & 立即启动
sudo systemctl enable --now docker
# 6) 非 root 使用(可选)
sudo usermod -aG docker $USER
# 重新登录后 `docker ps` 不需要 sudo
2. RHEL / CentOS / Rocky / AlmaLinux
bash
# 1) 清理旧版本(可选)
sudo yum remove -y docker docker-client docker-client-latest docker-common \
docker-latest docker-latest-logrotate docker-logrotate docker-engine || true
# 2) 启用官方仓库
sudo yum install -y yum-utils
# (CentOS/Rocky/AlmaLinux 通常使用 centos repo;RHEL 用 rhel repo)
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 3) 安装
sudo yum install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
# 4) 开机自启 & 立即启动
sudo systemctl enable --now docker
# 5) 非 root 使用(可选)
sudo usermod -aG docker $USER
✅ 快速脚本方式(所有 Linux):
curl -fsSL https://get.docker.com | sh
适合实验/内网镜像环境;生产建议按上面"官方仓库"方式做可控安装。
3. 验证
bash
docker version
docker info
docker run --rm hello-world
看到 Hello from Docker!
即成功。
4. macOS / Windows(Docker Desktop)
-
macOS :下载 Docker Desktop(Apple Silicon/Intel 对应版本)→ 安装 → 运行 → 允许权限 → 终端
docker version
验证。 -
Windows 10/11 :启用 WSL2 与虚拟化 → 安装 Docker Desktop → Settings 里启用 "Use the WSL 2 based engine" → 选择要集成的 WSL 发行版 →
docker version
验证。powershell# 开启/升级 WSL(需要管理员 PowerShell) wsl --install wsl --update
二、Docker Compose(V2)安装与基本用法
Compose v2 已作为 Docker 插件安装(上面 Linux 步骤已包含),命令为
docker compose
(注意空格)。旧版
docker-compose
(v1)已不再推荐。
1) 验证
bash
docker compose version
2) 最小示例(Nginx + Redis)
docker-compose.yml
yaml
services:
nginx:
image: nginx:1.27-alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- redis
redis:
image: redis:7-alpine
ports:
- "6379:6379"
command: ["redis-server", "--appendonly", "yes"]
volumes:
- redis-data:/data
volumes:
redis-data:
常用命令
bash
docker compose up -d # 后台启动
docker compose ps # 查看状态
docker compose logs -f # 跟日志
docker compose down # 停止并移除
docker compose down -v # 顺带删卷(谨慎)
三、Docker Runtime(运行时)配置
Docker 的"运行时"本质是容器底层执行环境(默认 runc
;也可以配置 nvidia-container-runtime
以用 GPU)。常见还会一起配置 cgroup 驱动、日志、镜像加速、私有仓库认证等。
1. daemon.json(核心配置)
文件 :/etc/docker/daemon.json
(无则新建)
json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": { "max-size": "100m", "max-file": "3" },
"registry-mirrors": [
"https://registry-1.docker.io" // 可替换为你的镜像加速/私有代理
]
// 如需 GPU,见下方 "runtimes" 配置
}
应用配置:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info | grep -i cgroup
2. GPU(NVIDIA)运行时
前提:主机已安装 NVIDIA 显卡驱动。
安装工具包(Linux)
bash
# 以 Ubuntu 为例(其他发行版见 nvidia-container-toolkit 文档)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list \
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
测试(无需改默认 runtime)
bash
docker run --rm --gpus all nvidia/cuda:12.5.0-base-ubuntu22.04 nvidia-smi
(可选)设置默认 runtime 为 nvidia
json
// /etc/docker/daemon.json
{
"runtimes": {
"nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] }
},
"default-runtime": "nvidia"
}
重启 Docker 后,普通 docker run
即可使用 GPU。
3. containerd 补充
- 安装 Docker 会同时安装 containerd.io(Docker 底层默认使用 containerd 管理镜像与容器)。
- 如你运行 Kubernetes ,建议统一使用 systemd cgroup driver (上面的
exec-opts
已设置),避免 cgroup 驱动不一致导致的资源管理问题。
四、常用运维操作
1. 设置开机自启 / 状态查看
bash
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker
2. 清理空间
bash
docker system df # 查看空间占用
docker image prune -f # 清理悬挂镜像
docker container prune -f # 清理已退出容器
docker volume prune -f # 清理无用卷(谨慎)
docker builder prune -f # 清理构建缓存
3. 卸载(Linux)
bash
# Ubuntu/Debian
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -rf /var/lib/docker /var/lib/containerd
# RHEL/CentOS 系
sudo yum remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -rf /var/lib/docker /var/lib/containerd
五、三件套示例(可直接上手)
目录结构
my-stack/
├─ docker-compose.yml
├─ nginx.conf
└─ .env
.env
(可选,放数据库密码)
env
MYSQL_ROOT_PASSWORD=passw0rd
MYSQL_DATABASE=appdb
MYSQL_USER=appuser
MYSQL_PASSWORD=app123
nginx.conf
(最小反代静态示例)
nginx
events {}
http {
server {
listen 80;
location / {
return 200 'hello from nginx in docker\n';
add_header Content-Type text/plain;
}
}
}
docker-compose.yml
yaml
services:
nginx:
image: nginx:1.27-alpine
ports: ["80:80"]
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on: [redis, mysql]
redis:
image: redis:7-alpine
command: ["redis-server","--appendonly","yes"]
volumes: [redis-data:/data]
mysql:
image: mysql:8.4
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
ports: ["3306:3306"]
volumes: [mysql-data:/var/lib/mysql]
command: ["mysqld","--default-authentication-plugin=caching_sha2_password"]
volumes:
redis-data:
mysql-data:
启动
bash
docker compose up -d
docker compose ps
curl http://localhost:80
六、应用场景对比
1) Docker(引擎)
- 一次打包、处处运行:打包你的 Python/Java/Go/Node 服务镜像,开发/测试/生产环境一致。
- 单服务快速交付:跑一个独立的 API、Nginx、MySQL 临时实例、CI/CD 的构建/测试任务容器。
- 隔离与限额 :通过
--cpus --memory --pids-limit
做轻量资源管理。 - 边缘/IoT:在边缘设备上部署轻量应用(可配合 Watchtower 做自动更新)。
2) Docker Compose
- 本地/单机多服务编排:前端 + 后端 + DB + 缓存 一条命令启动,适合开发联调与小型部署。
- 集成测试 :在 CI 里用 Compose 起依赖(DB/Cache/Queue),跑完就
down
清理。 - 可迁移 demo :把环境描述写在
docker-compose.yml
,他人拉取后一键复现。
3) Docker Runtime(运行时)
- GPU/AI 场景 :通过
nvidia-container-runtime
为训练/推理容器开放 GPU。 - 日志/审计/资源治理 :统一
daemon.json
配置日志轮换、默认 cgroup 驱动,降低故障率。 - 与 K8s 对齐策略:在需要与 Kubernetes 共存/迁移的场景里,统一 cgroup driver、容器运行时(containerd)策略,减少环境差异问题。
七、常见问题速解
permission denied
访问 Docker :加入docker
组后需要重新登录或newgrp docker
。- 镜像拉取慢 :配置可靠的
registry-mirrors
(公司内网代理更稳)。 - 容器日志爆盘 :
daemon.json
里配置json-file
的max-size/max-file
;或换local
驱动。 - GPU 不可见 :确认宿主机 NVIDIA 驱动 +
nvidia-container-toolkit
安装无误,并用--gpus
测试。 - 端口占用 :换
ports
,或lsof -i :<port>
排查已有进程。