当前位置: 首页 > 面试题库 >

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

俞学
2023-03-14
问题内容

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

# 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服务。提前致谢!


问题答案:

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

你不应该。

Docker容器不是运行完整的应用程序实例和服务堆栈的完整虚拟机。

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

在您的情况下,您需要3个容器。一种用于RabbitMQ,一种用于FTP服务,一种用于elasticsearch。

您可能想要使用命名数据卷在FTP服务和任何读取该服务之间共享文件系统。

一旦所有三个容器都工作了,就可以使用docker-compose简化它们一起运行。



 类似资料:
  • 问题内容: 我有一个可以为其创建一个(或多个)实例的实例。我正在使用Servlet环境,并且已经将一个EntityManagerFactory连接到Servlet(通过Servlet上下文),该Servlet在Servlet的生命周期中(因此,对于所有用户)都共享。 我可以执行以下操作之一: 在我的Servlet的生存期内创建一个EntityManager(例如,在所有用户之间共享) 为每个用户创

  • 我有一个应用程序在Liberty Server中作为war运行。如何在Liberty Server中运行同一个程序的多个实例?有办法在java代码里面得到战争的名字吗? String completePath=getClass()。getProtectionDomain()。getCodeSource()。getLocation()。旅游()。getPath(); 归来的.../target/cl

  • 问题内容: 我有一个自动相互连接的Spring bean图。大大简化了图示: 所有这些bean都没有指定范围,这暗示它们是单例(使它们成为显式单例不会改变任何东西,我已经尝试过)。 问题在于,在实例化 单个应用程序上下文之后 ,的实例和包含的 不同 实例。怎么会这样 我试图为它创建public no args构造函数,并且调试已确认创建了多次。所有这些创建的堆栈跟踪都在这里。 我还尝试过为Spri

  • 我有一张相互自动连线的Spring豆图。高度简化的插图: 所有这些bean都没有指定作用域,这意味着它们是单例(我已经尝试过了,让它们显式单例不会改变任何东西)。 问题是,在实例化单个应用程序上下文之后,Bar和Baz的实例包含不同的Foo实例。这怎么会发生? 我尝试为创建公共no args构造函数,并且调试已确认已多次创建。所有这些创建的堆栈跟踪都在这里。 我还尝试为Spring启用调试日志记录

  • 我想让我的Flutter应用程序总是在后台运行。在android中,我们必须创建一个始终在后台运行的服务。我在Flutter文档中找不到关于服务的东西。 有可能用Flutter做这种事情吗?

  • 一个简单的问题,但我找不到答案。我有一个FXML文件,我想多次实例化。每个副本都需要自己的句柄,以便我可以更改其中的数据。假设,这与在刚创建的类上使用“new”关键字完全一样。 到目前为止,在我的尝试中,我已经能够创建fxml文件的多个副本,但只有一个控制器,因此调用方法意味着更改发生在所有副本上。 我是否必须为同一fxml文件的每个副本创建一个新控制器? 提前感谢 编辑 我正在研究这个想法的代码