在构建时使用卷构建Docker

krcsximq  于 2023-03-17  发布在  Docker
关注(0)|答案(5)|浏览(135)

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

0wi1tuuw

0wi1tuuw1#

(编辑以反映当前Docker CLI行为)
如果“docker映像构建”是指运行单个“docker构建...”命令:不,那是不可能的(至少,在我读过的最新文档中没有)。但是,没有什么可以阻止您使用直接Docker命令执行需要外部卷的步骤,然后提交容器并像“Docker Build”那样标记它。假设这是您构建的最后一步,将所有其他命令(不需要卷)放入Dockerfile,然后执行以下操作:

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

这与在Dockerfile中使用RUN命令的作用相同,但添加了卷挂载。示例中的commit命令也标记了映像。
如果您需要在依赖于卷的命令之后使用其他Dockerfile命令,则会稍微复杂一些,但在大多数情况下,您可以合并运行命令并重新安排安装,将手动的run-with-volume命令放在最后,以保持简单。

cxfofazt

cxfofazt2#

作为最后一步,您可以将文件复制到docker映像(ADD)和rm中

vzgqcmou

vzgqcmou3#

podman是Docker的替代品,它具有相同的API,但也支持在构建时装载卷。
我使用它将数据加载到测试数据库中,而不必先将数据复制到映像中。

lsmepo6l

lsmepo6l4#

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

ARG MAVEN_SETTINGS=settings.xml
ADD $MAVEN_SETTINGS ./

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

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

g52tjvyc5#

我们不限于Docker来构建OCI映像。
使用buildah可以从主机挂载卷,但不会保留在最终映像中。
buildah bud --volume /home/test:/myvol:ro -t imageName .

相关问题