在运行时将项目源添加到docker容器
我对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.
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,并将CMDapachectl-D前台
集成到该ENTRYPOINT脚本本身中
参考-
完成后,您可以使用主机绑定卷-v
和docker run
将项目目录直接装载到容器中,这将删除使用Dockerfile复制项目的依赖关系
参考-