我应该如何创build一个Dockerfile在一个实例中运行多个服务?

我正在尝试创build一个Dockerfile。 我是Docker的新手。 我正在创build这个Dockerfile,它将在一个实例中启动rabbitmq,ftp服务器和elasticsearch服务器。 我已经创build了这样的文件:

# Pull base image FROM alpine:latest MAINTAINER Harshit Prasad # define commonly used JAVA_HOME variable ENV JAVA_HOME /usr/lib/jvm/java-8-oracle # Expose the web interface ports # 2121: ftp, a FTP server to be used for mass data / file storage # 5672: rabbitmq, a rabbitmq message queue server to be used for global messages, queues and stacks # 9300: elastic, an elasticsearch server or main cluster address for global database storage EXPOSE 2121 5672 9300 # install Java RUN \ echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \ add-apt-repository -y ppa:webupd8team/java && \ apt-get update && \ apt-get install -y oracle-java8-installer && \ rm -rf /var/lib/apt/lists/* && \ rm -rf /var/cache/oracle-jdk8-installer # install apache ftp server 1.1.0 RUN wget http://www-eu.apache.org/dist/mina/ftpserver/1.1.0/dist/apache-ftpserver-1.1.0.tar.gz RUN tar xfz apache-ftpserver-1.1.0.tar.gz # run ftp server RUN cd apache-ftpserver-1.1.0 bin/ftpd.sh res/conf/ftpd-typical.xml # install RabbitMQ server RUN wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-generic-unix-3.6.6.tar.xz RUN tar xf rabbitmq-server-generic-unix-3.6.6.tar.xz # run the RabbitMQ server RUN cd rabbitmq_server-3.6.6/sbin/rabbitmq-server # install the management plugin to be able to use a web interface RUN cd rabbitmq_server-3.6.6/sbin/rabbitmq-plugins enable rabbitmq_management # install erlang programming language. RabbitMQ is written in erlang. RUN apt-get install erlang # elasticsearch service here # set current working directory to yacy_grid_mcp RUN git clone https://github.com/yacy/yacy_grid_mcp.git WORKDIR /yacy_grid_mcp 

我想知道我是否正确创buildDockerfile。 如果有人能帮助我,那将是非常棒的。 另外请让我知道我应该如何着手添加elasticsearch服务。 提前致谢!

我应该如何创build一个Dockerfile在一个实例中运行多个服务?

你不应该。

docker容器不是一个完整的虚拟机来运行一整套应用程序实例和服务。

Docker是应用程序虚拟化。 这意味着一个容器运行一个进程。

在你的情况下,你需要3个容器。 一个用于RabbitMQ,一个用于FTP服务,一个用于弹性search。

您可能会想要使用命名的数据卷来共享FTP服务之间的文件系统,以及任何读取它的文件系统。

一旦你有三个容器的工作,你可以使用docker-compose来简化它们的运行。

当你build立你的容器时,RUN将执行你的命令,然后保存文件系统并退出。 所以当你运行你的容器时,你的服务没有运行。 您应该使用CMD执行单个命令。

你应该绕过docker文件,你会发现运行这样的多个服务不是这样做的,你应该有一个容器为每个服务。

不过,我同意有时候,有多个服务可能是有用的(不是你的情况,我想),你可以看看https://docs.docker.com/engine/admin/multi-service_container/ ,你会find一些方法来做到这一点