2024-04-27 04:19:14 发布
网友
我对码头工人的世界还不熟悉。我的文件夹如下所示:
app/ __init__.py api.py data_loader.py
首先,我运行data_loader.py将数据加载到Neo4j数据库。 然后我以python -m app.api的形式启动flask服务器
data_loader.py
python -m app.api
FlaskAPI需要一个本地Neo4j数据库,所以我希望flask和Neo4j都在同一个Docker容器中。我该怎么办?Dockerfile和Docker Compose之间的差异让我感到困惑
您通常只希望在容器中运行一个程序。如果其中一个程序是数据库,而另一个程序是存储数据的应用程序,则尤其如此:您希望能够在保持数据库运行的同时替换应用程序容器,在生产环境中,您可能希望运行多个应用程序容器以实现规模和冗余,但仍然有一个数据库副本
Docker Compose是一个由YAML文件驱动的标准工具,可用于描述需要协同工作的多个容器:
# docker-compose.yml version: '3.8' services: application: build: . ports: - '5000:5000' environment: NEO4J_HOST: database # see below database: image: neo4j:4.2 # https://hub.docker.com/_/neo4j volumes: - dbdata:/data volumes: dbdata:
每个容器都有自己的localhost,因此您需要将应用程序配置为在其他地方查找数据库。组合服务名称application和database在此Docker环境中可用作主机名(不由其他组合设置使用,也不由浏览器应用程序使用,即使它们是由Docker提供的,也不直接从主机提供)^Docker文档中的{a1}进一步描述了这一点
localhost
application
database
这意味着您的应用程序将需要某种方式来配置数据库位置。环境变量易于使用:
from neo4j import GraphDatabase import os db_host = os.environ.get('NEO4J_HOST', 'localhost') db_port = os.environ.get('NEO4J_PORT', '7687') driver = GraphDatabase.Driver(f'neo4j://{db_host}:{db_port}')
这里的默认值适用于主机非Docker开发环境。在docker-compose.yml文件中,可以指定备用环境变量设置,即上面的environment:块
docker-compose.yml
environment:
在生产中,您可能非常合理地希望在其他地方运行数据库:如果您的云提供商有托管版本的Neo4j,您可以使用它,或者您可能希望在专用硬件上运行数据库,即使系统的其余部分在Docker中运行。环境变量机制允许您根据需要进行配置;这不是Docker特有的
您不需要在Dockerfile中执行任何特殊操作。PythonNeo4j驱动程序似乎没有特殊的主机需求,因此将其包含在requirements.txt或Pipfile中并构建一个普通的Python应用程序映像就足够了。不要在源代码或Dockerfile中包含数据库位置或凭据(如果未设置环境变量,则超出面向开发人员的默认值)
requirements.txt
Pipfile
您通常只希望在容器中运行一个程序。如果其中一个程序是数据库,而另一个程序是存储数据的应用程序,则尤其如此:您希望能够在保持数据库运行的同时替换应用程序容器,在生产环境中,您可能希望运行多个应用程序容器以实现规模和冗余,但仍然有一个数据库副本
Docker Compose是一个由YAML文件驱动的标准工具,可用于描述需要协同工作的多个容器:
每个容器都有自己的
localhost
,因此您需要将应用程序配置为在其他地方查找数据库。组合服务名称application
和database
在此Docker环境中可用作主机名(不由其他组合设置使用,也不由浏览器应用程序使用,即使它们是由Docker提供的,也不直接从主机提供)^Docker文档中的{a1}进一步描述了这一点这意味着您的应用程序将需要某种方式来配置数据库位置。环境变量易于使用:
这里的默认值适用于主机非Docker开发环境。在
docker-compose.yml
文件中,可以指定备用环境变量设置,即上面的environment:
块在生产中,您可能非常合理地希望在其他地方运行数据库:如果您的云提供商有托管版本的Neo4j,您可以使用它,或者您可能希望在专用硬件上运行数据库,即使系统的其余部分在Docker中运行。环境变量机制允许您根据需要进行配置;这不是Docker特有的
您不需要在Dockerfile中执行任何特殊操作。PythonNeo4j驱动程序似乎没有特殊的主机需求,因此将其包含在
requirements.txt
或Pipfile
中并构建一个普通的Python应用程序映像就足够了。不要在源代码或Dockerfile中包含数据库位置或凭据(如果未设置环境变量,则超出面向开发人员的默认值)相关问题 更多 >
编程相关推荐