Как связать Docker-контейнер web-сервиса(php-fpm+nginx) c Docker-контейнером кода(php) с помощью сокета(socket)?

Здравствуйте!
Помогите, пожалуйста, в следующем вопросе.
Для разработки php-проектов на локальных машинах использовали Docker. Теперь решили попробовать перевести на Docker — stage и production.
Плюс к этому возникло желание попробовать реализовать и сам процесс деплоя с помощью Docker, без сторонних инструментов вроде Capistrano и т.п.

Простейший механизм деплоя предполагал следующее:
— собирается "пустой" Docker-image, в который включаются файлы проекта, назовем его App. Он предназначен только для хранения и транспортировки файлов проекта.
— с помощью Docker-Compose и Docker-Machine на удаленной машине запускается Docker-container на основе App-image.
— досуп контейнера web-сервиса(php-fpm+nginx) к файлам проекта из App-контейнера осуществляется через named-volume.

Попробовал. Работает. Но работает только для первоначального запуска проекта. Так как предоставление доступа к коду проекта посредством named-volume имеет свои нюансы. Узнал о них только после того, как открыл issues на Docker github. Начал строить свои костыли с очисткой named-volume и т.п. Понял, что это не true-Docker-way. Решил отказаться от этого варианта.

На Docker github подсказали связать Web(php-fpm+nginx) и App(php-code) контейнеры с помощью socket.
Собственно, вопрос — как правильно это сделать в контексте Docker.

Большое спасибо за помощь и советы!
  • Вопрос задан
  • 1663 просмотра
Пригласить эксперта
Ответы на вопрос 1
bazilio91
@bazilio91
tochka.com, developer experience
В вашем случае php-fpm стоит перевезти в контейнер с кодом (app). Варианта сделать его доступным для nginx 2:
- через tcp port
- через socket находящийся в volume имейджа (например, в Dockerfile: VOLUME /var/run/sockets/), у контейнера nginx прописываем --volumes-from app и слушаем сокет fpm в той же папке (/var/run/sockets/) но уже в контейнере nginx.

Лично мне больше нравится подход с tcp для php-fpm, ибо его можно масштабировать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы