我有两项服务如下所示:
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
FROM php:7.4-fpm-alpine
COPY . /var/www/html其想法是,出于性能和部署的考虑,我应该将源代码复制到php映像中,对吗?
那么,如果一开始我不能将php-fpm和nginx放在一张映像中,原因是可伸缩性的,或者原因是什么,
据我所知,nginx和php都需要源代码How do I share it between them?。
我考虑过构建nginx映像并复制源代码,但如果其中一个副本在运行时发生了更改,就会出现问题,对吗?
叫卷怎么样?将源代码复制到卷中,并在服务之间共享它们?但这违背了我最初的想法。
简单地说,我想与另一个容器共享一个文件夹。
什么是最佳做法?
如有任何建议,将不胜感激。
发布于 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
示例坞-撰写
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:码头文件
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文件
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 webhttps://stackoverflow.com/questions/60453165
复制相似问题