首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在生产中的服务之间共享源代码?

问如何在生产中的服务之间共享源代码?
EN

Stack Overflow用户
提问于 2020-02-28 13:53:44
回答 1查看 76关注 0票数 1

我有两项服务如下所示:

代码语言:javascript
复制
version: "3.5"

services:
  nginx:
    image: nginx:alpine
    ports:
      - 80:80
    volumes:
      - .:/var/www/html:ro,cached
    working_dir: /var/www/html
    links:
      - fpm

  fpm:
    build:
      context: .
      dockerfile: .docker/fpm/Production.dockerfile
    working_dir: /var/www/html    

这是Production.dockerfile

代码语言:javascript
复制
FROM php:7.4-fpm-alpine

COPY . /var/www/html

其想法是,出于性能和部署的考虑,我应该将源代码复制到php映像中,对吗?

那么,如果一开始我不能将php-fpm和nginx放在一张映像中,原因是可伸缩性的,或者原因是什么,

据我所知,nginx和php都需要源代码How do I share it between them?。

我考虑过构建nginx映像并复制源代码,但如果其中一个副本在运行时发生了更改,就会出现问题,对吗?

叫卷怎么样?将源代码复制到卷中,并在服务之间共享它们?但这违背了我最初的想法。

简单地说,我想与另一个容器共享一个文件夹。

什么是最佳做法?

如有任何建议,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-28 15:11:25

的想法是,出于性能和部署的考虑,我应该将源代码复制到php-fpm映像中,对吗?我想说的是,只有静态资产才需要。

据我所知,nginx和php都需要源代码,如何在它们之间共享?您可以配置Nginx来代理请求,这样Nginx就不需要访问源代码,除非您计划直接使用nginx提供静态资产或php代码。

,命名卷怎么样?将源代码复制到卷中并在服务()之间共享它们--这不是一个可伸缩的想法,因为您需要将卷安装到所有生产节点,并将它们存储在共享文件系统(如NFS )中,这将减缓应用程序的运行速度。

有一种以上的方法来实现这一点,1-在同一主机中构建停靠文件,并在构建期间更新停靠文件以复制文件。2-使用多级生成并将文件从一个映像复制到另一个映像。

这篇文章解释了一切:https://medium.com/faun/three-methods-to-share-rails-assets-with-nginx-f39c90bb7d68

示例坞-撰写

代码语言:javascript
复制
version: '3.7'

services:

  mysql:
    image: mysql:5.7
    command: mysqld --general-log=1 --general-log-file=/var/log/mysql/general-log.log
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: dummy
      MYSQL_DATABASE: rails_blog_production

  rails_blog_web:
    image: wshihadeh/rails_blog:master
    restart: always
    command: 'web'
    ports:
      - 8080:8080
    depends_on:
      - mysql
    environment:
      DATABASE_URL: mysql2://root:dummy@mysql/rails_blog_production

  web:
    build:
      context: nginx
      dockerfile: Dockerfile
    command: server
    ports:
      - 80:80

volumes:
  db_data:

Nginx:码头文件

代码语言:javascript
复制
FROM wshihadeh/rails_blog:master


From nginx:latest

COPY ./docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]

COPY ./default.conf /etc/nginx/conf.d/default.conf
COPY ./nginx.conf /etc/nginx/nginx.conf

RUN mkdir /var/www/
WORKDIR /var/www/

COPY --from=0 /application/public public/

app文件

代码语言:javascript
复制
COPY ./docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]

USER rails
WORKDIR /application

RUN bundle config build.nokogiri --use-system-libraries && \
    bundle config git.allow_insecure true && \
    bundle config set deployment 'true' && \
    bundle config set frozen 'true' && \
    bundle config set without 'development test' && \
    bundle install --quiet && \
    bundle exec rake assets:precompile && \
    mkdir tmp/pids && \
    rm -rf vendor/cache/*.gem

CMD web
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60453165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档