在docker映像构建期间是否可以使用外部卷?
我有一种情况,我想在docker映像构建期间使用外部卷内的配置。有可能吗?
答案 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 .