2016-11-12 3 views
1

Я создал проект Ruby on Rails с Nginx. Приложение Rails и Nginx запускаются в отдельных и связанных контейнерах. Эта конфигурация работает нормально. Однако ...Docker - запустить два процесса в одном контейнере

1) Возможно ли совместное использование (Rails/Puma server + Nginx) в одном контейнере?

2) Как должна выглядеть команда CMD в Dockerfile?

3) Какую команду следует использовать в качестве атрибута «command:» в файле docker-compose.yml?

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

Я использую Puma в качестве сервера приложений Rails' и запустить его я использую команду: расслоение EX пуму -C конфиг/puma.rb

ответ

3

По умолчанию докера контролирует один единственный процесс, и контейнер завершено/перезаписано (в зависимости от флажков запуска), когда этот контролируемый процесс завершается.

Существует конкретное распределение, целью которого является то, что вы преследуете, то есть иметь более одного процесса в докере, проверяя/перезапуская все из них, это изображение представляет собой phusion/baseimage, вы найдете его здесь : https://github.com/phusion/baseimage-docker

На этом изображении вы создаете столько сервисов, сколько хотите, создавая подкаталоги в/etc/service и запуская в качестве CMD того, кто начнет и контролирует все службы, например:

# Use phusion/baseimage as base image. To make your builds reproducible, make 
# sure you lock down to a specific version, not to `latest`! 
# See https://github.com/phusion/baseimage-docker/blob/master/Changelog.md for 
# a list of version numbers. 
FROM phusion/baseimage:<VERSION> 

# Use baseimage-docker's init system. 
CMD ["/sbin/my_init"] 

# ...put your own build instructions here... 

# Clean up APT when done. 
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

После этого просто убедитесь, что вы создаете папку за услугу и er/etc/service, а внутри - файл под названием «run». Это будет отправной точкой для вашей службы, пример (из дока) в Dockerfile:

RUN mkdir /etc/service/memcached 
ADD memcached.sh /etc/service/memcached/run 

Так что для вашей цели, просто создать пару папок + запустить файл, один для NGINX и других для Rails/Puma, и используйте это изображение в качестве базы.

+0

Спасибо! Это то, что мне нужно. – nicq

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