Docker - 在单个容器中运行两个进程
问题描述:
我已经使用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
答
默认情况下,搬运工监视一个单一的过程,并且所述容器为完成/重新启动(取决于启动标志)。
有一个特定的分布,旨在做你正在追求的东西,也就是说,在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服务器,并以此图片为基础。
谢谢!那是我需要的。 – nicq