【发布时间】: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