Docker 实战命令大全
Docker 实战场景,以 Nginx 为核心示例,梳理容器生命周期、镜像管理、网络配置、数据持久化及 Compose 编排的核心命令与最佳实践。
一、容器生命周期管理
1. 基础生命周期命令
docker run
- 创建并启动容器
核心功能:基于镜像创建并启动容器,是部署应用的入口命令。Nginx 作为示例可直观展示端口映射、配置挂载等关键操作。
# 1. 基础用法:前台启动 Nginx(终端退出则容器停止)
docker run nginx:latest
# 2. 后台运行(-d)+ 命名(--name)
docker run -d --name my-nginx nginx:latest
# 3. 端口映射(-p):将容器 80 端口映射到主机 80 端口(Web 服务核心配置)
docker run -d -p 80:80 --name my-nginx-port nginx:latest
# 4. 挂载配置与资源(-v):Nginx 核心实践(配置持久化+静态资源管理)
# 挂载自定义配置文件(覆盖容器默认 nginx.conf)
docker run -d -p 80:80 \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \ # ro 只读,防止容器内误改
-v /data/nginx/html:/usr/share/nginx/html \ # 挂载静态资源目录
-v /data/nginx/logs:/var/log/nginx \ # 挂载日志目录
--name my-nginx-mount nginx:latest
# 5. 环境变量(-e)+ 重启策略(--restart):生产环境必备
docker run -d -p 80:80 \
-e "TZ=Asia/Shanghai" \ # 设置时区,确保日志时间正确
--restart=always \ # Docker 重启时自动启动,异常退出后重启
--name my-nginx-prod nginx:latest
docker start/stop/restart
- 容器状态控制
核心功能:管理已创建容器的运行状态,Nginx 服务的启停维护常用。
# 启动停止的 Nginx 容器
docker start my-nginx
# 停止运行中的 Nginx 容器(优雅关闭,等待连接处理完毕)
docker stop -t 30 my-nginx # -t 30:等待 30 秒后强制终止
# 重启 Nginx 容器(配置修改后生效常用)
docker restart my-nginx
docker kill
- 强制终止容器
核心功能:立即终止容器(发送 SIGKILL 信号),适用于 Nginx 无响应等紧急场景。
# 强制终止 Nginx 容器
docker kill my-nginx
# 批量终止多个容器(如多个 Nginx 实例)
docker kill nginx-instance1 nginx-instance2
docker rm
- 删除容器
核心功能:删除无用容器,释放资源。
# 删除已停止的 Nginx 容器
docker rm my-nginx
# 强制删除运行中的 Nginx 容器(需谨慎,会中断服务)
docker rm -f my-nginx
# 批量删除所有已停止的容器(含 Nginx)
docker rm $(docker ps -aqf "status=exited")
# 清理所有停止的容器(Docker 1.13+ 推荐)
docker container prune -f # -f 跳过确认
2. 高级生命周期命令
docker pause/unpause
- 暂停/恢复容器进程
核心功能:临时冻结容器进程,适用于 Nginx 维护时暂停流量处理。
# 暂停 Nginx 容器(暂停后无法处理请求)
docker pause my-nginx
# 恢复 Nginx 容器运行
docker unpause my-nginx
docker create
- 创建容器但不启动
核心功能:预配置容器参数(如端口、挂载),便于检查配置后再启动。
# 创建 Nginx 容器(不启动),预配置端口和挂载
docker create -p 8080:80 \
-v /data/nginx/conf:/etc/nginx/conf.d \
--name my-nginx-prepare nginx:latest
# 确认配置无误后启动
docker start my-nginx-prepare
docker exec
- 在运行容器中执行命令
核心功能:进入容器或执行命令,Nginx 配置修改、日志查看的常用方式。
# 1. 进入 Nginx 容器终端(交互式)
docker exec -it my-nginx /bin/bash
# 常用操作:查看配置(cat /etc/nginx/nginx.conf)、测试配置(nginx -t)
# 2. 非交互式执行命令(无需进入容器)
# 示例:查看 Nginx 版本
docker exec my-nginx nginx -v
# 示例:重载 Nginx 配置(修改配置后生效)
docker exec my-nginx nginx -s reload
# 3. 以 root 权限执行命令(修改系统配置时常用)
docker exec -u root -it my-nginx /bin/bash
docker rename
- 重命名容器
核心功能:调整容器名称,便于区分不同环境的 Nginx 实例(如 prod/test)。
# 将测试环境 Nginx 重命名
docker rename my-nginx my-nginx-test
二、容器操作
1. 容器查询与信息
docker ps
- 列出容器
核心功能:查看容器状态,快速定位 Nginx 服务运行情况。
# 列出运行中的容器(默认,重点关注 Nginx 状态)
docker ps
# 列出所有容器(含已停止的 Nginx 实例)
docker ps -a
# 只显示容器 ID(批量操作常用)
docker ps -q
# 过滤显示:只显示名称含 "nginx" 的容器
docker ps -a --filter "name=nginx"
# 格式化输出:显示名称、端口、状态(Nginx 运维重点关注)
docker ps -a --format "table {{.Names}}\t{{.Ports}}\t{{.Status}}"
docker inspect
- 查看容器/镜像详情
核心功能:获取容器/镜像的元数据,排查 Nginx 配置、网络、挂载等问题。
# 查看 Nginx 容器详细信息(JSON 格式,含网络、挂载、环境变量等)
docker inspect my-nginx
# 提取 Nginx 容器 IP 地址(容器间通信时常用)
docker inspect --format '{{.NetworkSettings.IPAddress}}' my-nginx
# 提取 Nginx 挂载信息(确认配置文件是否正确挂载)
docker inspect --format '{{range .Mounts}}{{.Source}} -> {{.Destination}}{{end}}' my-nginx
# 查看 Nginx 镜像元数据(构建信息、默认配置等)
docker inspect nginx:latest
docker logs
- 查看容器日志
核心功能:Nginx 访问日志和错误日志是排查 Web 服务问题的关键。
# 查看 Nginx 所有日志(默认显示 error.log,可通过配置指定)
docker logs my-nginx
# 实时跟踪 Nginx 日志(类似 tail -f,监控请求动态)
docker logs -f my-nginx
# 显示日志时间戳(定位问题时间点)
docker logs -t my-nginx
# 查看最近 100 行访问日志并实时跟踪
docker logs -f --tail=100 my-nginx
# 查看指定时间段的错误日志(如 2024-05-01 之后)
docker logs --since "2024-05-01" my-nginx
2. 容器监控与进程
docker stats
- 实时监控容器资源
核心功能:监控 Nginx 容器的 CPU、内存、网络 IO 占用,及时发现性能瓶颈。
# 监控所有容器(重点关注 Nginx 资源占用)
docker stats
# 仅监控 Nginx 容器
docker stats my-nginx
# 非交互式输出(适合脚本采集数据)
docker stats --no-stream my-nginx
docker top
- 查看容器内进程
核心功能:查看 Nginx 主进程和工作进程状态。
# 查看 Nginx 容器内所有进程
docker top my-nginx
# 输出示例:Nginx 通常有 1 个主进程(master)和多个工作进程(worker)
# 显示进程用户、PID 和命令
docker top my-nginx -o user,pid,cmd
docker events
- 监听 Docker 事件
核心功能:跟踪 Nginx 容器的启动、停止、重启等事件,便于审计和自动化。
# 实时监听所有事件(过滤 Nginx 相关)
docker events --filter "name=my-nginx"
# 监听 Nginx 容器的停止事件(持续 1 小时)
docker events --filter "container=my-nginx" --filter "event=stop" --since 1h
3. 容器文件操作
docker cp
- 容器与主机文件互传
核心功能:Nginx 配置文件更新、静态资源上传的常用方式。
# 1. 从 Nginx 容器复制文件到主机(如导出日志)
docker cp my-nginx:/var/log/nginx/access.log /data/nginx-logs/
# 2. 从主机复制文件到 Nginx 容器(如更新配置或静态页面)
# 示例:上传新的 index.html 到 Nginx 网站根目录
docker cp /data/nginx/html/new-index.html my-nginx:/usr/share/nginx/html/index.html
# 示例:更新 Nginx 子配置(conf.d 目录下)
docker cp /data/nginx/conf.d/new-site.conf my-nginx:/etc/nginx/conf.d/
# 3. 复制目录(如批量上传静态资源)
docker cp /data/nginx/static/ my-nginx:/usr/share/nginx/html/static/
docker diff
- 查看容器文件系统变更
核心功能:检查 Nginx 容器配置是否被意外修改。
# 查看 Nginx 容器的文件变更(如配置文件是否被修改)
docker diff my-nginx
# 输出说明:
# A: 新增文件(如自定义配置)
# C: 修改文件(如 nginx.conf 被修改)
# D: 删除文件
docker export
- 导出容器文件系统
核心功能:导出 Nginx 容器的完整文件系统(含配置和静态资源),用于备份或迁移。
# 导出 Nginx 容器为 tar 包
docker export my-nginx > nginx-container.tar
# 或
docker export -o nginx-container.tar my-nginx
docker port
- 查看容器端口映射
核心功能:确认 Nginx 容器端口与主机端口的映射关系(排查端口冲突)。
# 查看 my-nginx 容器的端口映射
docker port my-nginx
# 输出示例:80/tcp -> 0.0.0.0:80
三、镜像管理
1. 镜像获取与推送
docker pull
- 拉取镜像
核心功能:从仓库获取 Nginx 镜像(官方镜像或自定义镜像)。
# 拉取官方最新版 Nginx
docker pull nginx:latest
# 拉取指定版本 Nginx(如 1.25 稳定版)
docker pull nginx:1.25
# 拉取私有仓库的自定义 Nginx 镜像(如含特定模块的版本)
docker pull registry.example.com/custom-nginx:v1.0
docker push
- 推送镜像
核心功能:将自定义 Nginx 镜像(如含业务配置)推送到仓库,实现团队共享。
# 1. 为镜像打私有仓库标签
docker tag nginx:1.25 registry.example.com/custom-nginx:v1.0
# 2. 登录私有仓库
docker login registry.example.com -u username -p password
# 3. 推送镜像
docker push registry.example.com/custom-nginx:v1.0
# 4. 退出登录
docker logout registry.example.com
docker search
- 搜索镜像
核心功能:在 Docker Hub 搜索 Nginx 相关镜像(如带模块的版本)。
# 搜索 Nginx 镜像
docker search nginx
# 搜索星级 > 10000 的官方 Nginx 镜像
docker search --filter "stars=10000" --filter "is-official=true" nginx
2. 镜像查询与删除
docker images
- 列出本地镜像
核心功能:查看本地存储的 Nginx 镜像(版本管理)。
# 列出所有本地镜像(筛选 Nginx 相关)
docker images nginx
# 只显示 Nginx 镜像 ID
docker images -q nginx
# 显示镜像摘要和大小(对比不同版本镜像)
docker images --digests nginx
docker rmi
- 删除镜像
核心功能:清理无用的 Nginx 镜像,释放磁盘空间。
# 删除指定版本 Nginx 镜像
docker rmi nginx:1.24
# 强制删除被容器引用的镜像(需先停容器,或用 -f)
docker rmi -f nginx:1.24
# 清理标签为 <none> 的悬空镜像(构建失败残留)
docker rmi -f $(docker images -f "dangling=true" -q)
# 清理所有未使用的镜像(含 Nginx 旧版本)
docker image prune -a -f
3. 镜像构建与操作
docker build
- 从 Dockerfile 构建镜像
核心功能:定制 Nginx 镜像(集成配置、静态资源、模块等),是 DevOps 核心环节。
# 1. 基础构建(当前目录 Dockerfile,构建自定义 Nginx)
docker build -t my-nginx:v1.0 .
# 2. 指定 Dockerfile 路径(如 docker 子目录)
docker build -f ./docker/Dockerfile.nginx -t my-nginx:v1.0 .
# 3. 构建时传入参数(如 Nginx 版本)
docker build --build-arg NGINX_VERSION=1.25 -t my-nginx:v1.0 .
# 示例 Dockerfile(定制 Nginx 镜像):
# FROM nginx:${NGINX_VERSION}
# COPY nginx.conf /etc/nginx/nginx.conf
# COPY html/ /usr/share/nginx/html/
# RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
# EXPOSE 80 443
# CMD ["nginx", "-g", "daemon off;"]
docker tag
- 为镜像打标签
核心功能:版本管理和仓库推送必备(区分开发/生产环境镜像)。
# 为 Nginx 镜像打版本标签
docker tag nginx:1.25 my-nginx:prod-v1.25
# 打私有仓库标签(推送前)
docker tag my-nginx:prod-v1.25 registry.example.com/myapp/nginx:prod-v1.25
docker history
- 查看镜像历史
核心功能:分析 Nginx 镜像各层构建过程,优化镜像大小。
# 查看 Nginx 镜像的构建历史(各层命令和大小)
docker history nginx:1.25
# 详细显示完整命令(便于排查构建问题)
docker history --no-trunc nginx:1.25
docker save/load
- 镜像归档与加载
核心功能:离线环境部署 Nginx 镜像(如无网络的生产环境)。
# 1. 保存 Nginx 镜像为 tar 包(可包含多个版本)
docker save -o nginx-images.tar nginx:1.25 my-nginx:v1.0
# 2. 从 tar 包加载镜像
docker load -i nginx-images.tar
docker commit
- 从容器创建镜像
核心功能:基于运行中的 Nginx 容器(含临时配置)创建镜像(不推荐,优先用 Dockerfile)。
# 基于修改后的 Nginx 容器创建镜像
docker commit -m "添加自定义配置" -a "dev-team" my-nginx my-nginx-temp:v1.0
docker import
- 从归档文件创建镜像
核心功能:从 docker export
导出的 Nginx 容器 tar 包创建镜像(不含历史层)。
# 从 Nginx 容器导出的 tar 包创建镜像
docker import nginx-container.tar my-nginx-imported:v1.0
四、网络管理
1. 网络基础操作
docker network ls
- 列出网络
核心功能:查看 Docker 网络(Nginx 与后端服务通信依赖网络配置)。
docker network ls
# 输出示例:默认网络(bridge、host、none)和自定义网络
docker network create
- 创建网络
核心功能:创建自定义网络,实现 Nginx 与后端服务(如 API 服务器)的隔离通信。
# 创建默认 bridge 网络(Nginx 与后端服务专用)
docker network create nginx-backend-network
# 创建指定子网和网关的网络(固定 IP 场景)
docker network create --driver bridge \
--subnet 192.168.100.0/24 \
--gateway 192.168.100.1 \
nginx-network
docker network rm
- 删除网络
核心功能:清理无用网络。
# 删除指定网络
docker network rm nginx-backend-network
# 批量删除未使用的网络
docker network prune -f
2. 容器网络操作
docker network connect
- 连接容器到网络
核心功能:将 Nginx 容器加入自定义网络,使其与同网络的后端服务通信。
# 将 Nginx 容器连接到后端服务网络
docker network connect nginx-backend-network my-nginx
# 连接时指定静态 IP(便于 Nginx 反向代理配置)
docker network connect --ip 192.168.100.10 nginx-network my-nginx
docker network disconnect
- 断开容器与网络的连接
核心功能:隔离故障 Nginx 容器或调整网络架构。
docker network disconnect nginx-backend-network my-nginx
docker network inspect
- 查看网络详情
核心功能:确认 Nginx 容器与后端服务是否在同一网络,IP 配置是否正确。
# 查看 nginx-backend-network 网络详情
docker network inspect nginx-backend-network
# 提取网络中所有容器的名称和 IP(检查 Nginx 与后端连接)
docker network inspect --format '{{range .Containers}}{{.Name}}: {{.IPv4Address}}{{end}}' nginx-backend-network
五、数据卷管理
1. 卷基础操作
docker volume ls
- 列出数据卷
核心功能:查看 Nginx 配置卷、日志卷等持久化存储。
docker volume ls
docker volume create
- 创建数据卷
核心功能:为 Nginx 配置、日志、静态资源创建持久化卷(避免容器删除后数据丢失)。
# 创建 Nginx 配置卷
docker volume create nginx-conf
# 创建 Nginx 日志卷
docker volume create nginx-logs
# 创建带标签的卷(便于管理)
docker volume create --label app=nginx --label env=prod nginx-html
docker volume rm
- 删除数据卷
核心功能:清理无用卷(需确保数据已备份)。
# 删除指定卷
docker volume rm nginx-conf-old
# 清理未使用的卷
docker volume prune -f
2. 卷信息与使用
docker volume inspect
- 查看卷详情
核心功能:获取 Nginx 卷的实际存储路径(主机目录),便于直接修改配置或备份日志。
# 查看 nginx-conf 卷详情
docker volume inspect nginx-conf
# 输出中 "Mountpoint" 为宿主机路径(如 /var/lib/docker/volumes/nginx-conf/_data)
卷挂载实践(以Nginx 为例)
# 1. 使用命名卷挂载 Nginx 配置、日志和静态资源
docker run -d -p 80:80 \
-v nginx-conf:/etc/nginx/conf.d \ # 配置卷(推荐 conf.d 而非 nginx.conf,更灵活)
-v nginx-logs:/var/log/nginx \ # 日志卷
-v nginx-html:/usr/share/nginx/html \ # 静态资源卷
--name my-nginx-with-volumes nginx:1.25
# 2. 绑定挂载(直接映射主机目录,适合开发环境)
# 注意:生产环境需处理权限(如添加 :Z 解决 SELinux 限制)
docker run -d -p 80:80 \
-v /data/nginx/conf.d:/etc/nginx/conf.d:Z \
-v /data/nginx/logs:/var/log/nginx:Z \
--name my-nginx-dev nginx:1.25
六、Docker Compose 编排
1. 安装 Docker Compose(Linux 通用)
# 安装 Docker Compose v2(集成到 docker 命令)
# 适用于 CentOS/RHEL(dnf)
dnf install docker-compose-plugin -y
# 适用于 Ubuntu/Debian(apt)
apt-get install docker-compose-plugin -y
# 验证安装
docker compose version
2. 核心 Compose 命令
docker compose up
- 启动服务
核心功能:一键启动 Nginx 及关联服务(如后端 API、数据库)。
# 前台启动(查看启动日志,适合调试)
docker compose up
# 后台启动(生产环境常用)
docker compose up -d
# 强制重建 Nginx 镜像并启动(配置更新后)
docker compose up -d --build nginx # 仅重建 nginx 服务
docker compose down
- 停止并清理服务
核心功能:停止服务并清理容器、网络(保留数据卷)。
# 停止服务(保留卷和镜像)
docker compose down
# 停止服务并删除卷(谨慎,数据会丢失)
docker compose down -v
# 停止服务并删除 Nginx 相关镜像
docker compose down --rmi all
docker compose ps
- 查看服务状态
核心功能:查看 Compose 管理的所有服务(含 Nginx)的运行状态。
docker compose ps
docker compose exec
- 进入服务容器
核心功能:进入 Nginx 容器执行命令(如修改配置、查看日志)。
# 进入 Nginx 容器终端
docker compose exec nginx /bin/bash
# 非交互式执行命令(如重载配置)
docker compose exec nginx nginx -s reload
docker compose logs
- 查看服务日志
核心功能:集中查看 Nginx 及关联服务的日志(排查跨服务问题)。
# 查看所有服务日志
docker compose logs
# 实时跟踪 Nginx 日志
docker compose logs -f nginx
3. 示例 Compose 配置(Nginx + 后端服务)
docker-compose.yml
(典型 Web 应用架构):
version: '3.8'
services:
nginx:
image: nginx:1.25
ports:
- "80:80"
- "443:443"
volumes:
- nginx-conf:/etc/nginx/conf.d
- nginx-logs:/var/log/nginx
- ./html:/usr/share/nginx/html
- ./ssl:/etc/nginx/ssl # SSL 证书目录
networks:
- app-network
depends_on:
- backend # 确保后端服务启动后再启动 Nginx
restart: always
healthcheck: # 健康检查(Nginx 存活检测)
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
backend:
image: registry.example.com/myapp/backend:v1.0
networks:
- app-network
restart: always
networks:
app-network:
driver: bridge
volumes:
nginx-conf:
nginx-logs:
七、系统管理与维护
1. Docker 服务管理(systemd 系统通用)
# 启动 Docker 服务
systemctl start docker
# 停止 Docker 服务
systemctl stop docker
# 重启 Docker 服务(配置生效)
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 查看 Docker 服务状态
systemctl status docker
2. 系统信息查询
# 查看 Docker 系统信息(镜像数、容器数、存储驱动等)
docker info
# 查看 Docker 版本(客户端 + 服务端)
docker version
# 查看 Docker 磁盘占用(Nginx 镜像和卷可能占用较大空间)
docker system df
# 查看磁盘占用详情(定位大文件)
docker system df -v
3. 系统清理
# 清理所有未使用的资源(容器、网络、镜像、卷)
docker system prune -a -v -f
# -a:包括未引用的镜像(如旧版 Nginx)
# -v:包括未使用的卷(确保数据已备份)
# -f:跳过确认
4. 防火墙配置(以 firewalld 为例)
# 查看防火墙状态
firewall-cmd --state
# 开放 Nginx 常用端口(80 _http, 443_https)
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
# 允许 Docker 网络通过防火墙(容器间通信)
firewall-cmd --permanent --zone=trusted --add-interface=docker0
firewall-cmd --reload