我正在从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
语句从远程存储库中获取文件。
有没有其他方法可以将这些本地文件添加到图像中?该项目也将是一个持续集成/持续开发工作流程,因此我将不断有文件添加到图像中。
答案 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>
现在,如果您构建此图片,除了ENTRYPOINT
和CMD
这意味着当您构建图像时,您的本地数据将被复制到您的容器中。而且它将始终在那个形象中。
现在将此图片推送到注册表中。
当用户拉出此图片时,该图片将包含您复制的数据。不用担心。
如果您需要更改数据,则需要再次build
和push
。
注意:通过这种方式,您需要
build
&amp;每次更改代码时都会push
另一种选择:
如果您不想build
&amp; push
每次更改代码时,都需要在运行时进行复制。
当用户运行docker时,编写一个将克隆git存储库的脚本。
Thar表示,请使用此
COPY script.sh /script.sh
ENTRYPOINT ["./script.sh"]
在这个script.sh
shell中,你是否需要git clone和其他你需要做的事情。
通过这种方式,当用户运行您的图像时,他们将始终获得您在git存储库中的最新代码