热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

跨docker容器共享预编译资产-Sharingprecompiledassetsacrossdockercontainers

Ihaveannginxcontainerseparatefrommyrailscontainerandwanttobeabletoserveprecompiled

I have an nginx container separate from my rails container and want to be able to serve precompiled assets from rails with the nginx container. This sounds like a job for a volume container but I have got myself confused after having quickly needing to learn docker and reading the documentation endlessly. Has anybody had to deal with a similar situation?

我有一个与我的rails容器分开的nginx容器,并希望能够使用nginx容器从rails提供预编译资产。这听起来像卷容器的工作,但我很快就需要学习docker并无休止地阅读文档。有人不得不处理类似的情况吗?

4 个解决方案

#1


17  

I'm having the same issue. Here's what I'm currently working on:

我有同样的问题。这是我目前正在做的事情:

Option 1: use a single image for both nginx and the app

This way, I can build the image once (with the app, precompiled assets and nginx), then run two instances of it: one running the app server, and another for the nginx frontend:

这样,我可以构建一次图像(使用app,预编译资产和nginx),然后运行它的两个实例:一个运行app服务器,另一个运行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

Not pretty, but very easy to set up and upgrade.

不漂亮,但很容易设置和升级。

Option 2: use a shared volume, and precompile assets as a job

Shared volumes cannot be updated in the build process, but can be updated by a container instance. So we can run our rake task to precompile the assets just before running our app:

共享卷无法在构建过程中更新,但可以由容器实例更新。因此,我们可以在运行应用程序之前运行我们的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

This looks like a more robust option, but will require a more complex instrumentation. I'm leaning towards this option, however, since we'll need a separate job for database migrations anyway.

这看起来像一个更强大的选项,但需要更复杂的仪器。但是,我倾向于这个选项,因为无论如何我们都需要一个单独的数据库迁移工作。

Option 3: distribute the assets to a CDN on build-time

Your Dockerfile can upload the resulting assets directly to a CDN. Then you configure your Rails app to use it as the asset_host. Something like:

您的Dockerfile可以将生成的资产直接上传到CDN。然后配置Rails应用程序以将其用作asset_host。就像是:

RUN rake assets:precompile && aws s3 sync public/assets s3://test-assets/

I'm currently experimenting with this option. Since I'm using Amazon CloudFront, looks like I can just sync the resulting assets to S3 using the AWS CLI. There's also a gem for that (asset_sync), but it looks stale.

我正在尝试这个选项。由于我使用的是Amazon CloudFront,看起来我可以使用AWS CLI将生成的资产同步到S3。还有一个宝石(asset_sync),但它看起来很陈旧。

The downside is that you'll have to send the needed AWS credentials to the build context or the Dockerfile itself – this might need committing them to your source repository, if you're using an automated build.

缺点是您必须将所需的AWS凭证发送到构建上下文或Dockerfile本身 - 如果您使用的是自动构建,则可能需要将它们提交到源存储库。

#2


5  

I recommend to precompile assets inside of Docker container because in this case you can without any problems run it to any environment otherwise before run docker container you should copy shared precompilled assets to new environment, mount them and only after it run docker container.

我建议在Docker容器内部预编译资产,因为在这种情况下,您可以毫无问题地将其运行到任何环境,否则在运行docker容器之前,您应该将共享的预编译资产复制到新环境,安装它们并且仅在它运行docker容器之后。

The other problem related to version of assets. I mean that your code must use assets compatible with it otherwise you will have different problems with CSS and JS. So, this is the second point why you should precompile assets inside of Docker container.

另一个问题与资产版本有关。我的意思是你的代码必须使用与之兼容的资产,否则你将遇到CSS和JS的不同问题。所以,这是你应该在Docker容器中预编译资产的第二点。

#3


0  

For production, @maxd is right: you should add the compiled assets to your images. However, for development I think you are right. Use a volume container that is used by:

对于生产,@ max是正确的:您应该将编译后的资产添加到图像中。但是,对于开发,我认为你是对的。使用以下使用的卷容器:

  • the rails container to store the precompiled assets
  • rails容器用于存储预编译资产
  • the nginx container to serve the assets
  • 用于服务资产的nginx容器

An alternative would be mounting a host directory into the containers.

另一种方法是将主机目录安装到容器中。

You can find more help in the Managing Data in Containers User Guide

您可以在“管理容器中的数据用户指南”中找到更多帮助

#4


0  

Define a VOLUME in Dockerfile

在Dockerfile中定义一个VOLUME

And then use --volumes-from during run of another container

然后在另一个容器的运行期间使用--volumes-from


推荐阅读
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 本文探讨如何配置 Nginx 以将传入请求反向代理到运行在本地绑定端口上的 Docker 容器,并解决常见的路径重定向问题。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文将深入探讨PHP编程语言的基本概念,并解释PHP概念股的含义。通过详细解析,帮助读者理解PHP在Web开发和股票市场中的重要性。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
author-avatar
顺丰-03_457
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有