当前位置: 首页 > web >正文

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

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.25ports:- "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-networkdepends_on:- backend  # 确保后端服务启动后再启动 Nginxrestart: alwayshealthcheck:  # 健康检查(Nginx 存活检测)test: ["CMD", "curl", "-f", "http://localhost"]interval: 30stimeout: 10sretries: 3backend:image: registry.example.com/myapp/backend:v1.0networks:- app-networkrestart: alwaysnetworks:app-network:driver: bridgevolumes: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
http://www.xdnf.cn/news/17688.html

相关文章:

  • AI基础与实践专题:PyTorch实现线性回归
  • 【unity实战】在Unity中实现不规则模型的网格建造系统(附项目源码)
  • 【实用案例】录音分片上传的核心逻辑和实现案例【文章附有代码】
  • Godot ------ 平滑拖动03
  • SpringBoot 自动配置核心机制(面试高频考点)
  • Orange的运维学习日记--38.MariaDB详解与服务部署
  • JavaEE 初阶第十七期:文件 IO 的 “管道艺术”(下)
  • 《范仲淹传》读书笔记与摘要
  • 使用frp内网穿透实现远程办公
  • 基于AI量化模型的比特币周期重构:传统四年规律是否被算法因子打破?
  • Python(9)-- 异常模块与包
  • AI Coding 概述及学习路线图
  • Elasticsearch Node.js 客户端的安装
  • 【功能测试】软件集成测试思路策略与经验总结
  • FFmpeg - 基本 API大全(视频编解码相关的)
  • 【数据结构】深入理解顺序表与通讯录项目的实现
  • leetcode-hot-100 (图论)
  • CobaltStrike的搭建和使用
  • 爬虫与数据分析实战
  • 【09-神经网络介绍2】
  • 一文读懂 C# 中的 Lazy<T>
  • 第10节 大模型分布式推理典型场景实战与架构设计
  • Godot ------ 平滑拖动02
  • Apache Ignite 核心组件:GridClosureProcessor解析
  • C# 异步编程(计时器)
  • Python: configparser库 ini文件操作库
  • 使用MAS(Microsoft Activation Scripts)永久获得win10专业版和office全套
  • Edit Distance
  • react中父子数据流动和事件互相调用(和vue做比较)
  • GO学习记录三