📋 摘要
- 覆盖镜像、容器、清理、保存迁移、网络与数据卷六类高频命令,可当速查手册。
- 清理优先用
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服务