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第三方库


热门话题
Android中Twitter共享的java xAuth身份验证?   带有@XmlAnyAttribute和方法的java Bug?(使用JAXB-RI)   安卓 ArrayAdapter导致java。lang.NullPointerException   java如何使用JExel从现有excel文件中删除工作表   java树映射随机停止正确返回值   使用switch和scanner类java使用用户选择   java JCalendar多天选择   Java文件zip正在创建损坏的文件   Ajax调用中的java未定义错误   java处理JSON更改信息的最佳方法   java JNI不适用于AppKit线程   java在运行时为JTable的特定行设置背景色   java如何在for循环中添加按钮?   java在getclass()方法之后强制转换对象