Docker 学习篇(五)| Docker 常用命令

Docker 学习篇(五)| Docker 常用命令

镜像管理

bash 复制代码
docker images                        # 查看所有镜像
docker images -q                     # 只显示镜像 ID
docker pull 镜像名:版本               # 拉取镜像(不写版本默认 latest)
docker pull mysql:8.0                # 示例
docker rmi 镜像名:版本                # 删除镜像
docker rmi -f $(docker images -q)    # 清空所有本地镜像(谨慎!)
docker tag 镜像ID 新名称:新标签        # 重命名/打标签
docker load -i 文件.tar               # 从 tar 文件导入镜像
docker save -o 文件.tar 镜像名        # 导出镜像为 tar 文件
docker build -t 镜像名:标签 .          # 从 Dockerfile 构建镜像
docker build --no-cache -t 镜像名:标签 .  # 强制全量重建(不用缓存)

容器管理

bash 复制代码
# 启动
docker run -d --name 容器名 -p 宿主机端口:容器端口 镜像名:版本
docker run -d --name blog-mysql -p 3307:3306 \
  -e MYSQL_ROOT_PASSWORD=root \
  -v D:/data/mysql:/var/lib/mysql \
  --restart unless-stopped \
  mysql:8.0                        # 完整示例

# 查看
docker ps                           # 运行中的容器
docker ps -a                        # 所有容器(含已停止)
docker ps -q                        # 只显示运行中容器的 ID

# 生命周期
docker start 容器名                  # 启动已存在的容器
docker stop 容器名                   # 停止
docker restart 容器名                # 重启
docker rm 容器名                     # 删除(必须先 stop)
docker rm -f 容器名                  # 强制删除(不用先 stop)
docker rm -f $(docker ps -aq)       # 删除所有容器(谨慎!)

# 资源监控
docker stats                          # 实时查看所有容器 CPU/内存/网络(Ctrl+C 退出)
docker stats 容器名                    # 只看指定容器

# 自启策略
docker run --restart always ...           # 启动时设自启
docker update --restart always 容器名      # 改已有容器的自启策略
docker update --restart no $(docker ps -q) # 取消所有容器自启

日志与排查

bash 复制代码
docker logs 容器名                   # 查看日志
docker logs -f 容器名                # 实时跟踪(Ctrl+C 退出)
docker logs --tail 50 容器名         # 只看最近 50 行
docker logs -tf 容器名               # 带时间戳实时跟踪
docker logs -f --tail 100 容器名     # 最后 100 行开始实时跟踪
docker exec -it 容器名 bash          # 进入容器(alpine 镜像用 sh)
docker exec -it 容器名 sh            # alpine 系镜像用这个
docker top 容器名                    # 查看容器内进程
docker inspect 容器名                # 查看容器完整配置(JSON)
docker inspect -f '{{.State.Pid}}' 容器名  # 只看 PID

文件操作

bash 复制代码
# 宿主机 → 容器
docker cp 宿主机路径 容器名:容器路径
docker cp app.jar blog-server:/app/app.jar

# 容器 → 宿主机
docker cp 容器名:容器路径 宿主机路径
docker cp blog-server:/app/logs ./logs

# 容器内目录参考
# 后端应用:取决于 Dockerfile 的 WORKDIR,常见 /app 或 /
# 前端静态文件:/usr/share/nginx/html(Nginx 默认)
# 不确定的话先 docker exec -it 进去看一下

网络

bash 复制代码
docker network ls                    # 查看所有网络
docker network create 网络名          # 创建自定义网络
docker network inspect 网络名         # 查看网络详情(含容器列表和 IP)
docker network rm 网络名              # 删除网络
docker run --network 网络名 ...       # 指定容器加入某网络

# compose 自动建网络:默认 <项目名>_default;自定义网络(如 blog-net)→ <项目名>_blog-net
# 同一网络内,service 名 = DNS 域名,容器间直接用服务名互访

Docker Compose

bash 复制代码
docker compose up -d                  # 启动所有服务
docker compose down                   # 停止并删除容器+网络(加 -v 同时删数据卷)
docker compose stop                   # 只停止,不删除
docker compose restart                # 重启所有服务
docker compose restart 服务名          # 重启单个服务
docker compose ps                     # 看当前项目容器状态
docker compose logs -f                # 所有容器日志
docker compose logs -f 服务名          # 只看某个服务日志
docker compose exec 服务名 bash        # 进入 compose 管理的容器(alpine 用 sh)
docker compose build                  # 构建/重新构建所有服务的镜像
docker compose build 服务名            # 只构建指定服务
docker compose up -d --build          # 重建镜像再启动
docker compose up -d --force-recreate --build  # 强制重建所有容器
docker compose -f 指定文件.yml up -d   # 用指定 yml 文件启动
docker compose pull                   # 拉取 compose 中所有镜像(不启动)
docker compose config                 # 校验 yml 文件语法是否正确

改 yml 配置后重跑 up -d,没变的服务不动,变了的自动重建。改源码则需要加 --build 重新构建镜像。


清理

bash 复制代码
docker system df                 # 查看 Docker 占用磁盘空间
docker system prune             # 清理停止的容器、未用网络、悬空镜像
docker system prune -a          # 加上所有未用镜像一起清
docker volume prune             # 清理未挂载的数据卷
docker builder prune            # 清理构建缓存

先 docker system df 看一下占用,再决定清什么。每月跑一次 prune,磁盘告急跑 -a。


容器卡死抢救

docker stop / docker kill 都不响应时:

bash 复制代码
# 1. 获取容器主进程 PID(两行在同一 shell 会话执行)
PID=$(docker inspect -f '{{.State.Pid}}' 容器名或ID)
kill $PID
# 如果 kill 不响应,升级为强杀:kill -9 $PID

# 2. 确认已停止
docker ps -a

# 3. 清理并重建
docker rm -f 容器名
docker compose up -d

镜像文件导入导出(tar.gz 处理)

bash 复制代码
# 导出
docker save -o 镜像.tar 镜像名:标签

# 导入
docker load -i 镜像.tar

# 如果是 .tar.gz 格式
gunzip -c 镜像.tar.gz | docker load      # 管道方式(最可靠)
docker load -i 镜像.tar.gz               # 部分新版 Docker 支持直接导入 gz

# 判断文件真实类型
file 镜像.tar.gz
# 输出 "POSIX tar archive"     → 实际是 .tar(被人改了后缀)
# 输出 "gzip compressed data"  → 真正的 .tar.gz
相关推荐
撩得Android一次心动9 小时前
Jetpack Compose 知识点整理2【个人用】
android·笔记·学习·kotlin·compose
dadaobusi10 小时前
学习:灵犀指令集
学习
码间留白10 小时前
手把手把 GitHub 推上阿里云 ECS:Actions CI/CD 全链路避坑实录(折腾好几天,到 2 分钟见绿)
运维·阿里云·ci/cd·docker·devops·github actions
Vex2une11 小时前
Docker Desktop WSL2后端:2026年性能调优与避坑实战指南
windows·docker·desktop·gpu容器·容器开发·virtiofs·buildkit
xhyu6111 小时前
【学习笔记】图像质量评估方法 (5.生成图像是否符合用户要求)
笔记·学习·计算机视觉
程序员老赵12 小时前
Docker 部署青龙面板:轻松搭建定时任务管理平台
前端·docker·开源
TTATTC12 小时前
为什么单会话聊天做不好复杂工程?Claude Code 创作者的并发 Worktree 与记忆闭环实践
docker·开源
TTATTC12 小时前
状态机驱动长事务,还是 DAG 编排高并发?高可靠业务流程引擎的双核架构设计
docker·开源
殷忆枫12 小时前
告别依赖地狱!在 Ubuntu 上用 Docker 极速部署 Home Assistant 与 MQTT,并接入 Siri 与嵌入式 C 终端
linux·ubuntu·docker
卿卿的产品经理日记13 小时前
【AI产品经理实战】Day 38|try-except 踩坑实录:报错是数据
人工智能·笔记·python·学习·产品经理