你有没有试过打开一个别人的项目,里头文件乱得像没收拾的厨房?锅碗瓢盆堆在洗水槽,调料瓶塞进冰箱门,想炒个青菜还得翻半天。镜像构建也一样,一个混乱的目录结构会让后续维护变得痛苦不堪。
为什么目录结构这么重要
就像做菜前要先把食材洗净切好、调料摆整齐,构建镜像前也得把文件归位。Docker 或其他容器工具在构建时会复制上下文目录里的内容,如果里面塞满了无关文件,不仅构建慢,还可能泄露敏感信息。
想象你在准备一锅炖汤,萝卜、排骨、姜片分开放,用的时候随手就能拿。同理,源码、配置文件、脚本各自放在专属目录里,构建过程才不会手忙脚乱。
一个典型的合理结构长什么样
来看看一个常见但高效的目录布局:
app/
<!-- 应用源码 -->
config/
docker-compose.yml
nginx.conf
scripts/
build.sh
deploy.sh
.dockerignore
Dockerfile
README.md
app/ 放核心代码,config/ 存配置,scripts/ 管流程。Dockerfile 明确告诉构建系统“从哪开始、怎么煮这锅饭”,而 .dockerignore 则像筛子,把不需要进镜像的临时文件过滤掉,比如 node_modules 或 .env。
Dockerfile 不该是孤岛
有人喜欢把 Dockerfile 扔在根目录最显眼的位置,可它其实应该和其他构建资源待在一起。如果你有多个服务,比如前端和后端,可以考虑:
services/
frontend/
Dockerfile
nginx.conf
backend/
Dockerfile
supervisord.conf
shared/
scripts/
libs/
这样结构清晰,改前端不会误动后端配置,就像煎鱼不用碰炒菜的铲子。
别忘了“清洁”习惯
做完饭要洗锅,构建完也得收尾。定期检查哪些文件被意外包含进镜像,可以用 docker image inspect 查看层信息。就像你发现冰箱里过期酱料还占着位置,及时清理才能保持效率。
良好的目录结构不是一次性任务,而是持续的习惯。每次加新功能时,顺手把文件放对地方,比事后大扫除轻松得多。