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

在运行时将项目源添加到docker容器,docker,dockerfile,Docker,Dockerfile,我对docker很陌生。我使用了一个dockbile,它复制我的项目源代码并构建应用程序。建造过程相当复杂,应在容器环境中进行;不是主机。 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.

我对docker很陌生。我使用了一个
dockbile
,它复制我的项目源代码并构建应用程序。建造过程相当复杂,应在容器环境中进行;不是主机。 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
项目源文件夹很大(~3g)。因此,塑造形象需要一段时间;复制文件并编译一些源代码。大多数时候我不会更改编译程序的源代码,所以这是浪费时间

我试图了解卷是如何装载源的。但我的理解是,卷是在运行时定义的,因此无法执行
config and build
脚本


有没有办法做到这一点?

让源代码可用的快速方法是使用。这将允许您授予容器访问主机上目录的权限

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

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

主机目录和容器目录将同步,这将使您能够避免在有新代码更改的地方重建映像。

您可以将脚本
config和build.sh
添加到ENTRYPOINT,并将CMD
apachectl-D前台
集成到该ENTRYPOINT脚本本身中

参考-

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

参考-