
Docker 资源清理完全指南Data Engineering Zoomcamp 环境卸载与磁盘空间释放实战【免费下载链接】data-engineering-zoomcampData Engineering Zoomcamp is a free 9-week course on building production-ready data pipelines. Join the course here 项目地址: https://gitcode.com/GitHub_Trending/da/data-engineering-zoomcamp本文面向 Data Engineering Zoomcamp 模块一Docker 与 PostgreSQL 实战工作坊的完成阶段系统讲解如何在实验结束后彻底清理 Docker 容器、镜像、数据卷、网络以及本地缓存文件安全释放磁盘空间。读完本文你将掌握docker-compose down、docker rm、docker rmi、docker volume prune、docker system prune -a --volumes等命令的精确语义与适用场景能够区分优雅停止与彻底销毁并为下一次实验留下干净、无残留的环境。为什么需要清理工作坊结束时留下的资源清单在完成 Docker and PostgreSQL: Data Engineering Workshop 的完整流程后你的机器上通常会残留以下几类 Docker 资源资源类型典型实例本工作坊占用特征容器Containerspgdatabase、pgadmin及一次性的 ingest 容器停止后仍占用磁盘可写层与docker ps -a列表镜像Imagespostgres:18、dpage/pgadmin4、taxi_ingest:v001最大的磁盘占用来源数据卷Volumesny_taxi_postgres_data、pgadmin_data保存 Postgres 数据与 pgAdmin 配置容器删除后数据仍保留网络Networkspg-network、pipeline_defaultdocker compose 自动创建每个网络占用少量资源本地文件*.parquet、__pycache__、.pytest_cache、.venv工作目录中的缓存与虚拟环境其中数据卷是最容易被忽视的部分如 04-postgres-docker.md 所述-v ny_taxi_postgres_data:/var/lib/postgresql创建的是命名卷named volumeDocker 负责管理其生命周期数据在容器被移除后依然持久化——这正是清理时需要显式删除卷的原因。同理pgAdmin 的配置卷pgadmin_data映射到/var/lib/pgadmin保存服务器连接与偏好设置也不会随容器停止而自动消失。提示本文所有命令面向 Linux/macOS 的 bash 环境。Windows 用户可参考工作坊的 windows.mdPowerShell 下命令语法略有差异但清理思路一致。第一步优雅停止所有服务docker-compose down工作坊在第 9 节使用 docker-compose.yaml 将 Postgres 与 pgAdmin 编排为两个服务services: pgdatabase: image: postgres:18 environment: POSTGRES_USER: root POSTGRES_PASSWORD: root POSTGRES_DB: ny_taxi volumes: - ny_taxi_postgres_data:/var/lib/postgresql ports: - 5432:5432 pgadmin: image: dpage/pgadmin4 environment: PGADMIN_DEFAULT_EMAIL: adminadmin.com PGADMIN_DEFAULT_PASSWORD: root volumes: - pgadmin_data:/var/lib/pgadmin ports: - 8085:80 volumes: ny_taxi_postgres_data: pgadmin_data:与此对应的停止命令是docker-compose down执行该命令前请先确认当前工作目录中存在docker-compose.yaml即 pipeline 目录。down的行为停止并移除由 compose 启动的所有容器pgdatabase、pgadmin移除compose 自动创建的默认网络目录名pipeline会生成名为pipeline_default的网络保留docker-compose.yaml中声明的命名卷与已拉取的镜像。如果运行的是前台模式docker-compose up也可以先按CtrlC停止但官方推荐始终用down做正规关闭见 09-docker-compose.md。变体同时删除数据卷down -vdocker-compose down -v-v会连带删除 compose 声明的所有卷。如果你的目标是连数据库数据一起清掉例如重新从零开始跑一遍 ingest这是最彻底的单命令方案但如果只想停服务、保留数据不要加-v。第二步清理残留容器docker ps / docker rm / prune若此前曾用docker run单独启动过容器而非 compose 编排它们不会随docker-compose down消失需要手动处理。查看所有容器# 列出所有容器含已停止的 docker ps -a只加-a才会显示已停止的容器不加时仅显示运行中的容器。输出中每一行的第一列是CONTAINER ID。删除指定容器docker rm container_iddocker rm默认只能删除已停止的容器若容器仍在运行会报错。工作坊中的 ingest 容器通常以docker run -it --rm ...启动见 docker-ingest.sh--rm标记会在容器退出时自动删除自身因此正常情况下无需手动清理而pgdatabase、pgadmin如果是以--name方式启动的见 07-pgadmin.md则需显式删除docker rm pgdatabase pgadmin批量清理所有已停止容器docker container prune该命令删除所有处于exited状态的容器会先要求输入y确认。如果想跳过确认可加-f参数。第三步清理 Docker 镜像docker images / rmi / prune镜像层是磁盘占用的大户。工作坊期间拉取的postgres:18、dpage/pgadmin4以及自建的taxi_ingest:v001都属于清理对象。查看镜像列表docker images删除指定镜像docker rmi taxi_ingest:v001注意两点若该镜像仍被某个容器引用哪怕是已停止的容器删除会失败需先删除对应容器删除镜像只会移除镜像本身不会影响运行中容器正在运行的容器会继续使用其镜像层直至容器被删除。清理所有未被使用的镜像docker image prune -a-aall表示删除所有没有被任何容器引用的镜像而不仅仅是悬空dangling即none标签镜像。删除后如需重跑工作坊只需重新docker pull或按 08-dockerizing-ingestion.md 重新构建cd pipeline docker build -t taxi_ingest:v001 .第四步清理数据卷docker volume ls / rm / prune数据卷用于持久化 Postgres 数据ny_taxi_postgres_data与 pgAdmin 配置pgadmin_data。容器和镜像删除后这些卷依然存在是残留磁盘空间的主要来源之一。# 列出所有卷 docker volume ls # 删除指定的卷 docker volume rm ny_taxi_postgres_data docker volume rm pgadmin_data # 清理所有未被容器使用的卷 docker volume prune几个关键语义docker volume rm只能删除未被任何容器使用的卷否则会报错数据一旦删除不可恢复删除前请确认ny_taxi数据库中的数据yellow taxi 表已不再需要若卷仍被已停止的容器占用可先用docker container prune清掉容器再删卷docker volume prune只清理未被引用的卷正在使用的卷不会被误删。如果你在 04-postgres-docker.md 中选择了**绑定挂载bind mount**方案如-v $(pwd)/ny_taxi_postgres_data:/var/lib/postgresql则不存在 Docker 卷数据存放在宿主机目录中需要手动删除该目录见下文清理本地文件。第五步清理 Docker 网络docker network ls / rm / prune工作坊中为了打通 Postgres 与 pgAdmin 的通信手动创建过pg-network使用 docker compose 时则会自动生成pipeline_default等网络。这些网络在相关容器删除后通常会被自动回收但手动创建的pg-network需要显式删除# 列出所有网络 docker network ls # 删除指定的网络 docker network rm pg-network # 清理所有未被容器使用的网络 docker network prunedocker network rm仅能删除无容器连接的网络且用户自定义网络如pg-network不能是bridge、host、none等默认网络。默认网络无需也无法删除。第六步一键彻底清理docker system prune谨慎使用如果希望一次性清空机器上的 Docker 资源可使用docker system prune# ⚠️ 警告这会删除所有未使用的 Docker 资源 docker system prune -a --volumes参数含义拆解参数作用system prune清理容器、网络、悬空镜像与构建缓存-a扩展到所有未被引用的镜像而非仅悬空镜像--volumes额外删除所有未被使用的数据卷执行前请确认这是全局清理不只针对本工作坊——机器上其他项目的容器、镜像、卷也会一并删除数据卷删除不可逆ny_taxi_postgres_data中的数据库内容将永久丢失建议先执行docker ps -a、docker volume ls、docker image ls评估影响范围。如果想保留镜像但清理构建缓存可以单独执行docker builder prune第七步清理工作目录中的本地文件Docker 层面的清理完成后还需要处理工作坊在工作目录中遗留的文件。以 pipeline 目录 为例# 删除下载的 parquet 数据文件 rm *.parquet # 删除 Python 缓存目录__pycache__ 与 pytest 缓存 rm -rf __pycache__ .pytest_cache # 删除虚拟环境如果使用的是 venv rm -rf .venv需要说明的几点工作坊全程使用uv管理 Python 环境见 02-virtual-environment.md依赖声明在 pyproject.toml 与uv.lock中.venv删除后随时可通过uv sync重建不会丢失依赖定义若使用绑定挂载方式运行 Postgres还需删除挂载目录如ny_taxi_postgres_data/目录本身rm -rf是危险命令请务必确认路径无误再执行。按照本仓库的工作方式清理是针对本地运行环境的操作仓库中的源代码、配置文件Dockerfile、docker-compose.yaml、ingest_data.py均不需要也不应删除——下次实验可直接复用 pipeline 目录 中的现成配置重新构建环境。清理策略速查表目标命令影响范围停止 compose 服务docker-compose down删除容器与默认网络保留卷与镜像停止并删除 compose 数据docker-compose down -v额外删除声明卷数据库数据丢失删除单个容器docker rm container_id仅该容器删除全部停止容器docker container prune所有 exited 容器删除单个镜像docker rmi taxi_ingest:v001仅该镜像删除全部未用镜像docker image prune -a所有未被容器引用的镜像删除指定卷docker volume rm ny_taxi_postgres_data仅该卷数据不可恢复删除全部未用卷docker volume prune所有未被引用的卷删除指定网络docker network rm pg-network仅该网络全局彻底清理docker system prune -a --volumes所有未使用的容器、网络、镜像、卷与构建缓存推荐的安全清理流程综合本工作坊的完整链路Postgres pgAdmin ingest 脚本 本地数据推荐按以下顺序分步执行每步都可通过docker ps -a、docker images、docker volume ls、docker network ls验证效果停止服务docker-compose down保留数据方便后续继续实验确认无残留容器docker ps -a如有则docker rm或docker container prune删除镜像docker rmi taxi_ingest:v001必要时docker image prune -a删除数据卷确认ny_taxi数据无用后docker volume rm ny_taxi_postgres_data pgadmin_data删除自定义网络docker network rm pg-network清理本地文件删除 parquet、__pycache__、.pytest_cache、.venv最终核验docker ps -a、docker images、docker volume ls、docker network ls均应接近空状态。如需彻底释放所有磁盘空间且确认机器上没有其他 Docker 项目可跳过第 25 步直接执行docker system prune -a --volumes但务必先评估全局影响。至此本工作坊的 Docker 与 PostgreSQL 实战环境即被完整、安全地卸载磁盘空间得到释放同时保留了可复用的 pipeline 配置随时可以基于同一套 Dockerfile 与 docker-compose.yaml 重新构建实验环境。【免费下载链接】data-engineering-zoomcampData Engineering Zoomcamp is a free 9-week course on building production-ready data pipelines. Join the course here 项目地址: https://gitcode.com/GitHub_Trending/da/data-engineering-zoomcamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考