如何减少docker镜像安装依赖项所需的时间?

时间:2014-08-19 06:53:14

标签: deployment build dependencies docker

我有一些节点docker-containers,基本上看起来像:

# core nodejs just installs node and git on archlinux
FROM core/nodejs

# clones directory into current working dir
RUN git clone https://github.com/bodokaiser/nearby .

# installs all dependencies
RUN npm install

# lets node execute the source code
CMD ["node", "index.js"]

当我现在重建图像以便收集新的更新时,它会从npm下载所有依赖项。这总是需要大约5分钟。

我现在想知道如何避免重新安装所有依赖项。

我到目前为止的一个想法是使用VOLUME,然后与主机共享代码存储库,这将使其难以在其他主机上使用该图像。

更新 我的另一个想法是创建一个包含git repo的卷容器,它与运行时容器共享。但是,repo容器必须能够以某种方式重建另一个容器吗?

1 个答案:

答案 0 :(得分:4)

听起来就像你拥有构建依赖项的基础映像和扩展它的本地映像以便你可以构建/运行快。

类似的东西:

<强>碱/ Dockerfile

#core nodejs just installs node and git on archlinux
FROM core/nodejs

# installs all dependencies
RUN npm install

然后你可以做:

cd base
docker build -t your-image-name-base:your-tag .

本地/ Dockerfile

FROM your-image-name-base:your-tag

# clones directory into current working dir
RUN git clone https://github.com/bodokaiser/nearby .

# lets node execute the source code
CMD ["node", "index.js"]

然后建立你的本地形象:

cd local
docker build -t your-image-name-local:your-tag .

然后运行它:

docker run your-image-name-local:your-tag

现在您的本地图像将非常快速地构建,因为它扩展了您的基本图像,该图像已经完成了所有繁重的依赖安装,提升。

作为在容器内部执行git clone的替代方法,您可以将代码目录安装到docker容器中,这样当您对主机上的代码进行更改时,它们会立即反映在容器中:

本地/ Dockerfile

FROM your-image-name-base:your-tag

# lets node execute the source code
CMD ["node", "index.js"]

然后你会跑:

docker run -v /path/to/your/code:/path/inside/container your-image-name-local:your-tag

这会将目录挂载到容器中,然后执行CMD