一、前言:命令学习技巧
Docker 命令无需死记,核心记住 “模块 + 动作” 逻辑(如docker image pull是 “镜像模块 + 拉取动作”),本文按使用频率排序,每个命令包含「格式 + 参数解释 + 实战示例 + 避坑提示」,提议收藏后随用随查。
二、镜像操作命令(核心高频)
镜像作为 Docker 的 “安装包”,是所有操作的基础,以下为最常用命令:
|
命令格式 |
功能描述 |
实战示例 |
关键参数 / 避坑提示 |
|
docker pull [镜像名]:[版本] |
拉取镜像 |
docker pull redis:7.0(拉取 Redis 7.0)docker pull nginx(默认拉 latest 版本) |
1. 版本不写默认latest,生产环境提议指定版本2. 国内用户可先配镜像源(见下文小贴士) |
|
docker images /docker image ls |
查看本地镜像 |
docker images(显示所有镜像)docker images nginx(只看 nginx 镜像) |
输出字段:REPOSITORY(镜像名)、TAG(版本)、IMAGE ID(唯一标识) |
|
docker rmi [镜像ID/镜像名] |
删除本地镜像 |
docker rmi redis:7.0(按名删)docker rmi 83958639975d(按 ID 删,可只写前 3 位) |
❗ 避坑:若镜像有运行中的容器,需先停容器(docker stop 容器ID)再删镜像 |
|
docker image prune |
清理无用镜像 |
docker image prune -a(删除所有无标签 / 未使用镜像)docker image prune -f(强制清理,不弹确认) |
1.-a:删除 “未被容器引用” 的镜像,谨慎使用2. 生产环境提议先docker images确认再清理 |
|
docker build -t [镜像名]:[版本] [Dockerfile路径] |
构建自定义镜像 |
docker build -t my-node-app:1.0 .(当前目录构建)docker build -t my-app:v2 -f ./docker/Dockerfile .(指定 Dockerfile 路径) |
1..代表 “构建上下文目录”,不能漏2. 提议用.dockerignore排除 node_modules 等无用文件,加快构建 |
小贴士:国内拉取镜像慢?配置阿里云镜像源:创建/etc/docker/daemon.json(Linux/macOS),添加:json
{ “registry-mirrors”: [“https://xxxx.mirror.aliyuncs.com”] }
(xxxx 需替换为自己阿里云账号的镜像加速器地址,登录阿里云容器服务可获取)重启服务:sudo systemctl restart docker
三、容器操作命令(使用频率最高)
容器是运行中的应用实例,命令覆盖 “启动→管理→销毁” 全生命周期:
|
命令格式 |
功能描述 |
实战示例 |
关键参数 / 避坑提示 |
|
docker run [参数] [镜像名] [容器内命令] |
创建并启动容器 |
1. 后台启动 Redis:docker run -d -p 6379:6379 –name myredis redis:7.02. 交互式启动 Ubuntu(用于测试):docker run -it –name myubuntu ubuntu:20.04 /bin/bash |
核心参数:–d:后台运行–it:交互式终端(用于进入容器)–p 宿主端口:容器端口:端口映射(必加,否则外部无法访问)—name:自定义容器名(避免随机名难管理) |
|
docker ps /docker container ls |
查看容器 |
docker ps(查看运行中容器)docker ps -a(查看所有容器,含停止的)docker ps -q(只输出运行中容器 ID,用于批量操作) |
输出字段:NAMES(容器名)、STATUS(状态,Up 为运行中)、PORTS(端口映射) |
|
docker stop [容器名/容器ID] |
停止容器 |
docker stop myredis(按名停)docker stop 3e8f(按 ID 停,前 3 位即可) |
停止后容器仍存在,可通过docker start重启 |
|
docker start [容器名/容器ID] |
重启已停止容器 |
docker start myredis(启动停止的 Redis 容器) |
启动后容器状态变为 Up,端口映射等配置不变 |
|
docker exec [参数] [容器名] [命令] |
进入运行中容器 |
1. 进入 Redis 容器终端:docker exec -it myredis /bin/bash2. 直接在容器内执行命令(无需进入):docker exec myredis redis-cli set key1 value1 |
❗ 避坑:必须用-it参数(交互式终端),否则进入后无法输入命令退出容器:按Ctrl+P+Q(不停止容器),或exit(若为-it启动的终端,会停止容器) |
|
docker rm [容器名/容器ID] |
删除容器 |
docker rm myubuntu(删除停止的容器)docker rm -f myredis(强制删除运行中的容器,谨慎用) |
批量删除停止容器:docker rm $(docker ps -aq)(-aq输出所有容器 ID) |
|
docker logs [参数] [容器名] |
查看容器日志 |
1. 实时查看日志:docker logs -f myredis2. 查看最近 100 行日志:docker logs –tail 100 myredis3. 查看指定时间后日志:docker logs –since “2024-05-01” myredis |
-f:实时跟踪日志(类似tail -f),排查问题常用 |
|
docker inspect [容器名/镜像名] |
查看详细信息 |
docker inspect myredis(查看容器 IP、挂载、配置等)docker inspect nginx:latest(查看镜像分层、环境变量等) |
输出为 JSON 格式,可配合grep过滤:docker inspect myredis |
四、数据卷操作命令(数据持久化必备)
数据卷用于解决 “容器删除后数据丢失” 问题,是生产环境必用功能:
|
命令格式 |
功能描述 |
实战示例 |
关键参数 / 避坑提示 |
|
docker volume create [卷名] |
创建数据卷 |
docker volume create mysql-data(创建名为 mysql-data 的卷) |
不指定卷名则自动生成随机名,提议自定义(易管理) |
|
docker volume ls |
查看所有数据卷 |
docker volume ls(显示卷名、驱动类型) |
驱动默认是local(本地卷),集群环境可用分布式驱动 |
|
docker volume inspect [卷名] |
查看卷详情 |
docker volume inspect mysql-data |
重点看Mountpoint字段(卷在宿主机的实际存储路径) |
|
docker volume rm [卷名] |
删除数据卷 |
docker volume rm mysql-data(删除指定卷)docker volume prune(清理无容器引用的卷) |
❗ 避坑:卷删除后数据永久丢失,生产环境需先备份 |
|
(通过docker run -v挂载) |
卷挂载到容器 |
启动 MySQL 并挂载卷:docker run -d -p 3306:3306 -v mysql-data:/var/lib/mysql –name mymysql mysql:8.0 |
-v 卷名:容器内路径:卷挂载格式区别 “绑定挂载”:-v /宿主机路径:容器内路径(开发环境用,生产环境推荐用卷) |
五、网络操作命令(容器通信必备)
Docker 网络用于实现容器间、容器与宿主机的通信,常用命令如下:
|
命令格式 |
功能描述 |
实战示例 |
关键参数 / 避坑提示 |
|
docker network create [网络名] |
创建自定义网络 |
docker network create my-network(创建桥接模式网络) |
默认是bridge模式(桥接网络),适合单机容器通信;集群用overlay模式 |
|
docker network ls |
查看所有网络 |
docker network ls(显示网络名、ID、驱动类型) |
默认网络:bridge(默认桥接)、host(共享宿主机网络)、none(无网络) |
|
docker network connect [网络名] [容器名] |
将容器加入网络 |
docker network connect my-network myredis(把 myredis 加入 my-network) |
同一网络内的容器可通过 “容器名” 相互访问(无需记 IP) |
|
docker network disconnect [网络名] [容器名] |
将容器移出网络 |
docker network disconnect my-network myredis |
移出后容器无法再通过该网络与其他容器通信 |
|
docker network rm [网络名] |
删除网络 |
docker network rm my-network(删除自定义网络)docker network prune(清理无容器引用的网络) |
❗ 避坑:正在使用的网络无法删除,需先断开所有容器 |
六、批量 / 运维命令(提高效率)
日常运维中,批量操作和状态查看命令能大幅节省时间:
|
命令格式 |
功能描述 |
实战示例 |
适用场景 |
|
docker system df |
查看 Docker 磁盘占用 |
docker system df(显示镜像、容器、卷的磁盘使用情况) |
磁盘满时排查,配合prune清理 |
|
docker system prune |
一键清理无用资源 |
docker system prune -a(清理无用镜像、容器、网络、卷)docker system prune -af(强制清理,不弹确认) |
测试环境定期清理,生产环境需谨慎(提议先手动确认) |
|
docker stats |
实时查看容器资源占用 |
docker stats(实时显示 CPU、内存、网络 IO 占用)docker stats –no-stream(只显示一次,非实时) |
排查容器内存泄漏、CPU 过高问题 |
|
docker pause [容器名] /docker unpause [容器名] |
暂停 / 恢复容器 |
docker pause myredis(暂停 Redis 容器)docker unpause myredis(恢复) |
暂停后容器进程冻结,资源不释放,适合临时维护 |
七、常用组合命令(直接套用)
整理实际工作中高频使用的命令组合,复制即可用:
- 部署 Nginx 并挂载配置和静态文件(生产环境常用):
bash
# 创建卷(存储配置和静态文件)
docker volume create nginx-conf
docker volume create nginx-html
# 启动Nginx,挂载卷+映射80端口
docker run -d -p 80:80
-v nginx-conf:/etc/nginx/conf.d
-v nginx-html:/usr/share/nginx/html
--name mynginx nginx:latest
- 批量重启所有运行中的容器:
bash
docker restart $(docker ps -q)
- 查看容器 IP(容器间通信用):
bash
# 方法1:inspect+grep
docker inspect myredis | grep IPAddress
# 方法2:直接过滤输出(更简洁)
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myredis
- 导出 / 导入镜像(离线环境用):
bash
# 导出镜像为tar包
docker save -o redis-7.0.tar redis:7.0
# 导入tar包为镜像
docker load -i redis-7.0.tar
八、避坑总结(新手必看)
- 端口冲突:启动容器报错port is already allocated✅ 解决:查占用端口的进程→停止或换端口
bash
# Linux/macOS查端口占用
netstat -tulpn | grep 6379(替换为冲突端口)
# Windows用
netstat -ano | findstr "6379"
- 数据卷挂载路径错误:容器启动后数据不持久化✅ 避坑:卷挂载格式是-v 卷名:容器内绝对路径,不能写相对路径(如./data是绑定挂载,不是卷)
- 容器内时间与宿主机不一致:日志时间错乱✅ 解决:启动时挂载宿主机时间文件:
bash
docker run -d -v /etc/localtime:/etc/localtime:ro --name myredis redis:7.0
- 权限问题:容器内无法读写挂载目录✅ 解决:启动时指定用户(以 root 为例,生产环境按需调整):
bash
docker run -d --user root -v nginx-html:/usr/share/nginx/html --name mynginx nginx:latest




看到阿里云加速就知道,多少年前的文章了,自从docker hub出现了某人ai合成镜像,内网环境一刀切,要么关闭加速服务,要么回退到几年前的历史节点。
收藏了,感谢分享