Docker 学习篇(五)| Docker 常用命令
Docker 学习篇五| Docker 常用命令镜像管理容器管理日志与排查文件操作网络Docker Compose清理容器卡死抢救镜像文件导入导出tar.gz 处理镜像管理dockerimages# 查看所有镜像dockerimages-q# 只显示镜像 IDdockerpull 镜像名:版本# 拉取镜像不写版本默认 latestdockerpull 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_PASSWORDroot\-vD:/data/mysql:/var/lib/mysql\--restartunless-stopped\mysql:8.0# 完整示例# 查看dockerps# 运行中的容器dockerps-a# 所有容器含已停止dockerps-q# 只显示运行中容器的 ID# 生命周期dockerstart 容器名# 启动已存在的容器dockerstop 容器名# 停止dockerrestart 容器名# 重启dockerrm容器名# 删除必须先 stopdockerrm-f容器名# 强制删除不用先 stopdockerrm-f$(dockerps-aq)# 删除所有容器谨慎# 资源监控dockerstats# 实时查看所有容器 CPU/内存/网络CtrlC 退出dockerstats 容器名# 只看指定容器# 自启策略dockerrun--restartalways...# 启动时设自启dockerupdate--restartalways 容器名# 改已有容器的自启策略dockerupdate--restartno$(dockerps-q)# 取消所有容器自启日志与排查dockerlogs 容器名# 查看日志dockerlogs-f容器名# 实时跟踪CtrlC 退出dockerlogs--tail50容器名# 只看最近 50 行dockerlogs-tf容器名# 带时间戳实时跟踪dockerlogs-f--tail100容器名# 最后 100 行开始实时跟踪dockerexec-it容器名bash# 进入容器alpine 镜像用 shdockerexec-it容器名sh# alpine 系镜像用这个dockertop容器名# 查看容器内进程dockerinspect 容器名# 查看容器完整配置JSONdockerinspect-f{{.State.Pid}}容器名# 只看 PID文件操作# 宿主机 → 容器dockercp宿主机路径 容器名:容器路径dockercpapp.jar blog-server:/app/app.jar# 容器 → 宿主机dockercp容器名:容器路径 宿主机路径dockercpblog-server:/app/logs ./logs# 容器内目录参考# 后端应用取决于 Dockerfile 的 WORKDIR常见 /app 或 /# 前端静态文件/usr/share/nginx/htmlNginx 默认# 不确定的话先 docker exec -it 进去看一下网络dockernetworkls# 查看所有网络dockernetwork create 网络名# 创建自定义网络dockernetwork inspect 网络名# 查看网络详情含容器列表和 IPdockernetworkrm网络名# 删除网络dockerrun--network网络名...# 指定容器加入某网络# compose 自动建网络默认 项目名_default自定义网络如 blog-net→ 项目名_blog-net# 同一网络内service 名 DNS 域名容器间直接用服务名互访Docker Composedockercompose up-d# 启动所有服务dockercompose down# 停止并删除容器网络加 -v 同时删数据卷dockercompose stop# 只停止不删除dockercompose restart# 重启所有服务dockercompose restart 服务名# 重启单个服务dockercomposeps# 看当前项目容器状态dockercompose logs-f# 所有容器日志dockercompose logs-f服务名# 只看某个服务日志dockercomposeexec服务名bash# 进入 compose 管理的容器alpine 用 shdockercompose 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