gpt4 book ai didi

django - 使用 Docker 开发 Django

转载 作者:行者123 更新时间:2023-12-02 18:54:00 25 4
gpt4 key购买 nike

我正在尝试使用 Docker 为自己创建一个 Django Web 应用程序的开发环境。
我的问题是我应该如何设置它以进行开发?

  • 我创建了一个 Dockerfile它使用 Django 开发服务器和数据库,这样好吗?还是应该使用带有专用 Web 和数据库服务器的单独容器?
  • 我应该如何创建新的迁移?假设我正在使用 -v 将代码安装到容器中,对模型的更改需要创建新的迁移,那么,我应该使挂载可写并使用从容器内创建迁移吗?还有哪些其他选择?
  • 我正在考虑添加 RUNDockerfile 的说明当迁移未更改时,它将应用迁移以使用缓存。这是一个好习惯吗?
  • 最佳答案

    我几乎只使用 Docker 来开发 python (Flask dev)。除非您使用 PyCharm,否则 Virtualenvs 管理起来很烦人。

    FROM python:3.6

    # Install requirements
    RUN pip install django==VERSION \
    package==version

    ADD . /code
    WORKDIR /code

    CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

    并在运行
    $ docker build -t IMAGE_NAME .
    $ docker run -it \
    -p 8000:8000 \
    --mount src=$(pwd),target=/code,type=bind \
    -e DEBUG=1 \
    IMAGE_NAME

    将主机设为 0.0.0.0 很重要,因为 localhost容器主机文件中不存在。 --mount 的组合和 -e DEBUG=1将允许您利用更改时的热重载。您可能需要更改 manage.py像这样
    DEBUG = os.getenv('DEBUG') or 0

    这是我在进行 Flask 开发时使用的。

    编辑 有点意识到这并不能回答你所有的问题

    我总是做多容器,所以如果我愿意的话,我可以换掉数据库后端。
    version: '3'
    services:
    web:
    build: .
    ports:
    - "8000:8000"
    environment:
    - DEBUG=1
    volumes:
    - type: bind
    source: .
    target: /code

    db: # This is the host name
    image: postgress:10.1
    environment:
    - POSTGRESS_USER=USERNAME
    - POSTGRESS_PASSWORD=PASS
    - POSTGRESS_DB=DBNAME
    volumes:
    - data:/var/lib/postgresql/data

    volumes:
    data:

    您需要在此示例中声明一个命名卷 data您可以通过...查看它的存储位置
    $ docker volumes inspect data
    docker run我之前所说的命令基本上是重写到 compose 文件中(因为 docker-compose 只是调用了底层的 api)。您实际上可以通过 docker CLI 在后台启动 postgress 容器,而不是使用 compose,但是 compose 可以更轻松地使用多个容器。由于没有明确定义的网络,容器只需创建一个默认网络并绑定(bind)到它。您的数据库容器的主机名是 db或您决定调用该服务的任何内容。因此,在您的 python 文件中,您需要将其用作连接中的主机名。

    就迁移而言,我认为您应该只在 Web 容器中执行它们。我还没有真正做过任何 Django 开发,但如果它类似于 Flask 迁移,我会假设是这种情况。
    $ docker exec -it web_container_name/hash /bin/bash
    root@web_container_hash# python manage.py makemigrations
    root@web_container_hash# python manage.py migrate

    编辑 2

    运行这些命令时,它应该会为您创建迁移,并且因为 /code实际上绑定(bind)到您的本地目录,它会将它们保存到您的本地计算机。

    关于django - 使用 Docker 开发 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47874745/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com