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
相关推荐
YJlio3 小时前
8.2Windows 11 如何用 Xbox Game Bar 实时监测电脑性能?CPU、内存、GPU、显存与 FPS 瓶颈判断教程
windows·笔记·学习·chatgpt·架构·电脑·xbox
say_fall3 小时前
装软件慢到崩溃?用户创建总出错?Linux 工具避坑指南
linux·运维·服务器·c++·学习
Komorebi_99993 小时前
大模型学习day6
学习·大模型
梵得儿SHI3 小时前
(第三篇)Spring AI 架构设计与优化:容器化与云原生部署,基于 K8s 的 AI 应用全生命周期管理
java·ci/cd·docker·云原生·kubernetes·容器化·spring ai
-To be number.wan3 小时前
操作系统 | 进程调度机制全解析
学习·操作系统
m0_737539373 小时前
基于LNMP的综合实验
容器·kubernetes
talen_hx2964 小时前
OkHttpClient的最佳实践优化方案
java·笔记·学习
Byron__4 小时前
AI学习_05_LangChain使用
学习·langchain
三品吉他手会点灯4 小时前
C语言学习笔记 - 26.C编程预备计算机专业知识 - 15~25关键内容回顾
c语言·笔记·学习