我对码头工作者来说很新。我工作了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
脚本无法完成。
有没有办法完成这项工作?
答案 0 :(得分:1)
您可以将脚本config-and-build.sh
添加到ENTRYPOINT&将CMD apachectl -D FOREGROUND
集成到该入口点脚本本身中。
参考 - https://docs.docker.com/engine/reference/builder/#entrypoint
完成后,您可以使用主机绑定卷-v
和docker run
将项目目录直接挂载到容器中,这将删除使用Dockerfile复制项目的依赖关系。
答案 1 :(得分:0)
使源代码可用的快捷方法是使用volume bind-mounts。这将允许您为容器访问主机上的目录。
您可以通过在启动容器时使用-v
参数挂载包含源代码的目录来实现此目的。
docker run -v <source-code-dir-on-machine>:<container-source-code-dir> <image-name> ...
主机目录和容器目录将保持同步,这样可以避免在有新代码更改的地方重建映像。