2016-11-12 103 views
1

我已經使用Nginx創建了Ruby on Rails項目。 Rails應用程序和Nginx運行在單獨的和鏈接的容器中。這種配置工作正常。然而...Docker - 在單個容器中運行兩個進程

1)是否可以在一個容器中同時運行(Rails/Puma服務器+ Nginx)?

2)Dockerfile中的CMD命令應該怎麼樣?

3)我應該在docker-compose.yml中使用哪個命令作爲「command:」屬性?

我認爲配置運行它們在不同的容器是更好的解決方案,但我想了解所有可能性。

我使用彪馬作爲Rails的應用服務器並運行它,我使用的命令:捆綁EXEC PUMA -C配置/ puma.rb

回答

3

默認情況下,搬運工監視一個單一的過程,並且所述容器爲完成/重新啓動(取決於啓動標誌)。

有一個特定的分佈,旨在做你正在追求的東西,也就是說,在docker實例中有多個進程存活,同時監視/重新啓動它們,這個圖像是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/* 

之後,只要確保您創建的每個服務的文件夾und er/etc/service,裏面有一個名爲「run」的文件。這將是你的Dockerfile的服務,例如(從DOC)的入口點:

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

因此,對於你的目標,只是創建幾個文件夾+運行文件,一個爲NGINX和其他的的Rails/Puma服務器,並以此圖片爲基礎。

+0

謝謝!那是我需要的。 – nicq

相關問題