Как я могу поделиться исходным кодом между службами в производстве? - PullRequest
1 голос
/ 28 февраля 2020

У меня есть две службы, как показано ниже:

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.docker

FROM php:7.4-fpm-alpine

COPY . /var/www/html

Идея состоит в том, что для обеспечения производительности и развертывания я должен скопировать исходный код в php -fpm изображение, верно?

Так что, если сначала я не смог бы поместить php -fpm и nginx в один фрагмент изображения по причине масштабируемости или по какой-либо причине,

и насколько я знаю, что nginx и php оба нуждались в исходном коде, How do I share it between them?

Я думал о создании изображения nginx и копировании исходного кода также, но это было бы проблематично c, если одна из копий изменилась во время выполнения, верно?

Как насчет именованных томов? копировать исходный код в тома и делиться ими между службами? Но это противоречит первоначальной идее, которую я получил выше.

Проще говоря, я хотел поделиться папкой в ​​контейнере с другим контейнером.

Каков наилучший метод?

Любой совет будет оценен.

1 Ответ

0 голосов
/ 28 февраля 2020

Идея состоит в том, что для обеспечения производительности и развертывания я должен скопировать исходный код в php -fpm изображение, верно? Я бы сказал, что нужны только данные c

и, насколько мне известно, nginx и php оба нуждались в исходном коде, как я могу поделиться им между ними? Вы можете настроить Nginx для прокси запроса и так Nginx не нужно иметь доступ к исходному коду, если только вы не планируете обслуживать статические c активы или php код напрямую с nginx

Как насчет именованных томов? копировать исходный код в тома и делиться ими между службами? Это не масштабируемая идея, так как вам нужно монтировать тома на все рабочие узлы и хранить их в общей файловой системе, такой как NFS, и это замедлит работу приложения.

Для этого есть несколько способов: 1 - собрать файлы docker на одном хосте и обновить файлы docker, чтобы копировать файлы во время сборки. 2 - использовать многоступенчатые сборки и копировать файлы из одного изображения в другое

В этом посте все объясняется: https://medium.com/faun/three-methods-to-share-rails-assets-with-nginx-f39c90bb7d68

пример docker -композиция

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: dockerfile

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 dockerfile


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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...