【Docker】《 Docker 高频常用命令速查表 》

Docker 高频常用命令速查表

本表筛选了日常开发、运维、生产环境中80%场景高频使用的核心命令,附带可直接运行的实战示例,可直接复制保存为本地速查手册。

一、镜像核心管理命令

命令 核心作用 高频必用参数 可直接运行的实战示例
docker pull 从仓库拉取镜像 -a:拉取所有标签;--platform:指定CPU架构 1. 拉取轻量稳定版:docker pull nginx:alpine 2. 拉取指定架构镜像:docker pull --platform linux/amd64 mysql:8.0
docker images 查看本地所有镜像 -a:显示中间层镜像;-q:仅输出镜像ID;--filter:过滤 1. 查看所有镜像:docker images 2. 批量删除专用:docker images -q
docker rmi 删除本地镜像 -f:强制删除(含被容器引用的镜像) 1. 按名称删除:docker rmi nginx:alpine 2. 批量删除所有镜像:docker rmi $(docker images -q)
docker tag 镜像打标签(推送仓库必备) 1. 私有仓库标签:docker tag nginx:alpine my-registry.com/nginx/nginx:v1.0 2. 镜像重命名:docker tag old-image:v1 new-image:v2
docker save/load 镜像离线导出/导入 -o:指定输出文件;-i:指定输入文件 1. 导出镜像:docker save -o nginx-alpine.tar nginx:alpine 2. 导入镜像:docker load -i nginx-alpine.tar
docker inspect 查看镜像/容器/卷的元数据 --format:格式化输出 1. 查看完整信息:docker inspect nginx:alpine 2. 仅获取镜像ID:docker inspect --format {``{.Id}} nginx:alpine

二、容器全生命周期管理(最高频核心)

命令 核心作用 高频必用参数 可直接运行的实战示例
docker run 创建并启动容器(最核心) -d:后台守护运行;-it:交互式终端;--name:指定容器名 -p 主机端口:容器端口:端口映射;-e:设置环境变量 --rm:容器退出自动删除;--network:指定网络;-v:挂载卷 1. 最简启动nginx:docker run -d --name nginx-demo -p 80:80 nginx:alpine 2. 交互式临时容器:docker run -it --rm ubuntu:20.04 /bin/bash 3. 带环境变量启动mysql:docker run -d --name mysql-demo -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
docker ps 查看容器列表 -a:查看所有容器(含停止的);-q:仅输出容器ID;-s:显示容器大小 1. 查看运行中容器:docker ps 2. 查看所有容器:docker ps -a 3. 批量删除专用:docker ps -aq
docker start/stop/restart 启动/停止/重启容器 -t:停止前等待的秒数 1. 停止容器:docker stop nginx-demo 2. 启动停止的容器:docker start nginx-demo 3. 强制重启:docker restart nginx-demo
docker rm 删除容器 -f:强制删除运行中的容器;-v:同时删除关联的匿名卷 1. 删除停止的容器:docker rm nginx-demo 2. 强制删除运行中容器:docker rm -f nginx-demo 3. 批量删除所有容器:docker rm -f $(docker ps -aq)
docker exec 进入运行中容器执行命令 -it:交互式终端(必备) 1. 进入容器bash终端:docker exec -it nginx-demo /bin/bash 2. 容器内执行单条命令:docker exec nginx-demo cat /etc/nginx/nginx.conf
docker logs 查看容器日志 -f:实时跟踪日志;--tail N:仅显示最后N行;-t:显示时间戳 1. 查看完整日志:docker logs nginx-demo 2. 实时跟踪日志:docker logs -f nginx-demo 3. 查看最后100行日志:docker logs --tail 100 nginx-demo

三、容器运维排障高频命令

命令 核心作用 实战示例
docker cp 主机与容器互传文件 1. 主机→容器:docker cp ./index.html nginx-demo:/usr/share/nginx/html/ 2. 容器→主机:docker cp nginx-demo:/etc/nginx/nginx.conf ./
docker port 查看容器端口映射 docker port nginx-demo
docker top 查看容器内运行进程 docker top nginx-demo
docker stats 实时查看容器CPU/内存/磁盘IO占用 1. 查看所有容器:docker stats 2. 查看指定容器:docker stats nginx-demo
docker diff 查看容器文件系统变更 docker diff nginx-demo

四、数据卷持久化管理命令

命令 核心作用 高频参数 实战示例
docker volume create 创建自定义命名卷(生产推荐) --driver:指定存储驱动,默认local docker volume create mysql-data
docker volume ls 查看所有数据卷 -q:仅输出卷名 docker volume ls
docker volume inspect 查看卷的挂载路径、配置详情 docker volume inspect mysql-data
docker volume rm 删除数据卷 -f:强制删除 docker volume rm mysql-data
docker volume prune 清理未使用的卷(释放磁盘) -a:清理所有未使用卷;-f:不提示确认 docker volume prune -f
容器挂载核心用法 - - 1. 命名卷挂载(推荐):docker run -d -v mysql-data:/var/lib/mysql mysql:8.0 2. 主机目录绑定挂载:docker run -d -v /host/mysql/data:/var/lib/mysql mysql:8.0 3. 只读挂载:docker run -d -v nginx-config:/etc/nginx:ro nginx:alpine

五、Docker网络管理命令

命令 核心作用 高频参数 实战示例
docker network create 创建自定义网络(生产推荐) --driver:网络驱动,默认bridge;--subnet:指定子网;--gateway:指定网关 1. 创建基础网络:docker network create app-net 2. 创建指定子网网络:docker network create --subnet 172.20.0.0/16 --gateway 172.20.0.1 app-net
docker network ls 查看所有网络 -q:仅输出网络ID docker network ls
docker network inspect 查看网络详情(接入容器、IP分配) docker network inspect app-net
docker network rm 删除网络 docker network rm app-net
docker network prune 清理未使用的网络 -f:不提示确认 docker network prune -f
docker network connect/disconnect 容器接入/断开网络 --ip:指定容器IP;--alias:设置网络别名 1. 接入网络:docker network connect app-net nginx-demo 2. 断开网络:docker network disconnect app-net nginx-demo

六、镜像构建与仓库交互命令

命令 核心作用 高频参数 实战示例
docker build 基于Dockerfile构建自定义镜像 -t:指定镜像名和标签;-f:指定Dockerfile路径;--build-arg:传递构建参数;--no-cache:不使用构建缓存 1. 基础构建:docker build -t my-java-app:v1.0 . 2. 指定Dockerfile构建:docker build -t my-app:v1 -f ./Dockerfile.prod . 3. 带构建参数构建:docker build -t my-app:v1 --build-arg APP_VERSION=1.0 .
docker login 登录镜像仓库(默认Docker Hub) -u:用户名;-p:密码 1. 登录Docker Hub:docker login -u 你的用户名 2. 登录私有仓库:docker login my-registry.com
docker logout 登出镜像仓库 docker logout my-registry.com
docker push 推送镜像到仓库 docker push my-registry.com/nginx/nginx:v1.0
docker search 搜索Docker Hub镜像 --filter is-official=true:仅筛选官方镜像 docker search --filter is-official=true nginx

七、系统清理与信息查看命令

命令 核心作用 实战示例
docker system info 查看Docker系统全局信息 docker system info
docker system df 查看Docker磁盘占用详情 docker system df
docker system prune 一键清理无用资源 1. 基础清理:docker system prune 2. 深度清理(含未使用镜像和卷):docker system prune -a --volumes -f

Docker核心模块深入详解

1. Dockerfile 多阶段构建(生产环境核心最佳实践)

核心原理

多阶段构建允许在一个Dockerfile中使用多个FROM指令,每个阶段对应一个独立的构建环境,最终仅保留应用运行所需的最小文件,彻底解决「构建环境臃肿」问题,大幅减小镜像体积、提升分发效率与安全性。

核心优势

  • 镜像体积大幅缩减(Java应用可从数百M降至几十M)
  • 分离构建环境与运行环境,避免源码、构建工具、依赖缓存进入生产镜像
  • 减少攻击面,提升容器安全性
  • 单Dockerfile完成全流程,无需额外脚本维护

实战示例

示例1:Java SpringBoot 应用多阶段构建
dockerfile 复制代码
# 第一阶段:构建环境(完整JDK+Maven,负责编译打包)
FROM maven:3.8.8-openjdk-11 AS builder
WORKDIR /app
# 提前复制依赖配置,最大化利用构建缓存
COPY pom.xml .
RUN mvn dependency:go-offline
# 复制源码并编译打包
COPY src ./src
RUN mvn clean package -DskipTests

# 第二阶段:运行环境(仅JRE最小运行时)
FROM openjdk:11-jre-slim
WORKDIR /app
# 仅从构建阶段复制编译好的jar包,无多余文件
COPY --from=builder /app/target/*.jar app.jar
# 声明端口
EXPOSE 8080
# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]
示例2:前端Vue/React 应用多阶段构建
dockerfile 复制代码
# 第一阶段:构建环境(Node环境,负责打包前端代码)
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# 第二阶段:运行环境(仅Nginx,托管静态文件)
FROM nginx:alpine
# 从构建阶段复制打包好的静态文件
COPY --from=builder /app/dist /usr/share/nginx/html
# 复制自定义nginx配置(可选)
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

进阶技巧

  • FROM指令加AS别名,避免用数字索引引用阶段,可读性更强
  • COPY --from不仅可以引用当前Dockerfile的阶段,还可以直接引用外部镜像(如COPY --from=busybox:1.36 /bin/busybox /bin/
  • 把不变的依赖配置放在前面,频繁变更的源码放在后面,最大化利用构建缓存

2. 自定义网络进阶用法与最佳实践

为什么不用默认bridge网络?

默认bridge网络存在明显缺陷:仅支持IP互访,不支持容器名/DNS解析,容器重启IP会失效;所有容器共用一个网桥,无网络隔离,安全性差;无法自定义网段、网关规则。

自定义bridge网络核心优势

  • 内置DNS解析,容器之间可直接通过容器名/网络别名互访,无需硬编码IP
  • 网络隔离,不同业务的容器可划分到不同网络,互不干扰
  • 可自定义子网、网关、IP范围,适配企业网络规划
  • 可灵活控制容器的网络接入与断开,无需重启容器

生产环境最佳实践

  1. 按业务维度划分网络:比如前端网络、后端业务网络、数据库网络,仅开放必要的网络连通
  2. 容器启动时直接指定网络,示例:
bash 复制代码
# 1. 创建业务网络
docker network create --driver bridge --subnet 172.30.0.0/16 business-net
# 2. 启动后端服务,接入业务网络
docker run -d --name user-service --network business-net user-service:v1
# 3. 启动前端服务,接入同一网络,可直接通过容器名user-service访问后端
docker run -d --name web-frontend --network business-net -p 80:80 web-frontend:v1
  1. 多网络接入:一个容器可同时接入多个网络,比如网关容器同时接入前端和后端网络,实现流量转发
  2. 非必要不使用host网络:host网络会破坏容器的网络隔离性,仅在极致性能需求场景使用

3. 数据卷核心选型与最佳实践

三种挂载方式选型对比

挂载类型 核心特点 适用场景 不适用场景
命名卷 Docker统一管理,生命周期独立于容器,支持备份/迁移/驱动扩展 生产环境数据库、业务数据持久化 需要在主机上频繁修改文件的场景
绑定挂载 直接绑定主机目录,主机与容器双向实时同步,性能最高 开发环境代码热更新、配置文件挂载 多主机集群环境、需要Docker统一管理的场景
匿名卷 Docker自动创建,无固定名称,生命周期默认随容器 临时数据存储、无需长期保留的缓存 生产环境核心数据持久化

生产环境最佳实践

  1. 核心数据必须用命名卷:数据库、业务文件等核心持久化数据,优先使用命名卷,避免绑定挂载的权限、路径依赖问题
  2. 配置文件用只读挂载 :nginx、mysql等配置文件,挂载时加:ro只读参数,避免容器内误修改
  3. 禁止在容器可写层存储持久化数据:容器删除后数据会丢失,且会增大容器存储开销
  4. 定期备份命名卷数据 :通过docker volume inspect查看卷的挂载路径,定期备份核心数据
  5. 定期清理无用卷 :执行docker volume prune清理废弃卷,避免磁盘占用过高

4. Dockerfile 编写最佳实践清单

  1. 优先使用alpineslim版本的最小基础镜像,减小镜像体积和攻击面
  2. 合并RUN指令,用&&连接多个命令,减少镜像层数,安装依赖后必须清理缓存
  3. 优化构建缓存:不变的内容(依赖配置、环境变量)放在前面,频繁变更的源码放在后面
  4. 使用非root用户运行容器,避免容器内使用root权限,提升安全性
  5. 禁止使用latest标签,基础镜像和自定义镜像均指定固定版本号,避免版本不一致问题
  6. 使用ENTRYPOINT+CMD的最佳组合:ENTRYPOINT指定固定启动命令,CMD指定默认参数,方便启动时传参
  7. 添加HEALTHCHECK健康检查,让Docker自动检测容器运行状态,实现故障自动重启
  8. 禁止在Dockerfile中存储密码、密钥等敏感信息,通过环境变量或密钥管理工具注入
  9. 编写.dockerignore文件,排除不需要的文件(node_modules、.git、日志等),减小构建上下文
相关推荐
程序员阿明2 小时前
spring boot在普通方法中获取HttpServletRequest及其使用的方式
java·spring boot·后端
花千树-0102 小时前
Spring Boot 启动慢排查与优化实战指南
java·spring boot·后端·spring
Beginner x_u2 小时前
前端八股整理|Vue|虚拟 DOM、Diff 与 Patch 流程
前端·javascript·vue.js
kaixiang3002 小时前
若依RuoYi实战
java·服务器·前端
NocoBase2 小时前
为 Excel 数据快速构建 Web 应用:4 种方法对比
前端·人工智能·低代码·开源·excel
SunnyDays10112 小时前
使用 Java 高效管理 Excel 分页符:添加、删除与预览全攻略
java·excel分页符
一 乐2 小时前
智能农田管理|基于springboot + vue智能农田管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·智能农田管理系统
Mem0rin2 小时前
[Java/数据结构]线性表之栈与队列
java·开发语言·数据结构
苏瞳儿2 小时前
数据库的增删改查-node.js
前端·javascript·数据库