将文件放入Docker镜像中

时间:2018-02-08 17:50:29

标签: docker dockerfile

我正在从Dockerfile创建一个Docker镜像。它在拉出时安装了一个应用程序,Dockerfile如下:

#Base image
FROM centos:latest

#Update image
RUN yum install -y git \
    && yum install -y wget \
    && yum install -y make

RUN git clone https://github.com/lskatz/lyve-SET.git /lyve-SET-1.1.4f/ \
    && cd /lyve-SET-1.1.4f/ \
    && make install

我想把我本地的文件放到容器中,我发现我可以通过在Dockerfile中添加像COPY /home/username/lyve-SET-1.1.4f/ /lyve-SET-1.1.4f/这样的行(例如)或者通过运行容器来执行此操作,然后使用docker cp。但是,我希望将文件放在docker镜像中,而不要求它依赖于我的本地目录。基本上,我希望拉动图像的用户将文件放在容器中(当它们运行时)而图像无法拉动,因为它依赖于将文件/文件夹从主机复制到容器。我正在考虑将它们放在github上,然后使用RUN git clone语句从远程存储库中获取文件。

有没有其他方法可以将这些本地文件添加到图像中?该项目也将是一个持续集成/持续开发工作流程,因此我将不断有文件添加到图像中。

1 个答案:

答案 0 :(得分:4)

#Base image
FROM centos:latest

#Update image
RUN yum install -y git # and so on

COPY /home/username/lyve-SET-1.1.4f/ /lyve-SET-1.1.4f/

ENTRYPOINT <entrypoint of your image>
CMD <arguments of your entrypoint>

现在,如果您构建此图片,除了ENTRYPOINTCMD

之外,所有内容都将被执行

这意味着当您构建图像时,您的本地数据将被复制到您的容器中。而且它将始终在那个形象中。

现在将此图片推送到注册表中。

当用户拉出此图片时,该图片将包含您复制的数据。不用担心。

如果您需要更改数据,则需要再次buildpush

  

注意:通过这种方式,您需要build&amp;每次更改代码时都会push

另一种选择:

如果您不想build&amp; push每次更改代码时,都需要在运行时进行复制。

当用户运行docker时,编写一个将克隆git存储库的脚本。

Thar表示,请使用此

COPY script.sh /script.sh
ENTRYPOINT ["./script.sh"]

在这个script.sh shell中,你是否需要git clone和其他你需要做的事情。

通过这种方式,当用户运行您的图像时,他们将始终获得您在git存储库中的最新代码