大佬教程收集整理的这篇文章主要介绍了在Docker容器之间共享预编译的资产,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Nginx容器与我的轨道容器分开,并希望能够使用Nginx容器从rails提供预编译的资产。 这听起来像一个卷容器的工作,但我已经很快就需要学习docker和无休止地阅读文档了自己的困惑。 有没有人需要处理类似的情况?
docker Nginx容器没有收到来自外部的请求,连接被拒绝
在Windows 10上的Docker中将当前目录挂载为卷
Docker错误:无法find包git
Docker Django Nginx gunicorn URL丢弃端口
我有同样的问题。 这是我目前的工作:
这样,我可以构建一次图像(使用应用程序,预编译资源和Nginx),然后运行它的两个实例:一个运行应用程序服务器,另一个运行Nginx前端:
docker build -t Hello . docker run --name Hello-app Hello rackup docker run --name Hello-web -p 80:80 --link Hello-app:app Hello Nginx
不漂亮,但很容易设置和升级。
共享卷不能在构建过程中更新,但可以通过容器实例进行更新。 所以我们可以在运行@R_754_9616@之前运行我们的rake任务来预编译资源:
docker build -t Hello . docker run -v /apps/Hello/assets:/app/public/assets Hello rake assets:precompile docker run --name Hello-app Hello rackup docker run --name Hello-web -p 80:80 --link Hello-app:app -v /apps/Hello/assets:/usr/share/Nginx/html/assets Nginx
这看起来像一个更强大的选项,但将需要更复杂的仪器。 但是,我倾向于这个选项,因为无论如何,我们都需要一个单独的作业进行数据库迁移。
您的Dockerfile可以将生成的资产直接上传到CDN。 然后,您将您的Rails应用程序配置为使用它作为asset_host 。 就像是:
RUN rake assets:precompile && aws s3 sync public/assets s3://test-assets/
我目前正在试验这个选项。 由于我使用的是Amazon CloudFront,因此我可以使用AWS CLI将产生的资产同步到S3。 这也是一个宝石( asset_sync ),但它看起来陈旧。
缺点是您必须将所需的AWS凭证发送到构建上下文或Dockerfile本身 – 如果您使用的是自动构建,则可能需要将它们提交到源存储库。
我建议预先编译Docker容器中的资源,因为在这种情况下,您可以在没有任何问题的情况下将其运行到任何环境,否则在运行docker容器之前,您应该将共享的预先完成的资源复制到新环境,装入它们,并且只有在运行docker容器后。
另一个与资产版本有关的问题。 我的意思是说,你的@L_616_29@必须使用与它兼容的资源,否则你将有不同的CSS和JS的问题。 所以,这是为什么你应该预先编译Docker容器中的资源的第二点。
对于生产,@ maxd是正确的:你应该把编译的资产添加到你的图像。 但是,为了发展,我认为你是对的。 使用由以下使用的卷容器:
rails容器来存储预编译的资源
Nginx容器来服务资产
另一种方法是将主机目录挂载到容器中。
您可以在“ 管理容器中的数据”用户指南中找到更多帮助
以上是大佬教程为你收集整理的在Docker容器之间共享预编译的资产全部内容,希望文章能够帮你解决在Docker容器之间共享预编译的资产所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。