📋 摘要
  • 覆盖镜像、容器、清理、保存迁移、网络与数据卷六类高频命令,可当速查手册。
  • 清理优先用 docker system prune / docker container prune,比手工 grep 拼接更安全。
  • docker save/load 迁移镜像(保留层与历史),docker export/import 导出容器文件系统(更小更扁平)。
  • 调试三板斧:docker logs 看日志、docker exec 进容器、docker inspect 查元数据。

镜像操作

查看本机已有镜像(含大小):

Bash
docker images

从仓库拉取指定 tag 的镜像:

Bash
docker pull nginx:1.25

用当前目录的 Dockerfile 构建并打标签:

Bash
docker build -t my-app:1.0 .

给镜像重新打标签、推送到远程仓库:

Bash
docker tag my-app:1.0 tttxiaoz/my-app:1.0
docker push tttxiaoz/my-app:1.0

查询所有 <none> 悬空镜像的 ID:

Bash
docker images | grep none | awk '{print $3}'

删除未被引用的悬空镜像:

Bash
docker rmi $(docker images | grep "none" | awk '{print $3}')

容器操作

查看运行中的容器、以及全部(含已停止)容器:

Bash
docker ps
docker ps -a

以后台方式运行容器(-d 后台、--name 命名、-p 端口映射、-v 挂载卷):

Bash
docker run -d --name web -p 8080:80 -v /data:/usr/share/nginx/html nginx

启动 / 停止 / 重启容器:

Bash
docker start web
docker stop web
docker restart web

进入正在运行的容器内执行 shell(调试常用):

Bash
docker exec -it web /bin/bash

实时跟踪容器日志:

Bash
docker logs -f web

查看容器详细元数据(挂载、网络、环境变量等):

Bash
docker inspect web

在宿主机与容器之间复制文件:

Bash
docker cp web:/etc/nginx/nginx.conf ./nginx.conf   # 容器 → 宿主机
docker cp ./index.html web:/usr/share/nginx/html/  # 宿主机 → 容器

删除容器(运行中的需先 stop 或加 -f 强制):

Bash
docker rm web

清理

删除所有已停止的容器:

Bash
docker rm `docker ps -qf status=exited`

现代写法(效果等价,更推荐):

Bash
docker container prune

删除悬空镜像(<none>):

Bash
docker image prune

删除未使用的数据卷 / 网络:

Bash
docker volume prune
docker network prune

一键清理所有未被任何容器引用的资源(加 -a 会连未使用镜像一起删,慎用):

Bash
docker system prune       # 删已停止容器/网络/悬空镜像/构建缓存
docker system prune -a    # 额外删除所有未被容器引用的镜像
docker system df          # 查看 Docker 磁盘占用(只读、安全)

保存与迁移

把镜像保存为文件(保留镜像层与历史,适合离线迁移):

Bash
docker save -o my-app.tar my-app:1.0
docker save my-app:1.0 | gzip > my-app.tar.gz   # 顺带压缩

从文件加载镜像:

Bash
docker load -i my-app.tar
gunzip -c my-app.tar.gz | docker load           # 从压缩包加载

导出「容器」的文件系统为 tar(比 save 更小更扁平,但丢失层历史与元数据):

Bash
docker export <容器ID> > container.tar
docker import container.tar my-app:flat          # 导入为新镜像
💡 提示

save/load 面向镜像export/import 面向容器文件系统:前者保留 tag、层结构与元数据,适合迁移;后者产物体积更小,适合做最小化基础镜像。

网络与数据卷

查看 / 创建自定义网络(自定义网络支持容器间用名字互访):

Bash
docker network ls
docker network create my-net
docker network connect my-net web              # 把容器接入网络

查看 / 创建数据卷(命名卷可跨容器复用与持久化):

Bash
docker volume ls
docker volume create my-data
docker run -d -v my-data:/data --name db postgres   # 挂载命名卷

相关链接

  • 使用docker部署一个nginx服务