Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 向Docker容器提供配置文件的推荐方法_Django_Docker_Docker Compose_Volumes - Fatal编程技术网

Django 向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列表、字典等时可能会带来一些转义挑战。我们还必须定义和维护

我将我们的web应用程序移动到docker compose部署(Django、DRF、AngularJS)

Docker现在看起来很稳定,一切都很顺利

我想:

  • 与您确认,我正在遵循有关应用程序配置文件的最佳实践
  • 知道“卷文件”是否实际上是绑定装载,这是不推荐的
我已经设法使用了从Django
settings.py
文件中读取的环境变量和docker compose机密,它可以正常工作。缺点是环境变量仅限于简单的字符串,在发送Python列表、字典等时可能会带来一些转义挑战。我们还必须定义和维护许多环境变量,因为我们的web应用程序安装在许多地方,并且高度可配置

在前端(AngularJS),我们有两个
constants.js
文件和nginx conf。 我在Dockerfile中使用了
CMD[“/start.sh”]
,并使用了一些
sed
命令。 但这看起来真的很粗糙,这也意味着我们必须定义和维护相当多的环境变量

  • Docker卷是用于这些配置文件的好主意吗?

  • 像“卷文件”这样的东西真的存在吗()还是它实际上是绑定装载?绑定装载不太推荐,因为它们依赖于主机上的文件系统和文件路径

  • 简要提到文件:“文件或目录在容器中装入的路径”,但没有详细介绍

    我们的web应用程序现在有简单的配置文件:

    • settings.py
    • site\contants.js
    • admin\constants.js
    以及:

  • 我希望避免将这些文件移动到可以挂载的专用目录

  • 您能给我看一个带有单文件卷(非绑定装载)的docker-compose.yml示例吗


  • 谢谢你

    如果你不能使用环境变量,那么你应该使用绑定挂载。如果使用命名卷,则无法访问单个文件,也无法直接编辑配置文件

    命名卷始终是整个目录,不能从主机直接访问。没有“卷文件”(您的链接问题完全是关于绑定装载的,有些使用命名卷语法),并且无法从命名卷中装载单个文件

    较新的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)中使用的卷,但不能直接访问