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

【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.lryc.cn/news/617774.html

相关文章:

  • 从零构建企业级K8S:高可用集群部署指南
  • LeetCode算法日记 - Day 8: 串联所有单词的子串、最小覆盖子串
  • kubeadm搭建生产环境的双master节点k8s高可用集群
  • Android视频编辑方案测评:轻量化剪辑工具的性能表现
  • LAZADA跨境电商自养号测评环境搭建:安全与合规的底层逻辑解析
  • Centos8系统在安装Git包时,报错:“没有任何匹配: git”
  • 【图像处理基石】UE输出渲染视频,有哪些画质相关的维度和标准可以参考?
  • LVPECL、LVDS、LVTTL、LVCMOS四种逻辑电平标准的全面对比
  • redis(1)-基本概念
  • ESP32 输入密码后执行程序
  • 【bug】diff-gaussian-rasterization Windows下编译 bug 解决
  • 苹果个人开发者如何实现应用下载安装
  • 【Unity】打包学习笔记
  • IEEE754 double 类型步长规律,从1.0的二进制表示、紧挨着1.0略大和略小的数开始归纳
  • perl notes【1】
  • 【linux】企业级WEB应用服务器tomcat
  • 达梦数据库慢SQL日志收集和分析
  • 1.Apollo Planning 模块总结
  • 打破内网枷锁!TRAE SOLO + cpolar 让AI开发告别“孤岛困境”
  • 2025.8.6 图论(1)Solution
  • CI/CD渗透测试靶场
  • JavaEE初阶2.0
  • 基于MongoDB/HBase的知识共享平台的设计与实现
  • HBase BlockCache:LRU Cache
  • SQL179 每个6/7级用户活跃情况
  • 数学建模——灰色预测(GM11)
  • window显示驱动开发—创建多平面覆盖资源
  • 微服务架构下的精准测试与环境复制实践指南
  • PTE之路--04文
  • 使用Pytest进行接口自动化测试(三)