Docker 命令大全:从入门到生产,全场景核心指令全覆盖

简介: 本文系统讲解Docker核心原理与实战命令,涵盖Namespace、CGroup、UnionFS三大底层机制,详解镜像构建/拉取/安全扫描、容器全生命周期管理、数据卷与网络配置、Compose编排及生产最佳实践,内容全面、示例丰富、贴合v27.0.3最新版。

开篇:Docker核心底层逻辑

Docker的本质是基于Linux内核的轻量级虚拟化技术,通过内核原生能力实现进程级别的隔离与资源管控,相比传统虚拟机,具备启动快、体积小、性能损耗低、环境一致性强的核心优势。其底层三大基石决定了所有命令的设计逻辑,理解底层才能真正用好每一条指令:

  1. Namespace(命名空间):实现资源隔离,为每个容器构建独立的运行环境,包括PID、网络、挂载、用户、UTS、IPC六大核心命名空间,确保容器内的进程无法感知宿主机和其他容器的存在,从根源上实现环境隔离。
  2. CGroup(控制组):实现资源限制,为容器分配CPU、内存、磁盘IO、网络IO等资源的使用上限,防止单个容器耗尽宿主机资源,是生产环境稳定性的核心保障。
  3. UnionFS(联合文件系统):实现分层存储,镜像是一堆只读层的有序叠加,容器是在镜像只读层之上新增的一个可写层,所有修改仅作用于可写层,不影响底层镜像,这也是镜像可复用、容器启动快、环境一致性的核心原因。

Docker核心底层架构如下:

Docker采用标准C/S架构,客户端通过CLI发送命令,守护进程负责接收并执行所有容器、镜像、网络、存储相关的操作,本文所有命令均基于Dockerv27.0.3编写。

一、Docker环境信息与系统命令

该类命令用于校验Docker环境状态、查看系统信息、清理系统资源,是所有操作的前置基础。

1.1 版本与环境校验

查看Docker版本,确认环境是否正常:

docker --version

执行后将输出当前安装的Docker版本,2026年最新稳定版输出示例如下:

Docker version 27.0.3, build 7d4bcd9

查看Docker客户端与服务端的详细版本信息,包括API版本、Go版本、操作系统架构等:

docker version

查看Docker系统完整信息,包括容器数量、镜像数量、存储驱动、内核版本、CPU/内存总量等核心信息,是环境排查的核心命令:

docker system info

1.2 磁盘使用与系统清理

Docker长期运行会产生大量悬空镜像、停止容器、未使用网络、构建缓存等无用资源,占用大量磁盘空间,该组命令是生产环境运维的必备工具。

查看Docker整体磁盘使用情况,包括镜像、容器、数据卷、构建缓存的占用空间:

docker system df

查看详细的磁盘使用明细,精准定位空间占用来源:

docker system df -v

清理所有无用资源,包括停止的容器、未使用的网络、悬空镜像、过期构建缓存,-a参数清理所有未被使用的镜像(不仅是悬空镜像),-f参数强制清理无需二次确认:

docker system prune -af

二、镜像生命周期全流程核心命令

镜像是容器的运行基础,是包含代码、运行时、依赖、配置、环境变量的只读模板,所有容器均基于镜像启动,该组命令覆盖镜像从拉取、构建、管理到分发的全生命周期。

镜像与容器的生命周期流转逻辑如下:

2.1 镜像拉取

从远程镜像仓库拉取镜像到本地,默认从Docker Hub官方仓库拉取,也可指定私有仓库地址。语法docker pull [OPTIONS] NAME[:TAG|@DIGEST]核心常用参数

  • -a, --all-tags:拉取指定仓库下所有标签的镜像
  • --platform:指定镜像的操作系统与架构,适配多环境部署,如linux/amd64linux/arm64
  • -q, --quiet:静默拉取,仅输出镜像ID

拉取官方nginx最新稳定版alpine精简镜像(生产环境优先选择alpine镜像,体积小、攻击面低):

docker pull nginx:alpine

拉取指定版本、指定架构的镜像,确保环境一致性:

docker pull --platform linux/amd64 nginx:1.27.0-alpine

通过摘要拉取镜像,校验镜像完整性,防止镜像被篡改,生产环境推荐使用:

docker pull nginx@sha256:aad43ac6bd46b2cab91485c8f1dac6a985df690af3e431d9e04d9645fe70745

拉取私有仓库镜像,需先登录对应私有仓库:

docker pull registry.example.com/my-app:1.0.0

2.2 镜像构建

基于Dockerfile构建自定义镜像,本文采用Docker官方新一代构建工具Buildx(v27.0.3默认集成),替代旧版docker build命令,支持多平台构建、高级缓存、并行构建等企业级特性。语法docker buildx build [OPTIONS] PATH | URL | -核心常用参数

  • -t, --tag:为构建的镜像设置标签,格式为镜像名:版本号,可多次设置多个标签
  • -f, --file:指定Dockerfile文件路径,默认使用当前目录下的Dockerfile
  • --platform:指定构建的目标平台,支持同时构建多平台镜像,如linux/amd64,linux/arm64
  • --load:构建完成后将镜像加载到本地Docker镜像库,多平台构建时需指定
  • --push:构建完成后直接将镜像推送到远程仓库
  • --no-cache:不使用构建缓存,强制重新构建镜像的每一层,确保依赖更新
  • --build-arg:设置构建时的环境变量,可在Dockerfile中通过ARG指令引用

基础构建,为镜像打标签,Dockerfile位于当前目录:

docker buildx build -t my-app:1.0.0 .

指定Dockerfile路径,构建并加载到本地镜像库:

docker buildx build -f ./build/Dockerfile -t my-app:1.0.0 --platform linux/amd64 --load .

无缓存构建,同时设置构建参数,构建完成后推送到私有仓库:

docker buildx build -t registry.example.com/my-app:1.0.0 --build-arg APP_ENV=prod --no-cache --push .

2.3 镜像查看与管理

查看本地所有镜像列表:

docker images

仅输出本地所有镜像的ID,常用于批量操作:

docker images -q

查看镜像的详细历史构建记录,包括每一层的构建指令、大小、创建时间,可用于排查镜像体积过大问题:

docker history nginx:1.27.0-alpine

查看镜像的完整元数据,包括架构、操作系统、分层信息、环境变量、暴露端口、启动命令等,JSON格式输出:

docker inspect nginx:1.27.0-alpine

格式化输出镜像的核心信息,仅查看镜像的分层数量:

docker inspect --format '{{.RootFS.Layers | len}}' nginx:1.27.0-alpine

为本地镜像重新打标签,用于推送到不同仓库或修改版本号:

docker tag my-app:1.0.0 registry.example.com/my-app:1.0.0

2.4 镜像安全扫描

采用Docker官方原生安全工具Scout(v27.0.3默认集成),扫描镜像的CVE安全漏洞,是生产环境镜像上线前的必备步骤。 扫描本地镜像的所有CVE漏洞,按严重等级分类展示:

docker scout cves my-app:1.0.0

仅扫描高危和严重级别的漏洞,快速定位核心风险:

docker scout cves --only-severity critical,high my-app:1.0.0

生成镜像安全报告,输出到指定文件:

docker scout cves my-app:1.0.0 --output ./security-report.html

2.5 镜像导出、导入与删除

将本地镜像导出为tar压缩包,保留完整的分层、历史和元数据,用于镜像备份、离线分发:

docker save -o nginx-1.27.0-alpine.tar nginx:1.27.0-alpine

从tar包中导入镜像,恢复镜像的完整信息,可直接用于启动容器:

docker load -i nginx-1.27.0-alpine.tar

删除本地指定镜像,-f参数强制删除,即使镜像被容器引用(仅删除标签,镜像底层层保留):

docker rmi nginx:1.27.0-alpine

批量删除本地所有未被使用的镜像:

docker rmi $(docker images -q)

三、容器生命周期全流程核心命令

容器是镜像的运行实例,是一个独立的、可运行的隔离环境,包含应用程序及其所有依赖,该组命令是Docker最核心、最高频使用的命令,覆盖容器从创建、启动、运行、停止到删除的全生命周期。

3.1 容器创建与启动

3.1.1 docker run(核心高频)

创建并启动容器,是Docker最常用的命令,底层依次执行:检查本地镜像→无镜像则远程拉取→创建容器并分配namespace与cgroup→挂载镜像只读层与容器可写层→分配网络IP→启动容器执行指定命令,一步完成容器的创建与启动。语法docker run [OPTIONS] IMAGE [COMMAND] [ARG...]核心常用参数按功能分类

参数分类 核心参数 功能说明
基础运行 --name 为容器设置唯一名称,便于管理和访问,未设置则随机生成
基础运行 --rm 容器退出后自动删除容器及相关资源,适合临时测试场景
基础运行 -d, --detach 后台守护进程模式运行容器,生产环境必备
基础运行 -it 交互式终端模式,-i保持标准输入流打开,-t分配伪终端,两个参数配合使用才能进入容器交互式终端
端口映射 -p, --publish 端口映射,格式为宿主机端口:容器端口,将容器端口暴露到宿主机,支持TCP/UDP协议
端口映射 -P, --publish-all 随机映射容器Dockerfile中EXPOSE的所有端口到宿主机高位端口
环境配置 -e, --env 设置容器内的环境变量,可多次设置多个变量
环境配置 --env-file 从文件中批量加载环境变量,适合多环境配置管理
资源限制 --cpus 限制容器可使用的CPU核心数,如--cpus=0.5限制最多使用0.5个核心
资源限制 --memory, -m 限制容器可使用的内存上限,支持单位b/k/m/g,如--memory=512m
资源限制 --memory-swap 限制容器可使用的交换分区大小,设置为-1则不限制
重启策略 --restart 容器重启策略,可选值no/on-failure/always/unless-stopped,生产环境推荐always
数据挂载 -v, --volume 数据卷/绑定挂载,格式为宿主机路径/数据卷名:容器内路径:权限,权限可选ro(只读)/rw(读写)
数据挂载 --mount 高级挂载方式,语法更清晰,功能更完善,生产环境推荐使用
网络配置 --network 指定容器加入的网络,默认加入bridge网络
网络配置 --ip 为容器指定静态IP地址,仅支持自定义网络
用户配置 --user 指定容器内进程运行的用户,生产环境严禁使用root用户运行

生产环境标准示例:后台运行nginx容器,指定名称、端口映射、自动重启策略、CPU/内存资源限制、只读挂载配置文件:

docker run -d --name nginx-prod -p 80:80 --restart=always --cpus=0.5 --memory=512m -v ./nginx.conf:/etc/nginx/nginx.conf:ro nginx:1.27.0-alpine

临时测试示例:交互式运行alpine容器,退出后自动删除容器,进入shell终端:

docker run -it --rm alpine:latest /bin/sh

带持久化与环境变量的数据库示例:运行MySQL 8.4 LTS版本容器,配置root密码、默认数据库、数据持久化、资源限制、自动重启:

docker run -d --name mysql-prod -p 3306:3306 -e MYSQL_ROOT_PASSWORD=MySecurePass123! -e MYSQL_DATABASE=app_db -v mysql-data:/var/lib/mysql --restart=always --cpus=1 --memory=1g mysql:8.4.0

3.1.2 docker create

仅创建容器,不启动容器,底层仅完成容器的namespace、cgroup、可写层创建,不启动容器内进程,适合需要提前配置容器、后续按需启动的精细化管控场景。 创建容器,配置与docker run完全一致,仅不启动容器:

docker create --name nginx-pre -p 8080:80 --restart=always nginx:1.27.0-alpine

启动已创建的容器:

docker start nginx-pre

3.2 容器状态管理

3.2.1 容器启动、停止与重启

启动已停止的容器,可同时启动多个容器:

docker start nginx-prod mysql-prod

优雅停止运行中的容器,先向容器内1号主进程发送SIGTERM信号,等待默认10秒后发送SIGKILL信号强制停止,给进程预留优雅关闭的时间,生产环境优先使用:

docker stop nginx-prod

自定义优雅停止的超时时间,单位为秒,给耗时较长的应用预留足够的关闭时间:

docker stop -t 30 mysql-prod

强制停止运行中的容器,直接向容器内1号主进程发送SIGKILL信号,立即终止进程,生产环境慎用,可能导致数据丢失或文件损坏:

docker kill nginx-prod

重启容器,相当于先执行stop再执行start,可自定义超时时间:

docker restart -t 30 nginx-prod

暂停运行中的容器,冻结容器内的所有进程,暂停期间不占用CPU资源,可通过unpause恢复:

docker pause nginx-prod

恢复被暂停的容器,继续运行容器内的所有进程:

docker unpause nginx-prod

3.2.2 容器查看与筛选

查看所有运行中的容器列表,默认仅展示运行中的容器:

docker ps

查看所有容器,包括已停止、已创建、已退出的容器:

docker ps -a

仅输出所有容器的ID,常用于批量操作,如批量停止、批量删除容器:

docker ps -aq

过滤容器列表,仅展示状态为已退出的容器:

docker ps --filter status=exited

过滤容器列表,仅展示名称包含nginx的容器:

docker ps --filter name=nginx

格式化输出容器核心信息,自定义展示列,便于快速查看关键数据:

docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}\t{{.Image}}"

查看容器的详细元数据,包括IP地址、挂载信息、网络配置、环境变量、重启策略等所有配置信息,是容器问题排查的核心命令:

docker inspect nginx-prod

格式化输出容器的IP地址,快速获取容器内网IP:

docker inspect --format '{{.NetworkSettings.IPAddress}}' nginx-prod

格式化输出容器的所有挂载信息,排查数据持久化问题:

docker inspect --format '{{.Mounts}}' nginx-prod

3.3 容器进入与命令执行

3.3.1 docker exec(生产环境唯一推荐)

在运行中的容器内启动一个全新的进程,执行指定命令,是生产环境进入容器调试、执行命令的唯一推荐方式,退出终端不会影响容器的1号主进程,容器会继续正常运行。语法docker exec [OPTIONS] CONTAINER COMMAND [ARG...]核心常用参数

  • -it:交互式终端模式,进入容器shell终端必备
  • -d, --detach:后台执行命令,不占用当前终端
  • -e, --env:设置执行命令时的环境变量
  • -u, --user:指定执行命令的用户

进入运行中的nginx容器,启动交互式shell终端(alpine镜像默认使用/bin/sh,无bash):

docker exec -it nginx-prod /bin/sh

进入ubuntu容器,启动bash终端:

docker exec -it ubuntu-prod /bin/bash

在容器内后台执行备份脚本,无需进入容器:

docker exec -d mysql-prod /bin/sh /backup/backup.sh

以指定用户执行命令,确保权限安全:

docker exec -it --user app nginx-prod /bin/sh

3.3.2 docker attach

直接挂载到容器的1号主进程的标准输入输出流,退出终端会直接终止容器的1号主进程,导致容器停止,仅适用于调试容器主进程的输出,生产环境严禁使用。 挂载到容器主进程终端:

docker attach nginx-prod

3.4 容器日志查看

查看容器内进程的标准输出与标准错误日志,是应用问题排查的核心命令,支持实时跟踪、历史日志筛选、日志截断等功能。语法docker logs [OPTIONS] CONTAINER核心常用参数

  • -f, --follow:实时跟踪日志输出,持续刷新新增日志
  • -t, --timestamps:显示日志的时间戳,便于定位问题发生时间
  • --tail N:仅输出最后N行日志,避免输出大量历史日志刷屏
  • --since:仅输出指定时间之后的日志,支持时间戳、相对时间(如1h/1d)
  • --until:仅输出指定时间之前的日志

实时跟踪nginx容器的日志,持续刷新新增请求日志:

docker logs -f nginx-prod

查看容器最后100行日志,同时显示时间戳,快速定位最近的问题:

docker logs -t --tail 100 nginx-prod

查看最近1小时内的容器日志,排查特定时间段的问题:

docker logs --since 1h nginx-prod

查看指定日期范围内的日志,精准定位历史问题:

docker logs --since 2026-03-01 --until 2026-03-10 nginx-prod

3.5 容器资源监控与进程查看

实时查看所有运行中容器的资源使用情况,包括CPU使用率、内存使用率、内存限制、网络IO、磁盘IO、进程数等,是生产环境容器性能监控的核心命令:

docker stats

仅查看指定容器的资源使用情况,同时关闭实时刷新,仅输出一次当前状态:

docker stats --no-stream nginx-prod mysql-prod

格式化输出资源监控数据,自定义展示列,便于对接监控系统:

docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemPerc}}\t{{.MemUsage}}"

查看容器内运行的所有进程,相当于在容器内执行top/ps命令,无需进入容器即可查看进程状态:

docker top nginx-prod

3.6 容器文件拷贝与导出

在宿主机与容器之间互相拷贝文件/目录,无需进入容器即可修改容器内的配置文件、提取容器内的日志/数据。 将宿主机当前目录的nginx.conf文件拷贝到容器内的指定路径:

docker cp ./nginx.conf nginx-prod:/etc/nginx/nginx.conf

将容器内的日志目录拷贝到宿主机的当前目录,用于日志分析与备份:

docker cp nginx-prod:/var/log/nginx ./nginx-logs

将运行中的容器文件系统导出为扁平的tar压缩包,仅保留当前文件系统状态,丢失分层、历史与元数据,仅用于基于容器制作基础镜像,不适合备份:

docker export -o nginx-prod-container.tar nginx-prod

3.7 容器删除

删除已停止的容器,可同时删除多个容器:

docker rm nginx-pre

强制删除容器,无论容器是否处于运行状态,都会直接终止容器进程并删除,生产环境慎用,可能导致数据丢失:

docker rm -f nginx-prod

批量删除所有已退出的容器,释放系统资源:

docker rm $(docker ps --filter status=exited -q)

批量强制删除所有容器,包括运行中的容器,仅适用于测试环境重置:

docker rm -f $(docker ps -aq)

四、数据卷与持久化核心命令

Docker容器的可写层生命周期与容器绑定,容器删除后可写层的数据会完全丢失,且容器可写层的读写性能远低于宿主机本地磁盘,因此生产环境必须通过数据卷实现数据持久化,确保容器删除、重建后数据不丢失。

Docker数据卷是由Docker管理的宿主机上的特殊目录,完全独立于容器的生命周期,支持多容器共享、权限管控、备份迁移,是Docker持久化的标准方案。

4.1 数据卷创建与管理

创建自定义命名数据卷,生产环境推荐使用命名数据卷,便于管理与迁移,避免匿名数据卷的混乱:

docker volume create mysql-data

查看本地所有数据卷列表,包括匿名数据卷与命名数据卷:

docker volume ls

查看数据卷的详细元数据,包括数据卷在宿主机上的挂载路径、创建时间、标签等,是数据卷问题排查的核心命令:

docker volume inspect mysql-data

删除指定数据卷,仅能删除未被任何容器引用的数据卷:

docker volume rm mysql-data

批量删除所有未被容器使用的数据卷,释放磁盘空间,-f参数强制删除无需确认:

docker volume prune -f

4.2 数据卷挂载使用

4.2.1 基础挂载(-v参数)

将命名数据卷挂载到容器内的指定路径,实现数据持久化,容器删除后数据卷内的数据完全保留,重建容器时重新挂载即可恢复数据:

docker run -d --name mysql-prod -v mysql-data:/var/lib/mysql mysql:8.4.0

设置挂载权限,将配置文件以只读模式挂载到容器内,防止容器内进程修改配置文件,提升安全性:

docker run -d --name nginx-prod -v ./nginx.conf:/etc/nginx/nginx.conf:ro nginx:1.27.0-alpine

4.2.2 高级挂载(--mount参数,生产环境推荐)

--mount参数语法更清晰,功能更完善,支持更多高级配置,生产环境优先使用,避免-v参数的语法歧义。 将命名数据卷挂载到容器内,等同于-v的基础功能,语法更明确:

docker run -d --name mysql-prod --mount type=volume,source=mysql-data,target=/var/lib/mysql mysql:8.4.0

绑定挂载宿主机目录,设置只读权限,防止容器修改宿主机文件:

docker run -d --name nginx-prod --mount type=bind,source=./nginx.conf,target=/etc/nginx/nginx.conf,readonly nginx:1.27.0-alpine

创建临时tmpfs挂载,数据仅存储在宿主机内存中,容器停止后数据自动清除,适合存储敏感临时数据:

docker run -d --name app-prod --mount type=tmpfs,target=/tmp,tmpfs-size=100m my-app:1.0.0

五、网络管理核心命令

Docker通过网络实现容器之间、容器与宿主机、容器与外部网络的通信,提供了多种网络驱动,适配不同的业务场景,核心默认网络包括:

  1. bridge(桥接网络):默认网络,所有未指定网络的容器都会加入该网络,同一桥接网络内的容器可互相通信,默认桥接网络不支持DNS名称解析,仅能通过IP互访
  2. host(主机网络):容器与宿主机共享网络命名空间,容器直接使用宿主机的IP与端口,无网络隔离,网络性能最高,适合对网络性能要求极高的场景
  3. none(无网络):容器没有任何网络接口,完全隔离,仅能通过本地回环接口通信,适合高安全要求的离线应用
  4. overlay(覆盖网络):跨主机的容器网络,用于Docker Swarm集群,实现不同宿主机上的容器之间的内网通信

生产环境推荐使用自定义桥接网络,相比默认桥接网络,支持容器间DNS名称解析(可通过容器名称互访)、更好的隔离性、更灵活的配置、更优的性能。

5.1 网络创建与管理

创建自定义桥接网络,指定网段、网关与网络名称,生产环境推荐为每个业务项目创建独立的自定义网络,实现业务隔离:

docker network create --driver bridge --subnet 172.20.0.0/16 --gateway 172.20.0.1 app-network

查看本地所有网络列表,包括默认网络与自定义网络:

docker network ls

查看网络的详细元数据,包括网段、网关、连接到该网络的所有容器及其IP地址,是网络问题排查的核心命令:

docker network inspect app-network

删除指定网络,仅能删除没有容器连接的网络:

docker network rm app-network

批量删除所有未被使用的网络,释放资源:

docker network prune -f

5.2 容器网络连接管理

启动容器时指定加入的自定义网络,同一网络内的容器可直接通过容器名称互相访问,无需端口映射:

docker run -d --name nginx-app --network app-network nginx:1.27.0-alpine

将运行中的容器连接到指定网络,一个容器可同时加入多个网络,实现网络隔离与互通:

docker network connect app-network mysql-prod

将容器从指定网络中断开,移除容器的网络接口:

docker network disconnect app-network mysql-prod

六、Docker Compose核心命令(V2最新稳定版)

Docker Compose是Docker官方的多容器应用编排工具,通过YAML文件定义应用所需的所有服务、网络、数据卷,通过一条命令完成所有服务的创建、启动、停止、销毁,是微服务、多组件应用部署的标准工具。

本文基于2026年最新稳定版Compose V2编写,该版本已完全集成到Docker CLI中,使用docker compose命令,替代已废弃的V1版本docker-compose命令,所有示例均基于最新Compose Specification规范编写。

6.1 核心前置说明

Compose的核心配置文件为compose.yaml(官方推荐文件名,兼容旧版docker-compose.yaml),以下为标准的多服务配置示例,所有后续命令均基于该配置文件:

services:
 nginx:
   image: nginx:1.27.0-alpine
   ports:
     - "80:80"
   volumes:
     - ./nginx.conf:/etc/nginx/nginx.conf:ro
   networks:
     - app-net
   restart: always
   depends_on:
     - app
 app:
   build: ./app
   environment:
     - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/app_db
     - SPRING_PROFILES_ACTIVE=prod
   networks:
     - app-net
   restart: always
   depends_on:
     - mysql
 mysql:
   image: mysql:8.4.0
   environment:
     - MYSQL_ROOT_PASSWORD=MySecurePass123!
     - MYSQL_DATABASE=app_db
   volumes:
     - mysql-data:/var/lib/mysql
   networks:
     - app-net
   restart: always
volumes:
 mysql-data:
networks:
 app-net:
   driver: bridge

6.2 核心命令详解

校验compose.yaml文件的语法是否正确,格式化输出完整配置,提前排查配置错误,是启动服务前的必备步骤:

docker compose config

创建并启动compose文件中定义的所有服务、网络、数据卷,-d参数后台运行,--build参数启动前重新构建所有需要构建的镜像,--force-recreate参数强制重新创建所有容器,即使配置没有变化:

docker compose up -d --build

停止并删除compose文件中定义的所有容器、网络,-v参数同时删除所有定义的数据卷,--rmi all参数同时删除所有相关镜像,--remove-orphans参数删除compose文件中未定义的孤儿容器:

docker compose down -v

查看当前compose项目中所有服务的容器运行状态,包括容器名称、状态、端口映射等:

docker compose ps

查看服务的日志,-f参数实时跟踪日志,--tail N参数仅输出最后N行日志,可指定单个服务查看日志:

docker compose logs -f nginx

查看所有服务的日志,同时显示时间戳,仅输出最后200行:

docker compose logs -t --tail 200

在运行中的服务容器内执行命令,最常用于进入服务容器的交互式终端:

docker compose exec app /bin/sh

停止compose项目中的所有服务,不删除容器、网络、数据卷,可通过start命令重新启动:

docker compose stop

停止指定的单个服务:

docker compose stop nginx

启动已停止的所有服务:

docker compose start

重启所有服务,可自定义优雅停止的超时时间:

docker compose restart -t 30

查看compose项目中所有镜像的构建历史,排查镜像构建问题:

docker compose images

拉取compose文件中定义的所有服务的镜像,提前预热镜像,提升启动速度:

docker compose pull

七、镜像仓库与分发核心命令

镜像仓库用于存储和分发Docker镜像,分为公共仓库(如Docker Hub)和私有仓库(如Harbor、Docker Registry),该组命令用于仓库的登录、镜像的推送与拉取、仓库管理。

登录Docker Hub官方公共仓库,执行后输入密码即可完成登录,登录后可推送自己的镜像:

docker login -u your-docker-username

登录私有镜像仓库,需指定仓库地址,适用于企业内部私有仓库:

docker login registry.example.com -u your-username

退出已登录的镜像仓库,默认退出Docker Hub,指定地址则退出对应私有仓库:

docker logout registry.example.com

为本地镜像打标签,标签格式为仓库地址/项目名/镜像名:版本号,只有符合该格式的镜像才能推送到对应仓库:

docker tag my-app:1.0.0 registry.example.com/my-project/my-app:1.0.0

将打好标签的镜像推送到远程镜像仓库,推送前需先登录对应仓库:

docker push registry.example.com/my-project/my-app:1.0.0

同时推送镜像的所有标签:

docker push -a registry.example.com/my-project/my-app

从远程仓库搜索镜像,支持模糊搜索,可查看镜像的官方认证、星级等信息:

docker search nginx

仅搜索官方认证的镜像,过滤非官方镜像,提升安全性:

docker search --filter is-official=true nginx

八、高频易混淆命令与概念明确区分

8.1 docker run vs docker create

命令 核心功能 底层执行逻辑 适用场景
docker run 创建并启动容器 调用create创建容器 → 调用start启动容器内进程 快速启动容器,一步到位,日常开发测试最常用
docker create 仅创建容器,不启动 仅创建容器的namespace、cgroup、可写层,不启动进程 提前配置容器,后续按需启动,生产环境精细化管控

8.2 docker exec vs docker attach

命令 核心原理 退出终端的影响 生产环境适用性
docker exec 在运行的容器中启动一个全新的独立进程,分配新的终端 退出exec终端,仅终止新启动的进程,不会影响容器的1号主进程,容器继续正常运行 生产环境唯一推荐的容器调试方式,安全无风险
docker attach 直接挂载到容器的1号主进程的标准输入输出流 退出attach终端(Ctrl+C),会直接终止容器的1号主进程,导致容器停止 仅适用于调试容器主进程输出,生产环境严禁使用

8.3 docker rmi vs docker rm

命令 操作对象 核心功能 关键注意事项
docker rmi Docker镜像(Image) 删除本地存储的镜像 必须先删除所有使用该镜像的容器,才能删除镜像;-f参数仅强制删除标签,底层共享层保留
docker rm Docker容器(Container) 删除已创建的容器 只能删除已停止的容器,-f参数可强制删除运行中的容器,生产环境慎用,可能导致数据丢失

8.4 docker save vs docker export

命令 操作对象 输出内容 保留的信息 核心适用场景
docker save Docker镜像 镜像完整的分层tar包 保留镜像的所有分层、构建历史、标签、元数据、环境配置 镜像的备份、迁移、离线分发,导入后可直接用于启动容器
docker export Docker容器 容器文件系统的扁平tar包 丢失所有分层、构建历史、元数据,仅保留当前文件系统的快照 基于运行中的容器制作基础镜像,不适合镜像备份与迁移

8.5 CMD vs ENTRYPOINT(Dockerfile核心指令)

指令 核心作用 是否被docker run末尾的命令覆盖 核心适用场景
CMD 容器启动的默认命令与参数 会被docker run末尾的命令完全覆盖 为容器设置默认启动命令,允许用户在启动时灵活修改
ENTRYPOINT 容器启动的固定入口命令 不会被覆盖,docker run末尾的命令会被当作参数传递给ENTRYPOINT 容器启动命令固定,仅需传递运行参数,如工具类镜像、固定入口的应用镜像

九、生产环境Docker命令最佳实践

  1. 镜像管理最佳实践
  • 严禁使用latest标签,必须使用固定的语义化版本号,确保不同环境的镜像一致性,避免版本漂移导致的线上问题
  • 优先使用alpine、slim等精简基础镜像,减少镜像体积,降低攻击面,提升镜像拉取和容器启动速度
  • 构建镜像时必须使用多阶段构建,仅保留运行时所需的文件,剔除构建工具、临时文件、源码,最小化镜像体积
  • 镜像推送到仓库前,必须通过docker scout cves扫描CVE安全漏洞,修复高危和严重漏洞后再上线生产环境
  • 严禁使用docker commit基于容器制作镜像,会导致镜像分层混乱、无法追溯、存在安全隐患,所有镜像必须通过Dockerfile构建
  1. 容器启动最佳实践
  • 必须设置--restart=always重启策略,确保宿主机重启、容器异常退出时自动恢复,提升服务可用性
  • 必须设置CPU、内存资源限制,通过--cpus--memory参数限制容器的资源上限,防止单个容器耗尽宿主机资源,导致宿主机OOM宕机
  • 严禁使用--privileged特权模式运行容器,除非绝对必要,特权模式下容器拥有宿主机root权限,存在极大的安全风险
  • 容器内进程严禁以root用户运行,必须在Dockerfile中创建普通用户,通过--user参数指定运行用户,最小化权限
  • 生产环境必须使用-d后台模式运行容器,严禁使用-it交互式模式启动容器,避免终端关闭导致容器停止
  • 仅暴露必要的端口,严禁将容器的所有端口都映射到宿主机,降低攻击面,容器间的内部通信通过自定义网络实现,无需端口映射
  1. 数据持久化最佳实践
  • 生产环境必须使用命名数据卷实现数据持久化,严禁使用绑定挂载直接挂载宿主机目录,避免权限问题、路径依赖、安全风险
  • 关键业务数据必须定期备份,通过--volumes-from参数挂载数据卷,执行备份命令,确保数据可恢复
  • 严禁将业务数据写入容器的可写层,容器删除后数据会完全丢失,且可写层的读写性能远低于数据卷,会影响应用性能
  • 敏感配置文件通过只读模式挂载到容器内,防止容器内进程恶意修改配置文件,提升安全性
  1. 网络管理最佳实践
  • 生产环境必须使用自定义桥接网络,严禁使用默认bridge网络,自定义网络支持容器间DNS名称解析,具备更好的隔离性和性能
  • 为不同的业务项目创建独立的自定义网络,实现业务之间的网络隔离,避免跨业务的容器互访
  • 容器之间的通信优先使用容器名称,而非IP地址,容器重启后IP可能发生变化,容器名称固定不变,确保服务调用的稳定性
  • 对外提供服务的容器,仅映射必要的端口到宿主机,且通过防火墙限制访问来源,避免端口暴露到公网
  1. 运维安全最佳实践
  • 必须配置容器日志轮转,通过--log-driver--log-opt参数配置日志驱动和轮转策略,防止日志文件占满宿主机磁盘空间
  • 定期执行docker system prune清理无用资源,释放磁盘空间,避免磁盘占满导致的线上故障
  • 定期更新Docker Engine到最新稳定版,修复安全漏洞,提升稳定性和性能
  • 严格管控Docker守护进程的访问权限,仅授权给必要的用户,严禁非授权用户访问Docker API
  • 容器命名必须规范,采用业务线-服务名-环境的命名格式,便于运维管理和问题排查

结尾:Docker高频命令速查表

命令分类 高频核心命令 核心功能
环境信息 docker --version 查看Docker版本
环境信息 docker system info 查看Docker系统信息
环境信息 docker system df 查看Docker磁盘使用情况
环境信息 docker system prune -af 清理所有无用资源
镜像管理 docker pull 镜像名:版本 拉取镜像
镜像管理 docker buildx build -t 镜像名:版本 . 构建镜像
镜像管理 docker images 查看本地镜像列表
镜像管理 docker rmi 镜像名:版本 删除镜像
镜像管理 docker save -o 文件名.tar 镜像名:版本 导出镜像
镜像管理 docker load -i 文件名.tar 导入镜像
镜像安全 docker scout cves 镜像名:版本 扫描镜像安全漏洞
容器管理 docker run -d --name 容器名 -p 宿主机端口:容器端口 镜像名:版本 创建并启动容器
容器管理 docker ps -a 查看所有容器
容器管理 docker start/stop/restart 容器名 启动/停止/重启容器
容器管理 docker exec -it 容器名 /bin/sh 进入容器终端
容器管理 docker logs -f 容器名 实时查看容器日志
容器管理 docker stats 实时查看容器资源使用情况
容器管理 docker inspect 容器名 查看容器详细信息
容器管理 docker rm 容器名 删除容器
数据卷管理 docker volume create 数据卷名 创建数据卷
数据卷管理 docker volume ls 查看数据卷列表
数据卷管理 docker volume prune -f 清理未使用的数据卷
网络管理 docker network create 网络名 创建自定义网络
网络管理 docker network ls 查看网络列表
网络管理 docker network inspect 网络名 查看网络详细信息
编排管理 docker compose up -d --build 启动Compose服务
编排管理 docker compose down -v 停止并删除Compose服务
编排管理 docker compose logs -f 服务名 查看Compose服务日志
仓库管理 docker login 仓库地址 登录镜像仓库
仓库管理 docker push 镜像名:版本 推送镜像到仓库
目录
相关文章
|
4月前
|
运维 Shell 应用服务中间件
【速查手册】Docker常用命令大全:这20%的命令解决了80%的问题
本文精炼总结 Docker 高频命令,按镜像管理、容器生命周期、排查调试、清理维护四大场景分类,详解常用参数与实战示例,附速查表,助你高效掌握核心操作,提升开发运维效率。
|
17天前
|
Arthas 运维 监控
线上 JVM 故障秒解:Arthas 高阶用法与全链路定位实战指南
本文介绍阿里巴巴开源的Java诊断工具Arthas在线上JVM故障排查中的核心应用。针对CPU飙高、FullGC频繁、接口超时等常见问题,Arthas提供无需重启服务的热修复能力,包括方法热替换(trace/watch/tt命令)、线程问题定位(thread命令)、内存分析(heapdump)等核心功能。文章通过真实案例演示全链路排查流程,并给出安全使用建议,帮助开发者快速定位和解决线上问题,实现从被动救火到主动定位的转变。Arthas的字节码增强技术可实时监控JVM状态,是提升线上问题排查效率的利器。
241 1
|
29天前
|
缓存 Java 开发者
吃透 Spring Bean 生命周期:从源码底层到实战落地
本文深度解析Spring 6.2.3 Bean生命周期,涵盖BeanDefinition注册、实例化、属性填充、Aware回调、BeanPostProcessor前后置处理、初始化(@PostConstruct/InitializingBean/init-method)、AOP代理、单例缓存及销毁全流程,结合源码、实战示例与生产问题排查,助你彻底掌握IoC核心机制。
445 3
|
2月前
|
JSON Java 数据格式
Feign 复杂对象参数传递避坑指南:从报错到优雅落地
本文深入剖析了SpringCloud Feign在复杂对象参数传递中的常见问题及解决方案。文章首先分析了GET请求传递复杂对象失败的底层原因,包括HTTP规范约束和Feign参数解析逻辑。针对GET场景,提供了四种解决方案:@SpringQueryMap(首选)、手动拆分属性+@RequestParam、MultiValueMap封装和自定义FeignEncoder,详细比较了各方案的优缺点和适用场景。对于POST场景,推荐使用@RequestBody注解传递JSON请求体。
670 6
|
2月前
|
应用服务中间件 Shell nginx
最全的docker命令参数解释及命令用法
本文系统详解Docker核心命令,涵盖容器(run/exec/ps/start/stop等)、镜像(pull/build/push/rmi等)、网络、数据卷及全局参数,并配实操示例与可直接执行的命令,助初学者快速掌握Docker日常运维与开发应用。
1081 129
|
15天前
|
人工智能 IDE 测试技术
接口文档一丢,AI自动生成测试用例和自动化脚本?
AI IDE + MCP 正重塑软件测试:需求文档→AI自动生成测试用例与自动化脚本→CI自动执行。相比传统人工编写,它大幅提升效率;区别于知识库方案,AI IDE可操作文件、调用API、构建工程。核心前提:需求需结构化、清晰。
|
18天前
|
存储 监控 Java
炸穿 JVM 瓶颈!全网最硬核 JVM 核心参数・线上配置规范与调优 SOP
本文聚焦JDK17实战调优,直击90%线上JVM问题根源——参数配置不合理、内存规划错误、GC选型失当。详解堆内存、元空间、ZGC/G1、线程栈等核心参数,提供微服务/大数据/网关三类标准化配置SOP及可直接复用的监控代码与诊断方案。
174 1
|
16天前
|
存储 缓存 监控
90% 的 JVM 元空间 OOM,都栽在类加载与类卸载上!调优 + 排查全攻略
本文深入剖析JVM元空间OOM、频繁Full GC等生产问题,聚焦类加载机制、元空间内存模型与类卸载三要素,详解自定义类加载器泄漏、线程上下文类加载器未恢复等5大高频场景,提供参数调优、日志观测、MAT排查及修复实战方案。
488 3
|
18天前
|
缓存 监控 Java
从 GC 频繁到毫秒级停顿:JVM 内存调优分代配比、晋升机制与架构策略全拆解
本文深入剖析JDK 17下JVM内存调优核心:从分代回收底层逻辑、年轻代/老年代配比规则,到对象晋升机制与四大坑点;涵盖G1/Parallel收集器调优实践、代码/架构级优化策略,并附生产级参数配置与避坑指南,兼顾深度与落地性。
221 3
|
30天前
|
消息中间件 存储 Java
吃透 RocketMQ
本文全面介绍Apache RocketMQ分布式消息中间件的核心架构、底层原理和生产实践。首先解析RocketMQ四大核心组件(NameServer、Broker、Producer、Consumer)的职责与协作机制,重点剖析其高性能存储设计(CommitLog、ConsumeQueue、IndexFile)、刷盘策略和主从复制原理。随后详细讲解基于Dledger Raft协议的高可用集群部署方案,包含环境准备、配置优化和监控部署。
335 6