Docker 中文操作手册(实战速查版)
适配 CentOS/RHEL 系统,聚焦实战常用命令,可直接复制执行,新手友好、重点突出,避开冷门操作,适合日常查阅和服务器实操。
一、Docker 安装与启动(CentOS/RHEL)
# 1. 安装依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 2. 添加 Docker 官方源(国内可替换为阿里云源,更快速)
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 3. 安装 Docker CE(社区版,免费常用)
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 4. 启动 Docker 服务,并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 5. 验证安装是否成功(查看版本+运行测试镜像)
docker --version
docker run hello-world✅ 说明:若国内下载镜像缓慢,可配置阿里云镜像加速器(下文有补充)。
二、镜像管理(Image)—— 容器的“模板”
2.1 搜索/拉取/查看镜像
# 搜索镜像(Docker Hub 官方仓库)
docker search nginx # 搜索所有nginx相关镜像
docker search --filter is-official=true nginx # 仅搜索官方镜像
# 拉取镜像(默认拉取 latest 最新版本)
docker pull nginx
docker pull nginx:1.25-alpine # 指定版本(alpine版本更轻便,推荐)
# 查看本地已下载的镜像
docker images # 等价于 docker image ls
docker images -q # 仅显示镜像ID(方便批量操作)
docker images -a # 显示所有镜像(含中间层镜像,一般用不到)
# 查看镜像详细信息(如镜像大小、构建历史、端口等)
docker inspect nginx:alpine
# 查看镜像的构建历史(了解镜像每层做了什么)
docker history nginx2.2 镜像构建/标签/导出/导入/删除
# 从 Dockerfile 构建镜像(当前目录下,需提前创建Dockerfile)
docker build -t my-nginx:v1 . # -t 给镜像打标签(名称:版本)
# 给镜像重新打标签(用于推送镜像到仓库、区分版本)
docker tag my-nginx:v1 username/my-nginx:v1 # username替换为自己的Docker Hub用户名
# 导出镜像为 tar 文件(用于备份、迁移)
docker save -o my-nginx.tar my-nginx:v1 # -o 指定输出文件
# 从 tar 文件加载镜像(迁移后恢复)
docker load -i my-nginx.tar # -i 指定输入文件
# 删除镜像(需先删除依赖该镜像的容器,或用 -f 强制删除)
docker rmi nginx:1.25-alpine # 删除指定版本
docker rmi -f $(docker images -q) # 强制删除所有本地镜像(谨慎使用)
# 清理无用镜像(删除未被容器使用的镜像)
docker image prune # 清理临时镜像(中间层)
docker image prune -a # 清理所有未被使用的镜像(包括标签镜像)三、容器管理(Container)—— 镜像的“运行实例”
3.1 运行容器(核心命令:docker run)
# 1. 基础运行(前台运行,退出终端则容器停止)
docker run -it nginx /bin/bash # -it 交互模式,进入容器终端
# 2. 常用实战运行(后台+命名+端口映射)
docker run -d --name my-web -p 8080:80 nginx:alpine
# -d:后台运行(守护进程)
# --name:给容器命名(方便后续操作,避免记ID)
# -p:端口映射(宿主机8080端口 → 容器80端口)
# 3. 挂载目录(宿主机文件/目录 ↔ 容器,数据持久化)
docker run -d --name my-web -p 8080:80 -v /opt/html:/usr/share/nginx/html nginx
# -v:挂载目录(宿主机路径:容器路径),修改宿主机/opt/html内容,容器内同步生效
# 4. 设置环境变量+重启策略(适合数据库等服务)
docker run -d --name my-mysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \ # 环境变量:数据库root密码
--restart=always \ # 重启策略:开机自启、容器崩溃自动重启
mysql:8
# 5. 资源限制(限制容器使用的内存、CPU,避免占用过多服务器资源)
docker run -d --name my-web -m 512m --cpus 0.5 nginx
# -m:限制内存(512m = 512MB)
# --cpus:限制CPU(0.5 = 半核)3.2 容器查看/进入/启停/删除
# 查看当前运行中的容器
docker ps
# 查看所有容器(含已停止的容器)
docker ps -a
docker ps -q # 仅显示所有容器ID(批量操作常用)
# 进入运行中的容器(推荐用 exec,退出容器不影响容器运行)
docker exec -it my-web /bin/bash # 大部分容器用 /bin/bash
docker exec -it my-web sh # alpine 系统容器用 sh(无bash)
# 查看容器日志(排查容器运行错误、服务日志)
docker logs my-web # 查看所有日志
docker logs -f my-web # 实时跟踪日志(类似 tail -f)
docker logs -t --tail 100 my-web # 显示时间戳 + 最后100行日志
docker logs --since 1h my-web # 查看最近1小时的日志
# 容器启停/重启(常用操作)
docker start my-web # 启动已停止的容器
docker stop my-web # 停止运行中的容器(优雅停止)
docker restart my-web # 重启容器
docker kill my-web # 强制终止容器(紧急情况使用)
# 删除容器(需先停止容器,或用 -f 强制删除运行中的容器)
docker rm my-web # 删除指定已停止容器
docker rm -f my-web # 强制删除运行中的容器
docker rm -f $(docker ps -aq) # 强制删除所有容器(谨慎使用)3.3 容器文件/网络/资源查看
# 宿主机 ↔ 容器 复制文件(双向复制)
# 宿主机 → 容器
docker cp index.html my-web:/usr/share/nginx/html/
# 容器 → 宿主机
docker cp my-web:/var/log/nginx/access.log ./
# 查看容器的端口映射情况(确认端口是否映射成功)
docker port my-web
# 查看容器占用的服务器资源(CPU、内存、网络等)
docker stats my-web # 实时查看
docker stats --no-stream my-web # 查看一次就退出
# 查看容器详细信息(IP、挂载、环境变量等)
docker inspect my-web四、数据卷(Volume)—— 容器数据持久化(推荐)
⚠️ 区别于目录挂载:数据卷由Docker管理,更稳定,可跨容器共享,避免宿主机目录权限问题。
# 1. 创建数据卷
docker volume create my-vol
# 2. 查看数据卷(查看所有卷、卷详情)
docker volume ls
docker volume inspect my-vol # 查看卷的存储路径等信息
# 3. 运行容器时挂载数据卷
docker run -d --name my-web -p 8080:80 -v my-vol:/usr/share/nginx/html nginx
# 数据卷 my-vol 挂载到容器的 /usr/share/nginx/html 目录
# 4. 删除数据卷(需先删除使用该卷的容器)
docker volume rm my-vol
# 5. 清理无用数据卷(删除未被容器使用的卷)
docker volume prune五、网络管理(Network)—— 容器间通信
默认网络(bridge)可满足基本通信,自定义网络更安全、更灵活(推荐用于多容器协作)。
# 1. 创建自定义网络(默认 bridge 模式,最常用)
docker network create my-net
# 2. 查看网络(所有网络、网络详情)
docker network ls
docker network inspect my-net # 查看网络中的容器、IP等
# 3. 将已运行的容器加入自定义网络
docker network connect my-net my-web
# 4. 运行容器时直接指定网络(推荐,容器间可通过容器名通信)
docker run -d --name my-db --network my-net mysql:8
# 此时 my-web 和 my-db 可通过容器名(my-web、my-db)互相访问
# 5. 断开容器与网络的连接
docker network disconnect my-net my-web
# 6. 删除自定义网络(需先断开所有容器连接)
docker network rm my-net六、Docker Compose(多容器编排)
当需要同时运行多个容器(如 Nginx+MySQL+PHP)时,用 Compose 一键管理,无需逐个启动容器。
6.1 Compose 安装
# 下载 Compose(适配 Docker v2+,若已内置则直接用 docker compose)
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 给 Compose 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version # 旧版本命令
docker compose version # 新版本命令(推荐)6.2 Compose 常用命令(需在 docker-compose.yaml 所在目录执行)
# 1. 启动所有服务(前台运行,退出终端则停止)
docker compose up
# 2. 后台启动所有服务(推荐,-d 守护进程;--build 重新构建镜像)
docker compose up -d --build
# 3. 停止并删除容器、网络(不删除数据卷)
docker compose down
# 4. 停止并删除容器、网络、数据卷(彻底清理)
docker compose down -v
# 5. 查看所有服务状态(容器运行情况)
docker compose ps
# 6. 查看指定服务的日志(实时跟踪)
docker compose logs -f web # web 是 compose 文件中定义的服务名
# 7. 重启/停止/启动所有服务
docker compose restart
docker compose stop
docker compose start
# 8. 进入指定服务的容器
docker compose exec web /bin/bash # web 是服务名6.3 示例:docker-compose.yaml(Nginx+MySQL 多容器)
在任意目录创建 docker-compose.yaml 文件,粘贴以下内容,执行 docker compose up -d 即可一键启动。
version: '3.8' # Compose 版本,与 Docker 版本匹配即可
services:
# Nginx 服务
web:
image: nginx:alpine # 镜像
ports:
- "8080:80" # 端口映射
volumes:
- ./html:/usr/share/nginx/html # 宿主机目录挂载(当前目录下的html文件夹)
- ./nginx/conf:/etc/nginx/conf.d # 挂载Nginx配置文件
networks:
- app-net # 加入自定义网络
restart: always # 重启策略
# MySQL 服务
db:
image: mysql:8 # 镜像
environment:
MYSQL_ROOT_PASSWORD: 123456 # root密码
MYSQL_DATABASE: app_db # 自动创建的数据库名
MYSQL_USER: app_user # 自动创建的用户
MYSQL_PASSWORD: app_pass # 用户密码
volumes:
- mysql-data:/var/lib/mysql # 数据卷挂载(持久化数据库数据)
networks:
- app-net # 加入自定义网络
restart: always # 重启策略
# 数据卷(持久化MySQL数据)
volumes:
mysql-data:
# 自定义网络(容器间通信)
networks:
app-net:
driver: bridge七、系统清理与状态查看
# 查看 Docker 系统信息(版本、镜像数量、容器数量、磁盘占用等)
docker info
# 查看 Docker 磁盘占用情况(镜像、容器、数据卷占用空间)
docker system df
# 一键清理(停止所有未运行容器、删除无用镜像、数据卷、网络)
docker system prune # 基础清理
docker system prune -a # 深度清理(删除所有未被使用的镜像,谨慎使用)
docker system prune -a --volumes # 彻底清理(含数据卷,谨慎使用)八、补充:国内镜像加速器(解决镜像拉取缓慢)
# 1. 创建/修改 Docker 配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.mirrors.aliyun.com", # 阿里云加速器(推荐)
"https://hub-mirror.c.163.com", # 网易加速器
"https://mirror.baidubce.com" # 百度加速器
]
}
EOF
# 2. 重启 Docker 服务,使配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker
# 3. 验证加速器是否生效(查看 Registry Mirrors 字段)
docker info九、常见问题速查
- 容器启动失败:用
docker logs 容器名查看日志,大概率是端口占用、环境变量错误、挂载目录权限问题。 - 镜像拉取失败:配置国内加速器,或检查网络,或指定具体版本(避免 latest 版本不稳定)。
- 容器无法访问:检查端口映射是否正确、网络是否连通(用
docker network inspect查看)。 - 数据丢失:用数据卷(Volume)挂载,避免直接挂载宿主机目录,防止误删宿主机文件。
(注:文档部分内容可能由 AI 生成)