Docker在构建时使用卷进行构建

时间:2018-06-28 15:33:30

标签: docker docker-compose

在docker映像构建期间是否可以使用外部卷?

我有一种情况,我想在docker映像构建期间使用外部卷内的配置。有可能吗?

5 个答案:

答案 0 :(得分:3)

如果通过'docker image build'表示运行单个'docker build ...'命令:不,没有办法(至少,在我阅读的最新文档中没有)。但是,没有什么可以阻止您使用直接的docker命令执行需要外部卷的步骤,然后提交容器并像'docker build'一样对其进行标记。假设这是构建的最后一步,请将所有其他不需要卷的命令放入Dockerfile中,然后执行以下操作:

tmp_img=`docker build .`
tmp_container=`docker run -v $my_ext_volume:$my_mount_path --entrypoint=(your volume-dependent build command here) $tmp_img`
docker commit $tmp_container my_repo/image_tag:latest
docker rm "$tmp_container"

这与在Dockerfile中具有RUN命令的功能相同,但是具有增加的卷挂载。示例中的commit命令还标记了图像。

如果您需要在依赖于卷的命令之后再有其他Dockerfile命令,则要稍微复杂一点,但是在大多数情况下,您可以组合运行命令并以一种无需手动运行的方式重新安排安装-最后,使用volume命令,使事情变得简单。

答案 1 :(得分:0)

您可以将文件复制到Docker映像(ADD)和rm中,这是最后一步之一

答案 2 :(得分:0)

您可以将ADD与ARG(构建时间参数)结合使用,以在构建期间访问文件或目录,而不必对它们的位置进行硬编码。

ARG MAVEN_SETTINGS=settings.xml
ADD $MAVEN_SETTINGS ./

现在您可以在构建过程中使用以下命令更改文件位置:

docker build --build-arg MAVEN_SETTINGS=someotherfile.xml

答案 3 :(得分:0)

podman是Docker的替代方案,它的api相同,但在构建时也支持挂载卷。

我用它来将数据加载到测试数据库中,而不必先将数据复制到映像中。

答案 4 :(得分:0)

我们不仅限于Docker构建OCI映像。

使用buildah,可以从主机装载不会保留在最终映像中的卷。对配置和机密有用。

buildah bud --volume /home/test:/myvol:ro -t imageName .