【问题标题】:Build a Docker with Flask application and Solr使用 Flask 应用程序和 Solr 构建 Docker
【发布时间】:2021-04-15 15:17:01
【问题描述】:

我是 Docker 新手,我需要在后台使用 Solr 服务器(在 solrcloud 模式下)“dockerize”我的 Flask 应用程序。 我了解如何在 Docker 上部署我的应用程序,但没有 Solr 服务器。 我不知道是否应该只在 1 个 dockerfile 中完成,使用 docker-compose 或使用多阶段 docker。

目前我尝试过这样的事情:

### Multi-stage build
FROM solr:8.8.0

ADD custom-config /opt/solr/server/solr/configsets/custom-config
ADD solr.in.sh /etc/default
ADD *.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib/

EXPOSE 8983

### II image
FROM continuumio/miniconda3

ADD . /flask-test

WORKDIR /flask-test

RUN apt update -y &&  apt upgrade -y && pip install -r requirements.txt

COPY --from=0 /opt/solr .

CMD ["solr", "start -c"]
CMD ["solr", "create_collection", "-c test", "-d /opt/solr/server/solr/configsets/custom-config"]
CMD ["python", "main.py"]

显然这行不通。 你有什么建议吗?谢谢

更新

根据一些建议,我在两个不同的 Dockerfile 中将两个原始阶段分开,并尝试将它们组合到 docker-compose.yml 中。 因此,我有一个 Flask 应用程序的 Dockerfile:

FROM continuumio/miniconda3
ADD . /flask-test
WORKDIR /flask-test
RUN apt update -y &&  apt upgrade -y && pip install -r requirements.txt
CMD ["python", "main.py"]

还有一个用于 Solr 服务器的 Dockerfile:

FROM solr:8.8.0
ADD custom-config /opt/solr/server/solr/configsets/custom-config
ADD solr.in.sh /etc/default
ADD *.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib/
EXPOSE 8983
CMD solr start -c && solr create_collection -c test-d /opt/solr/server/solr/configsets/custom-config

在最后一步我做了这个 docker-compose.yml:

version: "3.9"

services:
 flask:
  build: .
  ports:
   - "5000:5000"
 solr:
  build: ./docker-solr
  restart: unless-stopped
  environment:
   - Dsolr.default.confdir=/opt/solr/server/solr/configsets/custom-config/conf
  ports:
   - "8983:8983"

运行 docker-compose up 时,一切正常,我的 Flask 应用程序正在启动,但问题是 Solr 服务继续启动命令并重新启动,因此,我的 Flask 应用程序依靠 localhost:8983 无法正常工作。

有什么帮助吗?

【问题讨论】:

  • 特别是如果 Solr 进程有一个网络可访问的服务器组件,最佳实践几乎总是在两个单独的容器中运行这两个进程。
  • 目前在本地运行
  • 分离容器和 docker-compose 或类似的东西是如果你想保持一切简单,协调部署的方式
  • 谢谢大家,我在尝试使用 docker-compose 完成此任务时更新了问题

标签: docker flask solr solrcloud


【解决方案1】:

正如您在 Dockerfile 中指出的那样,您在同一个 dockerfile 上使用多个阶段(阶段数由 FROM 指令数计算)。

最新的 FROM 将消除其他 FORM,因此我们仅使用多个 from 来减小图像大小并将数据从 stage 传递到 other,而不适合您。

您需要的是使用两个 dockerfile 和 docker-compose.yml 文件将这两个部分放在两个单独的容器上,

我希望这可以帮助您解决问题。

【讨论】:

    猜你喜欢
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2013-06-25
    • 1970-01-01
    • 2016-04-03
    相关资源
    最近更新 更多