Django 向Docker容器提供配置文件的推荐方法
我将我们的web应用程序移动到docker compose部署(Django、DRF、AngularJS) Docker现在看起来很稳定,一切都很顺利 我想:Django 向Docker容器提供配置文件的推荐方法,django,docker,docker-compose,volumes,Django,Docker,Docker Compose,Volumes,我将我们的web应用程序移动到docker compose部署(Django、DRF、AngularJS) Docker现在看起来很稳定,一切都很顺利 我想: 与您确认,我正在遵循有关应用程序配置文件的最佳实践 知道“卷文件”是否实际上是绑定装载,这是不推荐的 我已经设法使用了从Djangosettings.py文件中读取的环境变量和docker compose机密,它可以正常工作。缺点是环境变量仅限于简单的字符串,在发送Python列表、字典等时可能会带来一些转义挑战。我们还必须定义和维护
- 与您确认,我正在遵循有关应用程序配置文件的最佳实践
- 知道“卷文件”是否实际上是绑定装载,这是不推荐的
settings.py
文件中读取的环境变量和docker compose机密,它可以正常工作。缺点是环境变量仅限于简单的字符串,在发送Python列表、字典等时可能会带来一些转义挑战。我们还必须定义和维护许多环境变量,因为我们的web应用程序安装在许多地方,并且高度可配置
在前端(AngularJS),我们有两个constants.js
文件和nginx conf。
我在Dockerfile中使用了CMD[“/start.sh”]
,并使用了一些sed
命令。
但这看起来真的很粗糙,这也意味着我们必须定义和维护相当多的环境变量
settings.py
site\contants.js
admin\constants.js
谢谢你如果你不能使用环境变量,那么你应该使用绑定挂载。如果使用命名卷,则无法访问单个文件,也无法直接编辑配置文件 命名卷始终是整个目录,不能从主机直接访问。没有“卷文件”(您的链接问题完全是关于绑定装载的,有些使用命名卷语法),并且无法从命名卷中装载单个文件 较新的Docker有两种不同的绑定装载语法(在Compose中,和
卷:
服务配置,或创建类型:bind
命名卷)。这些基本上是等价的,您链接到的问题中的许多答案都涉及到使命名卷模拟绑定装载
Docker Compose支持相对路径,因此对于绑定挂载不可跨系统移植的主机路径,不必太担心。docker compose.yml
文件的基本片段可能包括:
services:
app:
build: django
volumes:
- ./config/django-settings.py:/app/settings.py
在本例中,我建议使用一个(部署时间)config
目录,其中包含配置文件,但这是一个任意选择;如果您想将应用程序源代码树中的mount/django/settings.py
绑定到映像中的内容,以便能够直接编辑它,这也是一个有效的选择。您可以将此树签入源代码管理,无论它签出在何处,它都将继续工作
如果您使用的是带有完整GNU工具集(Ubuntu,而不是Alpine)的基本映像,那么您的容器入口点脚本也可以用作非常轻量级的模板工具(它用等效的环境变量替换$VARIABLE
引用),这将帮助您支持“多选项”情况,而不是“dict类型选项”案例
一般来说,我建议将绑定挂载用于两种情况,可能是第三种情况:配置文件(操作员需要直接编辑)、日志文件(操作员需要直接读取)和持久数据存储(现有备份解决方案可以不经修改地工作;但在速度非常慢的MacOS上则不行)。命名卷可以很好地匹配持久数据情况,更好地匹配集群环境(Swarm、Kubernetes)中使用的卷,但不能直接访问