Dockerfile 多阶段构建中,如何指定一个真实的挂载路径?

docker 难道只能在运行时挂载一个目录?因为我使用多阶段构建(参考
http://ju.outofmemory.cn/entr...), 每次构建的第一个阶段都需要重新下载一遍依赖。

我觉得可以把母机上的一个路径挂载到第一个阶段里保存依赖的第三方库,下次构建或者别的项目构建就会快很多了。

能不能办到?

阅读 3.6k
1 个回答

大概说一下,拿我稍微熟悉的Node.js来举例,你可能是不想在容器里创建node_modules这个依赖包文件夹,而是把宿主机的某个目录给挂载过去是吧?但是在构建的过程中,你需要下载依赖不止一次?或者是有多个依赖包文件夹?
我没实验过,不过我猜想哪怕你有多个安装包文件夹,容器运行时可以一个个分别挂载,那么这么做应该是可以的:

docker run -d -v /dir1:/dir1 -v /dir2:/dir2 image:version

不过理论上来说这么做不太好,毕竟镜像的依赖包跟运行环境牵扯太大,我是这么弄Dockerfile的:

COPY ./package.json /app
CMD npm install
COPY ./ /app
RUN npm start

我先把依赖配置文件拷贝进镜像里,然后安装依赖包,再拷贝项目。
这样之后只要依赖包配置文件不变化,那么在安装依赖包这一步的镜像层可以反复利用,构建速度会有很大提升。

希望能帮助到你。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进