news 2026/8/26 3:23:03

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker 命令大全:从入门到生产,全场景核心指令全覆盖

开篇: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 rmiDocker镜像(Image)删除本地存储的镜像必须先删除所有使用该镜像的容器,才能删除镜像;-f参数仅强制删除标签,底层共享层保留
docker rmDocker容器(Container)删除已创建的容器只能删除已停止的容器,-f参数可强制删除运行中的容器,生产环境慎用,可能导致数据丢失

8.4 docker save vs docker export

命令操作对象输出内容保留的信息核心适用场景
docker saveDocker镜像镜像完整的分层tar包保留镜像的所有分层、构建历史、标签、元数据、环境配置镜像的备份、迁移、离线分发,导入后可直接用于启动容器
docker exportDocker容器容器文件系统的扁平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 镜像名:版本推送镜像到仓库
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/26 3:22:39

Gemma-3-12B-IT效果对比:Gemma-2 vs Gemma-3在多语言问答准确率实测

Gemma-3-12B-IT效果对比:Gemma-2 vs Gemma-3在多语言问答准确率实测 1. 引言:为什么我们要关心Gemma-3? 如果你用过Gemma-2,可能会觉得它已经挺不错了——回答问题、写代码、聊天都像模像样。但当我第一次用上Gemma-3-12B-IT时&…

作者头像 李华
网站建设 2026/7/14 16:56:23

Lingyuxiu MXJ LoRA GPU算力优化部署教程:24G显存流畅运行实测

Lingyuxiu MXJ LoRA GPU算力优化部署教程:24G显存流畅运行实测 1. 项目简介 今天给大家分享一个特别实用的人像生成工具——Lingyuxiu MXJ LoRA创作引擎。这是一个专门为生成唯美真人风格人像设计的轻量化系统,不需要联网就能部署使用,特别…

作者头像 李华
网站建设 2026/7/14 16:56:24

vCenter Server 9.0 OVF - 在 Fusion 和 Workstation 中快速部署 vCSA

vCenter Server 9.0 OVF - 在 Fusion 和 Workstation 中快速部署 vCSA vCenter Server 9.0 系列更新 请访问原文链接:https://sysin.org/blog/vmware-vcenter-9-ovf/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org VCSA OVF …

作者头像 李华
网站建设 2026/7/14 16:56:25

【程序员转行】前端最近太难了!AI时代不转型,真要被淘汰了

前端圈的焦虑,最近真的快溢出来了! 随着AI技术的飞速迭代,传统前端工程师的岗位需求迎来断崖式下滑,不少从业者感慨:前端正在沦为下个被AI“替代”的传统岗位,再不转型就晚了! 放在以前&#xf…

作者头像 李华
网站建设 2026/7/14 16:56:37

语音识别模型轻量化实践:SenseVoice-Small ONNX量化原理与效果验证

语音识别模型轻量化实践:SenseVoice-Small ONNX量化原理与效果验证 1. 语音识别轻量化的重要性与SenseVoice-Small简介 语音识别技术在日常生活中的应用越来越广泛,从智能助手到实时字幕,都需要高效准确的识别能力。然而,传统的…

作者头像 李华
网站建设 2026/7/14 16:56:36

三、记录一些调试经验

一、 不能编译或能编译但运行异常可以结合printf语句打印,缩小范围,再设置断点,逐行跟踪变量的值是否是预期值,重点关注是否是内存分配不够溢出,或者是一些逻辑问题二、能编译能运行但提交结果部分正确,部分…

作者头像 李华