Intereting Posts
Как обрабатывать статические ресурсы веб-приложения с кешем браузера в кубернетах? Отправка sigstop и sigcont в контейнеры докеров Развернутая служба Docker получает информацию о хосте IP и порте Как увеличить количество процессоров на Docker Причина и разрешение: SIGTERM SignalException в приложении Rails VirtualBox и Nginx очень медленно обслуживают кешированные статические файлы JS и CSS Как получить доступ к частному репозиторию maven из контейнера докеров? как установить пакет glib2 в докере Запись журналов на PHP за пределами контейнера Docker Как передать параметр в контейнер докера и обновить файл в контейнере с переданным параметром Как передать аргументы в файл Docker? Как выставить в сети? Не удалось создать докер-машину с Digital Ocean .Net – Нажатие журналов из веб-приложения на контейнер Docker с использованием Fluentd Есть ли способ хранить файлы на хосте docker, которые выживут перезагрузки хоста?

что такое шаблон докеры для обслуживания как статического, так и динамического контента

У меня есть простое приложение python / flask. Это похоже на container

 /var/www/app/ appl/ static/ ... app.py wsgi.py 

Я использовал, чтобы nginx обслуживал статические файлы непосредственно перед использованием докеров. Как это:

 location /static { alias /var/www/www.domain.com/appl/static; } location / { uwsgi_pass unix:///tmp/uwsgi/www.domain.com.sock; include uwsgi_params; } 

Но теперь статические файлы находятся внутри контейнера и недоступны nginx.

Я могу представить два возможных решения:

  1. запустите nginx внутри контейнера, как и раньше, и позвольте хосту nginx связываться с контейнером nginx, используя порт, такой как 8000

  2. монтируйте (host)/var/www/www.domain.com/static в (container)/var/www/static и скопируйте все статические файлы в run.sh

Что предпочитает докер?

Я предпочитаю первое решение, потому что оно остается в соответствии с фактором 7 построения 12-факторного приложения : разоблачение всех сервисов на порту. Там определенно некоторые накладные расходы с запросами, проходящими через Nginx дважды, но, вероятно, этого будет недостаточно, чтобы беспокоиться (если это просто добавьте больше контейнеров в ваш пул). Использование пользовательского сценария запуска для работы на стороне хоста после запуска вашего контейнера очень затруднит масштабирование вашего приложения с помощью инструментов в экосистеме Docker.

Мне не нравится первое решение, потому что запуск нескольких сервисов на одном контейнере не является докером.

В целом, мы хотим открыть нашу статическую папку для nginx, тогда Volume – лучший выбор. Но есть несколько способов сделать это.

  1. как вы упомянули, установите (host)/var/www/www.domain.com/static в (container)/var/www/static и скопируйте все статические файлы в run.sh

  2. используя кеш nginx, чтобы позволить статическим файлам кеша nginx для вас. например, мы можем написать наш такой код, чтобы nginx разрешал статическое содержимое с 30мин

 proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache:30m max_size=1G; upstream app_upstream { server app:5000; } location /static { proxy_cache cache; proxy_cache_valid 30m; proxy_pass http://app_upstream; } 
  1. доверять uwsgi и использовать uwsgi для обслуживания статического содержимого. Обслуживание статических файлов с помощью uWSGI