在运行时将项目源添加到docker容器

时间:2018-03-21 11:46:01

标签: docker dockerfile

我对码头工作者来说很新。我工作了Dockefile复制我的项目源并构建应用程序。建造过程非常复杂,应该在集装箱的环境中完成;不是主机。 所以Dockerfile看起来像这样:

FROM base-image

RUN mkdir -p /proj/branches/www
COPY ./proj/branches/mybranch/* /proj/branches/mybranch/
RUN chown root:www-data -R /proj

COPY config-and-build.sh .
RUN /config-and-build.sh

EXPOSE 80
CMD apachectl -D FOREGROUND

项目源文件夹很大(~3 G)。因此,构建图像需要一段时间;复制文件并编译某些源。大多数时候我不会改变编译程序的来源,所以这是浪费时间。

我正在尝试了解卷如何安装源。但我的理解是卷是在运行时定义的,因此config-and-build脚本无法完成。

有没有办法完成这项工作?

2 个答案:

答案 0 :(得分:1)

您可以将脚本config-and-build.sh添加到ENTRYPOINT&将CMD apachectl -D FOREGROUND集成到该入口点脚本本身中。

参考 - https://docs.docker.com/engine/reference/builder/#entrypoint

完成后,您可以使用主机绑定卷-vdocker run将项目目录直接挂载到容器中,这将删除使用Dockerfile复制项目的依赖关系。

参考 - Bind a directory to a docker container

答案 1 :(得分:0)

使源代码可用的快捷方法是使用volume bind-mounts。这将允许您为容器访问主机上的目录。

您可以通过在启动容器时使用-v参数挂载包含源代码的目录来实现此目的。

docker run -v <source-code-dir-on-machine>:<container-source-code-dir> <image-name> ...

主机目录和容器目录将保持同步,这样可以避免在有新代码更改的地方重建映像。