Docker常用命令大全:从基础到运维,覆盖90%使用场景

内容分享2个月前发布
0 2 0

一、前言:命令学习技巧

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(恢复)

暂停后容器进程冻结,资源不释放,适合临时维护

七、常用组合命令(直接套用)

整理实际工作中高频使用的命令组合,复制即可用:

  1. 部署 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
  1. 批量重启所有运行中的容器

bash

docker restart $(docker ps -q)
  1. 查看容器 IP(容器间通信用)

bash

# 方法1:inspect+grep
docker inspect myredis | grep IPAddress

# 方法2:直接过滤输出(更简洁)
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myredis
  1. 导出 / 导入镜像(离线环境用)

bash

# 导出镜像为tardocker save -o redis-7.0.tar redis:7.0

# 导入tar包为镜像
docker load -i redis-7.0.tar

八、避坑总结(新手必看)

  1. 端口冲突:启动容器报错port is already allocated✅ 解决:查占用端口的进程→停止或换端口

bash

# Linux/macOS查端口占用
netstat -tulpn | grep 6379(替换为冲突端口)

# Windows用
netstat -ano | findstr "6379"
  1. 数据卷挂载路径错误:容器启动后数据不持久化✅ 避坑:卷挂载格式是-v 卷名:容器内绝对路径,不能写相对路径(如./data是绑定挂载,不是卷)
  2. 容器内时间与宿主机不一致:日志时间错乱✅ 解决:启动时挂载宿主机时间文件:

bash

docker run -d -v /etc/localtime:/etc/localtime:ro --name myredis redis:7.0
  1. 权限问题:容器内无法读写挂载目录✅ 解决:启动时指定用户(以 root 为例,生产环境按需调整):

bash

docker run -d --user root -v nginx-html:/usr/share/nginx/html --name mynginx nginx:latest
© 版权声明

相关文章

2 条评论

  • 头像
    Tvioyu_ 投稿者

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

    无记录
    回复
  • 头像
    喜欢作文的小作者 读者

    收藏了,感谢分享

    无记录
    回复