Loading...

文章背景图

Docker 常用命令速查手册:镜像、容器、网络与存储

2026-08-17
0
-
- 分钟

引言

对日常开发者来说,Docker 的价值在于"一次构建、随处运行"。但真正卡住效率的,往往不是"会不会用",而是"记不住命令"。docker run 到底加不加 -it?镜像越积越多怎么清理?如何让两个容器互相访问?

这篇文章聚焦 Docker 核心命令,从真实开发高频场景出发,把最常用的命令按类别整理成一张可随时查阅的地图。建议收藏,需要时直接搜索关键词定位。

提示:本文假设你已经安装 Docker,可通过 docker --version 检查环境。


一、命令速查总览

先上一张总表,方便快速定位你需要的命令大类:

分类

核心命令

典型用途

系统信息

docker version / docker info

查看版本、引擎状态

镜像

pull / build / images / rmi / tag / push

拉取、构建、管理镜像

容器

run / ps / start / stop / rm / exec / logs

容器生命周期与调试

网络

network ls / create / inspect / connect

容器互联与端口映射

存储

volume ls / create / inspect / rm

数据持久化

构建进阶

docker buildx build

多架构镜像构建

运维

system df / system prune

资源清理与维护

Docker 命令遵循统一格式:docker <对象> <操作> [参数]。例如 docker container ls 等价于 docker ps,理解这个规律后,很多命令可以举一反三。


二、镜像管理命令

镜像是容器的"模板",日常开发中最先接触的就是拉取和构建镜像。

2.1 拉取镜像:docker pull

# 拉取最新版
docker pull nginx

# 拉取指定版本(推荐在生产中显式指定 tag)
docker pull nginx:1.25

# 从指定仓库拉取
docker pull registry.example.com/myapp:latest

2.2 构建镜像:docker build

# 基础构建:-t 指定镜像名和标签,. 表示构建上下文为当前目录
docker build -t myapp:1.0 .

# 指定 Dockerfile 路径
docker build -f docker/Dockerfile -t myapp:1.0 .

# 多阶段构建 + 传入构建参数
docker build --build-arg NODE_ENV=production -t myapp:1.0 .

# 构建时清除缓存
docker build --no-cache -t myapp:1.0 .

构建优化建议:编写 .dockerignore 排除 node_modules、.git 等无关文件,能显著缩小构建上下文、加快构建速度。

2.3 查看与删除镜像

# 列出本地镜像
docker images
docker image ls

# 查看镜像详情(层级、环境变量、端口等)
docker inspect nginx:1.25

# 查看镜像构建历史
docker history nginx:1.25

# 删除镜像(强制删除加 -f)
docker rmi myapp:1.0
docker rmi <IMAGE_ID>

# 删除所有未被使用的镜像(慎用)
docker image prune -a

2.4 标签与推送:docker tag / docker push

# 打标签(tag 本质是给镜像加一个别名)
docker tag myapp:1.0 myrepo/myapp:1.0

# 登录仓库后推送
docker login
docker push myrepo/myapp:1.0

2.5 镜像的离线传递:save / load

在没有外网的环境(内网、离线服务器)下,可以用 save/load 传递镜像:

# 导出镜像为 tar 包
docker save -o myapp.tar myapp:1.0

# 从 tar 包导入镜像
docker load -i myapp.tar

三、容器管理命令

容器是运行中的镜像实例,这部分命令是日常使用频率最高的。

3.1 运行容器:docker run

docker run 的参数最丰富,先看一个典型的 Web 应用启动命令:

docker run -d \
  --name myapp \
  -p 8080:80 \
  -v /data:/app/data \
  -e ENV=production \
  --restart unless-stopped \
  myapp:1.0

常用参数速查:

参数

说明

示例

-d

后台运行(detached)

-d

--name

指定容器名

--name myapp

-p

端口映射 宿主机:容器

-p 8080:80

-v

挂载数据卷/目录

-v /data:/app/data

-e

设置环境变量

-e MYSQL_ROOT_PASSWORD=123

--env-file

从文件批量读环境变量

--env-file .env

-it

交互式运行 + 分配终端

-it

--rm

容器退出后自动删除

--rm

--restart

重启策略

--restart always

--network

指定网络

--network mynet

交互式容器(调试常用):

# 启动一个临时 Ubuntu 容器并进入 shell,退出后自动删除
docker run --rm -it ubuntu:22.04 bash

3.2 查看容器:docker ps

# 查看运行中的容器
docker ps

# 查看所有容器(含已停止的)
docker ps -a

# 只显示容器 ID
docker ps -aq

3.3 启停与删除

docker start myapp      # 启动已停止的容器
docker stop myapp       # 停止容器
docker restart myapp    # 重启容器

# 删除容器(运行中的需加 -f)
docker rm myapp
docker rm -f myapp

# 一键删除所有已停止的容器
docker container prune

3.4 进入容器与执行命令:docker exec

# 进入容器的 shell
docker exec -it myapp bash

# 直接执行单条命令
docker exec myapp ls -la /app
docker exec myapp cat /etc/hosts

区别:docker exec 是在运行中的容器里执行新命令;docker attach 是连接容器的主进程(PID 1),通常用于查看启动进程的输出。

3.5 查看日志与状态:logs / stats / top

# 查看日志,-f 持续跟随,--tail 只看最近 N 行
docker logs -f --tail 100 myapp

# 实时查看资源占用(CPU、内存、网络、磁盘 I/O)
docker stats

# 查看容器内运行的进程
docker top myapp

3.6 文件拷贝:docker cp

# 从宿主机拷贝到容器
docker cp ./config.json myapp:/app/config.json

# 从容器拷贝到宿主机
docker cp myapp:/app/logs ./logs

四、网络管理命令

容器间通信和端口暴露都依赖网络。Docker 默认提供 bridge、host、none 三种网络。

4.1 常用命令

# 查看网络列表
docker network ls

# 创建自定义网络(推荐使用,便于容器间通过名字互访)
docker network create mynet

# 查看网络详情
docker network inspect mynet

# 运行容器时指定网络
docker run -d --network mynet --name web myapp:1.0

# 将已运行的容器连接到网络
docker network connect mynet db

# 断开连接 / 删除网络
docker network disconnect mynet db
docker network rm mynet

4.2 关键概念

  • bridge(默认):容器通过虚拟网桥通信,跨容器需通过 -p 映射端口到宿主机。

  • host:容器直接使用宿主机网络,性能最好但隔离性差。

  • 自定义网络:同一网络下的容器可以直接用容器名互相访问(内置 DNS 解析),这是多容器应用推荐的做法。

示例:让 web 容器通过容器名 db 访问数据库:

docker network create app-net
docker run -d --network app-net --name db mysql:8.0
docker run -d --network app-net --name web -e DB_HOST=db myapp:1.0

五、数据卷与存储

容器删除后,容器内的数据会丢失。要持久化数据,需要挂载数据卷或宿主机目录。

5.1 数据卷(volume)—— 推荐方式

# 创建数据卷
docker volume create mydata

# 查看数据卷列表
docker volume ls

# 查看数据卷详情(含挂载点路径)
docker volume inspect mydata

# 挂载数据卷到容器
docker run -d -v mydata:/var/lib/mysql mysql:8.0

# 删除数据卷
docker volume rm mydata

# 清理所有未被使用的数据卷(慎用)
docker volume prune

5.2 绑定挂载(bind mount)—— 开发环境常用

将宿主机目录直接挂载到容器,适合本地开发时实时同步代码:

docker run -d -v $(pwd)/src:/app/src myapp:1.0

方式

数据卷 volume

绑定挂载 bind mount

管理方式

Docker 统一管理

宿主机目录

适用场景

生产持久化

开发调试

可移植性

依赖宿主机路径


六、镜像构建进阶:BuildKit 与 Buildx

现代 Docker(19.03+)默认使用 BuildKit 引擎,通过 docker buildx 可以构建多架构镜像,这是 ARM 服务器(如 Apple Silicon、云厂商 ARM 实例)日益普及后的刚需。

6.1 检查与创建构建器

# 检查 buildx 是否可用
docker buildx version

# 创建并切换到新的多架构构建器
docker buildx create --name multiarch --use

# 启动构建器并查看详情
docker buildx inspect --bootstrap

6.2 多架构构建

# 同时构建 amd64 和 arm64 镜像并推送到仓库
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t myrepo/myapp:1.0 \
  --push .

注意:多架构镜像无法直接保存在本地,必须推送到镜像仓库才能完成架构分发。


七、实用技巧与常见排错

7.1 资源清理(日常维护必背)

# 一键查看 Docker 占用的磁盘空间
docker system df

# 清理所有未使用的资源(镜像、容器、网络、缓存,慎用)
docker system prune -a

# 分项清理
docker container prune   # 清理停止的容器
docker image prune -a    # 清理未使用的镜像
docker volume prune      # 清理未使用的数据卷
docker network prune     # 清理未使用的网络

7.2 高频实用组合

# 停止并删除所有容器
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)

# 删除所有 dangling(悬空)镜像
docker image prune -f

# 查看容器 IP 地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myapp

# 实时追踪日志
docker logs -f --tail 50 myapp

7.3 常见问题排查

问题现象

排查思路

容器启动后立即退出

docker logs 查看报错;docker run -it 前台运行观察输出

端口被占用

docker ps 检查映射冲突,换一个宿主机端口

容器间无法互访

确认是否在同一自定义网络,用容器名而非 IP 访问

镜像拉取慢/失败

配置国内镜像加速器(registry-mirrors)

容器内时间不对

挂载宿主机时区:-v /etc/localtime:/etc/localtime:ro

磁盘占用过大

docker system df 定位,用 prune 清理


总结与展望

掌握这些命令后,日常开发中的镜像构建、容器调试、网络互联、数据持久化基本都能覆盖。最后提炼几条核心建议:

  1. 分清"生命周期"四件事:run 启动、ps 查看、stop 停止、rm 删除——这是容器管理的骨架。

  2. 显式指定 tag:生产环境避免使用 latest,防止"同样的命令,不同的结果"。

  3. 容器互联用自定义网络:让容器通过名字互访,远比记 IP 可靠。

  4. 重视资源清理:定期 docker system df 和 prune,避免磁盘被镜像和悬空缓存占满。

随着云原生和异构计算(ARM/AMD)的普及,docker buildx 多架构构建正从"进阶技巧"变成"基础能力"。建议在日常 CI/CD 中尽早引入多架构构建,让交付的镜像具备更好的跨平台兼容性。

延伸阅读:多容器应用的编排与一键启停,请参阅《Docker Compose 实战指南》。


参考资料:

原创

Docker 常用命令速查手册:镜像、容器、网络与存储

本文链接: Docker 常用命令速查手册:镜像、容器、网络与存储

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

文章目录