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
相关推荐
tellmewhoisi2 小时前
项目部署docker(指令解析和docker-compose基础指令)
docker·容器
dinl_vin3 小时前
FastAPI 系列 ·(十二):生产部署——Docker + 配置管理(系列完结)
docker·容器·fastapi
小新同学^O^3 小时前
简单学习 --> 模型参数
学习·llm·大模型参数
cdbqss13 小时前
VB2026 菜单生成基类 BqGetMenuStrip
数据库·经验分享·学习·oracle·vb
吃好睡好便好5 小时前
创建魔方矩阵和单位矩阵
开发语言·人工智能·学习·线性代数·matlab·矩阵
星夜夏空995 小时前
STM32单片机学习(21) —— I2C通信
stm32·单片机·学习
蠢货爱好者5 小时前
Docker基础操作
运维·docker·容器
山人在山上5 小时前
docker zlmediakit 部署
docker·zlmediakit
hopsky6 小时前
phoenix docker 启动
运维·docker·容器
searchforAI7 小时前
B站视频转笔记用哪个工具?2026年四款AI笔记工具对比实测
人工智能·经验分享·笔记·gpt·学习·视频总结·ai笔记