2017-06-16 17 views
0

我正在尝试创建一个Dockerfile。我是新来的Docker。我创建了这个Dockerfile,它将在一个实例中启动rabbitmq,ftp服务器和elasticsearch服务器。我创建了这样的文件:我应该如何创建一个Dockerfile来在一个实例中运行多个服务?

# 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 

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

回答

2

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

你不应该。

A docker container is not a full virtual machine运行一整套应用程序实例和服务。

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

就你而言,你需要3个容器。一个用于RabbitMQ,一个用于FTP服务,另一个用于弹性搜索。

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

将所有三个容器都工作后,您可以使用docker-compose来简化它们的一起运行。

+0

感谢您的回答。你能帮我提供代码吗?以便我能更好地理解它。我对这件事很陌生。 :) –

1

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

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

但是,我认为,有时候,它可以有数倍服务(不是你的情况,我认为)是有用的,你可以看看https://docs.docker.com/engine/admin/multi-service_container/,你会发现一些方法来做到这一点

相关问题