我正在部署一个Nginx实例. dockerfile以及Nginx配置数据和Web应用程序都位于我的git存储库中.在我看来,这全是一个git存储库:应用程序以及如何部署它.我想在Dockerfile中说(这简化了一点,但要点是我做不到)
COPY web-app /serving
COPY docker/site-conf /etc/Nginx/sites-enabled/
我有这个目录结构:
my-git-root
web-app
...
docker
Dockerfile
build.sh
site-conf
问题至少部分是因为docker的上下文是my-git-root / docker /.
本着不可变服务的精神,我希望容器具有git存储库的快照,而不是apt-get在容器中安装git并提取数据.但是除非我将docker内容分离到一个单独的git存储库中,然后再git克隆每个构建版本上的Web应用程序,否则我看不到如何使它起作用-我宁愿不要让任何人都试图通过git进行实时直播容器.
有关更合理的工作流程的建议?
“In the spirit of immutable services,… pulling the data”
如果您在dockerfile中执行此操作,则此操作会在容器创建时而不是运行时发生.因此,容器的每个版本都将具有特定版本的数据.如果您使用与您的Web应用程序回购的发布标签相匹配的标签来部署容器,则可以很清楚地看到每个容器中正在运行哪个版本的Web应用程序.
“apt-get install’ing git”
您可以使用github的http界面在特定标记处下载Webapp的tarball或提交哈希,因此不会拖入最新的和可能已损坏的webapp.
In Dockerfile I want to say…
如果将dockerfile移至git repo的根目录,则可以使用copy命令,因为整个代码已成为docker上下文的一部分.这是docker repos中的常见做法.
“Suggestions on a more sane workflow..”
我建议在其自己的git repo中有一个通用的Nginx容器,该容器在构建时不会复制web-app / serving.从运行您的代码的主机将Web应用程序挂载为卷.然后,您可以使用任何方法(泊坞窗外部)将当前代码状态保存到服务器上.您的docker容器可以在任何给定时间独立于代码状态.当您需要修复Nginx设置而不必寻找容器中的代码时,这将有所帮助.
有时您无法访问主机fs,即如果您在Amazon Elastic beantalk上运行.在那种情况下,我建议为我上面提到的Nginx容器使用相同的通用容器.然后在您的Web应用程序项目的根目录中有一个dockerfile,该文件与myNginx:version6一起使用,只需将Web应用程序文件夹复制到正确的位置即可.可以使用myApp:SomeVersion部署此容器.这样,您就可以引入一个众所周知的Nginx容器,其中包含与部署相关的所有问题以及与代码一起版本化的myApp容器.