2016-06-09 4 views
2

У меня есть 2 контейнера для докеров: приложение & Веб.Докер: используйте гнезда для связи между двумя контейнерами

App - простой контейнер с кодом приложения php. Он используется только для хранения и доставки кода на удаленный хост Docker.

App изображения Dockerfile:

FROM debian:jessie 
COPY . /var/www/app/ 
VOLUME ["/var/www/app"] 
CMD ["true"] 

Web - контейнер веб-сервис, состоит из PHP-FPM + Nginx.

Веб изображения Dockerfile:

FROM nginx 

# Remove default nginx configs. 
RUN rm -f /etc/nginx/conf.d/* 

# Install packages 
RUN apt-get update && apt-get install -my \ 
    supervisor \ 
    curl \ 
    wget \ 
    php5-cli \ 
    php5-curl \ 
    php5-fpm \ 
    php5-gd \ 
    php5-memcached \ 
    php5-mysql \ 
    php5-mcrypt \ 
    php5-sqlite \ 
    php5-xdebug \ 
    php-apc 

# Ensure that PHP5 FPM is run as root. 
RUN sed -i "s/user = www-data/user = root/" /etc/php5/fpm/pool.d/www.conf 
RUN sed -i "s/group = www-data/group = root/" /etc/php5/fpm/pool.d/www.conf 

# Pass all docker environment 
RUN sed -i '/^;clear_env = no/s/^;//' /etc/php5/fpm/pool.d/www.conf 

# Add configuration files 
COPY config/nginx.conf   /etc/nginx/ 
COPY config/default.vhost  /etc/nginx/conf.d 
COPY config/supervisord.conf /etc/supervisor/conf.d/ 
COPY config/php.ini    /etc/php5/fpm/conf.d/40-custom.ini 

VOLUME ["/var/www", "/var/log"] 

EXPOSE 80 443 9000 

ENTRYPOINT ["/usr/bin/supervisord"] 

Мой вопрос: Можно ли связать веб-контейнер и контейнер App сокетом?

Основная причина этого - использование контейнера App для развертывания обновленного кода на удаленном хосте Docker. Использование томов/названных томов для общего кода между контейнерами не является хорошей идеей. Но Розетки могут помочь.

Благодарим за помощь и поддержку!

+1

Я считаю, что вы можете разместить сокет внутри тома, чтобы поделиться им. Вы даже можете сделать его одним файлом на хосте и поделиться этим файлом в качестве тома. – BMitch

+0

Большое спасибо за ваш ответ! –

ответ

7

Если оба контейнера работают на одном и том же хосте, можно разделить сокет между ними, поскольку они являются обычными файлами.

Вы можете установить create a local docker volume и установить этот том на обоих контейнерах. Затем настройте программу (ы) для использования этого пути.

docker volume create --name=phpfpm 
docker run phpfpm:/var/phpfpm web 
docker run phpfpm:/var/phpfpm app 

Если сокет может быть сгенерирован на хосте, вы можете установить файл в оба контейнера. Это метод, используемый для получения контейнера докеров для управления док-станцией хостов.

docker run -v /var/container/some.sock:/var/run/some.sock web 
docker run -v /var/container/some.sock:/var/run/some.sock app 
+0

Мэтт, большое спасибо за ваш ответ! Я сделал это. Но я не совсем понимаю, как веб-контейнер будет иметь доступ к файлам из контейнера App сокет, расположенный на нем общим томом. Как FPM из контейнера Web знает, что файлы находятся в указанной папке в контейнере приложения? Извините за мой немой вопрос, но я новичок в обмене данными через сокет. И действительно хочу понять этот вопрос. –

+0

Совместное использование сокета позволяет только общаться между ними. Таким образом, fpm прослушивает сокет, nginx отправляет запросы на fpm через сокет. Любые файлы для веб-сайта должны быть в веб-контейнере. Любые файлы для приложения php должны находиться в контейнере приложения. Что вы пытаетесь сделать – Matt

+0

Спасибо за помощь! Я пытаюсь сделать код сайта в отдельном контейнере App. И свяжите его с веб-сайтом nginx + fpm. Без использования томов. i.e., Веб-контейнер _only_ с nginx + php-fpm. Без кода сайта. Только веб-сервер и интерпретатор. Приложение - контейнер _only_ с данными сайта: php, html, css, js. Только для кода доставки и хранения. Мне нужно его для дальнейшего развертывания: - перестроить образ и контейнер только с кодом сайта (приложение) - доставить его на Docker Host и изменить старое приложение на новое приложение. –

 Смежные вопросы

  • Нет связанных вопросов^_^