Django的Docker服务发现

django_discover的Python项目详细描述


此项目提供了在django中注册服务的简单工作流。它非常固执己见,赚了很多钱。 假设。

目标

开发django应用程序时,通常需要外部服务,如数据库、键值存储、 消息代理等。我更喜欢使用DockerDocker-Compose在开发应用程序时运行这些服务。

django-discovery只要遵循特定的工作流,就可以轻松地连接到这些服务:

  • 开发是在您自己的机器上完成的,服务运行在Docker下;

  • 测试是通过使用docker compose运行服务和应用程序来完成的;

  • 生产环境提供了一个支持srv查找的dns。例如:

    • Running everything under Kubernetes
    • Running everything on Docker, configured to use an SRV-capable DNS such as Consul

要求

django-discovery需要python 3和django 1.8,因为我们生活在现代。

快速启动

下面的示例假设django应用程序需要mysql数据库。将以下内容添加到 settings.py

from discovery import services

db = services.register('my_db', 'mysql', secrets=['mysql_user', 'mysql_database', 'mysql_password'])

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': db.secrets['mysql_database'],
        'USER': db.secrets['mysql_user'],
        'PASSWORD': db.secrets['mysql_password'],
        'HOST': db.host,
        'PORT': db.port,
    }
}

DEBUG = services.debug_mode

现在可以在本地主机上使用Docker下的数据库运行应用程序,方法如下 docker-compose.yml

my_db:
    image: mysql:5.6
    ports:
        - ":3306"
    environment:
        MYSQL_ROOT_PASSWORD: supersecret
        MYSQL_DATABASE: database_name
        MYSQL_USER: database_user
        MYSQL_PASSWORD: alsosecret

您也可以在Docker中完整运行应用程序,例如使用以下Docker编写文件:

database:
    image: mysql:5.6
    environment:
        MYSQL_ROOT_PASSWORD: supersecret
        MYSQL_DATABASE: database_name
        MYSQL_USER: database_user
        MYSQL_PASSWORD: alsosecret

application:
    build: .
    links:
        - database:my_db
    ports:
        - "80:8080"
    env:
        DISCOVERY_MODE: env

而且仍然使用相同的settings.py,甚至可以使用以下命令在kubernetes下运行应用程序 定义:

apiVersion: v1
kind: Service
metadata:
  name: my_db
spec:
  ports:
    - protocol: tcp
      port: 3306
apiVersion: v1
kind: Endpoints
metadata:
  name: my_db
subsets:
  - addresses:
    - ip: 1.2.3.4
  - ports:
    - port: 3306
apiVersion: v1
kind: Pod
metadata:
  name: my_application
  namespace: my_namespace
spec:
  containers:
     - name: my_application
       image: my/docker-image
       volumeMounts:
         - name: db_secrets
           mountPath: /etc/secrets/my_db
           readOnly: true
  volumes:
    - name: db_secrets
      secret:
        mysql_database: some_name
        mysql_user: some_user
        mysql_password: secret_password

完整文档

正在处理它…

许可证

这个项目是由麻省理工学院授权的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java密钥安全如何确保密钥安全?   java Webelement屏幕截图错误   java Selenium:我正在使用Firefox版本46.01,并在显示的ECLIPSE错误消息中进行了测试   javascript Jquery自动完成不向java传递值   javajavax。坚持不懈persistenceexception eclipselink4002(eclipse持久性服务2.5.2.v 20140319   java检查大型HashMap是否包含键的最佳方法?   java如何解决连接mssql时的JNDI错误   modelandview内部重定向和重定向之间的java差异   swing如何处置未使用的JavaUI对象   java在数组中多次存储同一引用项,一次更改会影响所有引用项吗?   java项目Euler#14:为什么我的树形映射算法比暴力慢?   java如何使用不同的分隔符连接配置单元列   java在部署在不同服务器上的两个WAR之间共享pojo对象   Spring控制器中的java JSR303验证和获取@JsonProperty名称   java检查playstore是否安装了Android应用程序   java从一段字符串中选择一个单词?   当发生特定选择时显示组合框的java   大量调用后,构造函数中的JAVA数组复制速度异常缓慢   java无法使用KeyListner移动我的图像   使用Spring MVC和线程保存java实体