Docker 学习篇(五)| Docker 常用命令
- 镜像管理
- 容器管理
- 日志与排查
- 文件操作
- 网络
- Docker Compose
- 清理
- 容器卡死抢救
- 镜像文件导入导出(tar.gz 处理)
镜像管理
dockerimages# 查看所有镜像dockerimages-q# 只显示镜像 IDdockerpull 镜像名:版本# 拉取镜像(不写版本默认 latest)dockerpull mysql:8.0# 示例dockerrmi 镜像名:版本# 删除镜像dockerrmi-f$(dockerimages-q)# 清空所有本地镜像(谨慎!)dockertag 镜像ID 新名称:新标签# 重命名/打标签dockerload-i文件.tar# 从 tar 文件导入镜像dockersave-o文件.tar 镜像名# 导出镜像为 tar 文件dockerbuild-t镜像名:标签.# 从 Dockerfile 构建镜像dockerbuild --no-cache-t镜像名:标签.# 强制全量重建(不用缓存)容器管理
# 启动dockerrun-d--name容器名-p宿主机端口:容器端口 镜像名:版本dockerrun-d--nameblog-mysql-p3307:3306\-eMYSQL_ROOT_PASSWORD=root\-vD:/data/mysql:/var/lib/mysql\--restartunless-stopped\mysql:8.0# 完整示例# 查看dockerps# 运行中的容器dockerps-a# 所有容器(含已停止)dockerps-q# 只显示运行中容器的 ID# 生命周期dockerstart 容器名# 启动已存在的容器dockerstop 容器名# 停止dockerrestart 容器名# 重启dockerrm容器名# 删除(必须先 stop)dockerrm-f容器名# 强制删除(不用先 stop)dockerrm-f$(dockerps-aq)# 删除所有容器(谨慎!)# 资源监控dockerstats# 实时查看所有容器 CPU/内存/网络(Ctrl+C 退出)dockerstats 容器名# 只看指定容器# 自启策略dockerrun--restartalways...# 启动时设自启dockerupdate--restartalways 容器名# 改已有容器的自启策略dockerupdate--restartno$(dockerps-q)# 取消所有容器自启日志与排查
dockerlogs 容器名# 查看日志dockerlogs-f容器名# 实时跟踪(Ctrl+C 退出)dockerlogs--tail50容器名# 只看最近 50 行dockerlogs-tf容器名# 带时间戳实时跟踪dockerlogs-f--tail100容器名# 最后 100 行开始实时跟踪dockerexec-it容器名bash# 进入容器(alpine 镜像用 sh)dockerexec-it容器名sh# alpine 系镜像用这个dockertop容器名# 查看容器内进程dockerinspect 容器名# 查看容器完整配置(JSON)dockerinspect-f'{{.State.Pid}}'容器名# 只看 PID文件操作
# 宿主机 → 容器dockercp宿主机路径 容器名:容器路径dockercpapp.jar blog-server:/app/app.jar# 容器 → 宿主机dockercp容器名:容器路径 宿主机路径dockercpblog-server:/app/logs ./logs# 容器内目录参考# 后端应用:取决于 Dockerfile 的 WORKDIR,常见 /app 或 /# 前端静态文件:/usr/share/nginx/html(Nginx 默认)# 不确定的话先 docker exec -it 进去看一下网络
dockernetworkls# 查看所有网络dockernetwork create 网络名# 创建自定义网络dockernetwork inspect 网络名# 查看网络详情(含容器列表和 IP)dockernetworkrm网络名# 删除网络dockerrun--network网络名...# 指定容器加入某网络# compose 自动建网络:默认 <项目名>_default;自定义网络(如 blog-net)→ <项目名>_blog-net# 同一网络内,service 名 = DNS 域名,容器间直接用服务名互访Docker Compose
dockercompose up-d# 启动所有服务dockercompose down# 停止并删除容器+网络(加 -v 同时删数据卷)dockercompose stop# 只停止,不删除dockercompose restart# 重启所有服务dockercompose restart 服务名# 重启单个服务dockercomposeps# 看当前项目容器状态dockercompose logs-f# 所有容器日志dockercompose logs-f服务名# 只看某个服务日志dockercomposeexec服务名bash# 进入 compose 管理的容器(alpine 用 sh)dockercompose build# 构建/重新构建所有服务的镜像dockercompose build 服务名# 只构建指定服务dockercompose up-d--build# 重建镜像再启动dockercompose up-d--force-recreate--build# 强制重建所有容器dockercompose-f指定文件.yml up-d# 用指定 yml 文件启动dockercompose pull# 拉取 compose 中所有镜像(不启动)dockercompose config# 校验 yml 文件语法是否正确改 yml 配置后重跑
up -d,没变的服务不动,变了的自动重建。改源码则需要加--build重新构建镜像。
清理
dockersystemdf# 查看 Docker 占用磁盘空间dockersystem prune# 清理停止的容器、未用网络、悬空镜像dockersystem prune-a# 加上所有未用镜像一起清dockervolume prune# 清理未挂载的数据卷dockerbuilder prune# 清理构建缓存先
docker system df看一下占用,再决定清什么。每月跑一次prune,磁盘告急跑-a。
容器卡死抢救
docker stop/docker kill都不响应时:
# 1. 获取容器主进程 PID(两行在同一 shell 会话执行)PID=$(dockerinspect-f'{{.State.Pid}}'容器名或ID)kill$PID# 如果 kill 不响应,升级为强杀:kill -9 $PID# 2. 确认已停止dockerps-a# 3. 清理并重建dockerrm-f容器名dockercompose up-d镜像文件导入导出(tar.gz 处理)
# 导出dockersave-o镜像.tar 镜像名:标签# 导入dockerload-i镜像.tar# 如果是 .tar.gz 格式gunzip-c镜像.tar.gz|dockerload# 管道方式(最可靠)dockerload-i镜像.tar.gz# 部分新版 Docker 支持直接导入 gz# 判断文件真实类型file镜像.tar.gz# 输出 "POSIX tar archive" → 实际是 .tar(被人改了后缀)# 输出 "gzip compressed data" → 真正的 .tar.gz