【Docker实战进阶】Docker 实战命令大全

Docker 实战命令大全

Docker 实战场景,以 Nginx 为核心示例,梳理容器生命周期、镜像管理、网络配置、数据持久化及 Compose 编排的核心命令与最佳实践。

一、容器生命周期管理

1. 基础生命周期命令

docker run - 创建并启动容器

核心功能:基于镜像创建并启动容器,是部署应用的入口命令。Nginx 作为示例可直观展示端口映射、配置挂载等关键操作。

bash 复制代码
# 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 服务的启停维护常用。

bash 复制代码
# 启动停止的 Nginx 容器
docker start my-nginx

# 停止运行中的 Nginx 容器(优雅关闭,等待连接处理完毕)
docker stop -t 30 my-nginx  # -t 30:等待 30 秒后强制终止

# 重启 Nginx 容器(配置修改后生效常用)
docker restart my-nginx
docker kill - 强制终止容器

核心功能:立即终止容器(发送 SIGKILL 信号),适用于 Nginx 无响应等紧急场景。

bash 复制代码
# 强制终止 Nginx 容器
docker kill my-nginx

# 批量终止多个容器(如多个 Nginx 实例)
docker kill nginx-instance1 nginx-instance2
docker rm - 删除容器

核心功能:删除无用容器,释放资源。

bash 复制代码
# 删除已停止的 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 维护时暂停流量处理。

bash 复制代码
# 暂停 Nginx 容器(暂停后无法处理请求)
docker pause my-nginx

# 恢复 Nginx 容器运行
docker unpause my-nginx
docker create - 创建容器但不启动

核心功能:预配置容器参数(如端口、挂载),便于检查配置后再启动。

bash 复制代码
# 创建 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 配置修改、日志查看的常用方式。

bash 复制代码
# 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)。

bash 复制代码
# 将测试环境 Nginx 重命名
docker rename my-nginx my-nginx-test

二、容器操作

1. 容器查询与信息

docker ps - 列出容器

核心功能:查看容器状态,快速定位 Nginx 服务运行情况。

bash 复制代码
# 列出运行中的容器(默认,重点关注 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 配置、网络、挂载等问题。

bash 复制代码
# 查看 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 服务问题的关键。

bash 复制代码
# 查看 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 占用,及时发现性能瓶颈。

bash 复制代码
# 监控所有容器(重点关注 Nginx 资源占用)
docker stats

# 仅监控 Nginx 容器
docker stats my-nginx

# 非交互式输出(适合脚本采集数据)
docker stats --no-stream my-nginx
docker top - 查看容器内进程

核心功能:查看 Nginx 主进程和工作进程状态。

bash 复制代码
# 查看 Nginx 容器内所有进程
docker top my-nginx
# 输出示例:Nginx 通常有 1 个主进程(master)和多个工作进程(worker)

# 显示进程用户、PID 和命令
docker top my-nginx -o user,pid,cmd
docker events - 监听 Docker 事件

核心功能:跟踪 Nginx 容器的启动、停止、重启等事件,便于审计和自动化。

bash 复制代码
# 实时监听所有事件(过滤 Nginx 相关)
docker events --filter "name=my-nginx"

# 监听 Nginx 容器的停止事件(持续 1 小时)
docker events --filter "container=my-nginx" --filter "event=stop" --since 1h

3. 容器文件操作

docker cp - 容器与主机文件互传

核心功能:Nginx 配置文件更新、静态资源上传的常用方式。

bash 复制代码
# 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 容器配置是否被意外修改。

bash 复制代码
# 查看 Nginx 容器的文件变更(如配置文件是否被修改)
docker diff my-nginx
# 输出说明:
# A: 新增文件(如自定义配置)
# C: 修改文件(如 nginx.conf 被修改)
# D: 删除文件
docker export - 导出容器文件系统

核心功能:导出 Nginx 容器的完整文件系统(含配置和静态资源),用于备份或迁移。

bash 复制代码
# 导出 Nginx 容器为 tar 包
docker export my-nginx > nginx-container.tar
# 或
docker export -o nginx-container.tar my-nginx
docker port - 查看容器端口映射

核心功能:确认 Nginx 容器端口与主机端口的映射关系(排查端口冲突)。

bash 复制代码
# 查看 my-nginx 容器的端口映射
docker port my-nginx
# 输出示例:80/tcp -> 0.0.0.0:80

三、镜像管理

1. 镜像获取与推送

docker pull - 拉取镜像

核心功能:从仓库获取 Nginx 镜像(官方镜像或自定义镜像)。

bash 复制代码
# 拉取官方最新版 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 镜像(如含业务配置)推送到仓库,实现团队共享。

bash 复制代码
# 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 Hub 搜索 Nginx 相关镜像(如带模块的版本)。

bash 复制代码
# 搜索 Nginx 镜像
docker search nginx

# 搜索星级 > 10000 的官方 Nginx 镜像
docker search --filter "stars=10000" --filter "is-official=true" nginx

2. 镜像查询与删除

docker images - 列出本地镜像

核心功能:查看本地存储的 Nginx 镜像(版本管理)。

bash 复制代码
# 列出所有本地镜像(筛选 Nginx 相关)
docker images nginx

# 只显示 Nginx 镜像 ID
docker images -q nginx

# 显示镜像摘要和大小(对比不同版本镜像)
docker images --digests nginx
docker rmi - 删除镜像

核心功能:清理无用的 Nginx 镜像,释放磁盘空间。

bash 复制代码
# 删除指定版本 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 核心环节。

bash 复制代码
# 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 - 为镜像打标签

核心功能:版本管理和仓库推送必备(区分开发/生产环境镜像)。

bash 复制代码
# 为 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 镜像各层构建过程,优化镜像大小。

bash 复制代码
# 查看 Nginx 镜像的构建历史(各层命令和大小)
docker history nginx:1.25

# 详细显示完整命令(便于排查构建问题)
docker history --no-trunc nginx:1.25
docker save/load - 镜像归档与加载

核心功能:离线环境部署 Nginx 镜像(如无网络的生产环境)。

bash 复制代码
# 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)。

bash 复制代码
# 基于修改后的 Nginx 容器创建镜像
docker commit -m "添加自定义配置" -a "dev-team" my-nginx my-nginx-temp:v1.0
docker import - 从归档文件创建镜像

核心功能 :从 docker export 导出的 Nginx 容器 tar 包创建镜像(不含历史层)。

bash 复制代码
# 从 Nginx 容器导出的 tar 包创建镜像
docker import nginx-container.tar my-nginx-imported:v1.0

四、网络管理

1. 网络基础操作

docker network ls - 列出网络

核心功能:查看 Docker 网络(Nginx 与后端服务通信依赖网络配置)。

bash 复制代码
docker network ls
# 输出示例:默认网络(bridge、host、none)和自定义网络
docker network create - 创建网络

核心功能:创建自定义网络,实现 Nginx 与后端服务(如 API 服务器)的隔离通信。

bash 复制代码
# 创建默认 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 - 删除网络

核心功能:清理无用网络。

bash 复制代码
# 删除指定网络
docker network rm nginx-backend-network

# 批量删除未使用的网络
docker network prune -f

2. 容器网络操作

docker network connect - 连接容器到网络

核心功能:将 Nginx 容器加入自定义网络,使其与同网络的后端服务通信。

bash 复制代码
# 将 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 容器或调整网络架构。

bash 复制代码
docker network disconnect nginx-backend-network my-nginx
docker network inspect - 查看网络详情

核心功能:确认 Nginx 容器与后端服务是否在同一网络,IP 配置是否正确。

bash 复制代码
# 查看 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 配置卷、日志卷等持久化存储。

bash 复制代码
docker volume ls
docker volume create - 创建数据卷

核心功能:为 Nginx 配置、日志、静态资源创建持久化卷(避免容器删除后数据丢失)。

bash 复制代码
# 创建 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 - 删除数据卷

核心功能:清理无用卷(需确保数据已备份)。

bash 复制代码
# 删除指定卷
docker volume rm nginx-conf-old

# 清理未使用的卷
docker volume prune -f

2. 卷信息与使用

docker volume inspect - 查看卷详情

核心功能:获取 Nginx 卷的实际存储路径(主机目录),便于直接修改配置或备份日志。

bash 复制代码
# 查看 nginx-conf 卷详情
docker volume inspect nginx-conf
# 输出中 "Mountpoint" 为宿主机路径(如 /var/lib/docker/volumes/nginx-conf/_data)
卷挂载实践(以Nginx 为例)
bash 复制代码
# 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 通用)

bash 复制代码
# 安装 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、数据库)。

bash 复制代码
# 前台启动(查看启动日志,适合调试)
docker compose up

# 后台启动(生产环境常用)
docker compose up -d

# 强制重建 Nginx 镜像并启动(配置更新后)
docker compose up -d --build nginx  # 仅重建 nginx 服务
docker compose down - 停止并清理服务

核心功能:停止服务并清理容器、网络(保留数据卷)。

bash 复制代码
# 停止服务(保留卷和镜像)
docker compose down

# 停止服务并删除卷(谨慎,数据会丢失)
docker compose down -v

# 停止服务并删除 Nginx 相关镜像
docker compose down --rmi all
docker compose ps - 查看服务状态

核心功能:查看 Compose 管理的所有服务(含 Nginx)的运行状态。

bash 复制代码
docker compose ps
docker compose exec - 进入服务容器

核心功能:进入 Nginx 容器执行命令(如修改配置、查看日志)。

bash 复制代码
# 进入 Nginx 容器终端
docker compose exec nginx /bin/bash

# 非交互式执行命令(如重载配置)
docker compose exec nginx nginx -s reload
docker compose logs - 查看服务日志

核心功能:集中查看 Nginx 及关联服务的日志(排查跨服务问题)。

bash 复制代码
# 查看所有服务日志
docker compose logs

# 实时跟踪 Nginx 日志
docker compose logs -f nginx

3. 示例 Compose 配置(Nginx + 后端服务)

docker-compose.yml(典型 Web 应用架构):

yaml 复制代码
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 系统通用)

bash 复制代码
# 启动 Docker 服务
systemctl start docker

# 停止 Docker 服务
systemctl stop docker

# 重启 Docker 服务(配置生效)
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 查看 Docker 服务状态
systemctl status docker

2. 系统信息查询

bash 复制代码
# 查看 Docker 系统信息(镜像数、容器数、存储驱动等)
docker info

# 查看 Docker 版本(客户端 + 服务端)
docker version

# 查看 Docker 磁盘占用(Nginx 镜像和卷可能占用较大空间)
docker system df

# 查看磁盘占用详情(定位大文件)
docker system df -v

3. 系统清理

bash 复制代码
# 清理所有未使用的资源(容器、网络、镜像、卷)
docker system prune -a -v -f
# -a:包括未引用的镜像(如旧版 Nginx)
# -v:包括未使用的卷(确保数据已备份)
# -f:跳过确认

4. 防火墙配置(以 firewalld 为例)

bash 复制代码
# 查看防火墙状态
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
相关推荐
功德+n9 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
小敬爱吃饭9 小时前
Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
人工智能·python·nginx·docker·语言模型·容器·数据挖掘
木子欢儿10 小时前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka
coppher11 小时前
Ubuntu 22.04 amd64 离线安装 Docker 完整教程
linux·docker
虚伪的空想家12 小时前
k8s集群configmap和secrets备份脚本
linux·容器·kubernetes
SXJR12 小时前
k8s中的Pod
云原生·容器·kubernetes
文静小土豆13 小时前
K8s 滚动更新在 Java 应用中的实践与优化
java·容器·kubernetes
w61001046613 小时前
CKA-2026-Ingress
云原生·容器·kubernetes·cka
bloglin9999913 小时前
docker logs 如何一直监听日志输出
运维·docker·容器
说实话起个名字真难啊14 小时前
Docker 入门之网络基础
网络·docker·php