微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为了运行多个实例,您如何容器化 Django 应用程序?

如何解决为了运行多个实例,您如何容器化 Django 应用程序?

我们的想法是创建一个 Django 应用程序,该应用程序将用作 Android 应用程序的后端,并提供用于管理移动应用程序数据的 Web 管理界面。 公司的不同站点有时需要为同一个 android 应用程序使用不同的后端(数据必须完全分开管理)。应用程序将托管在 Windows 服务器上。 我如何将应用程序容器化,以便我可以运行它的多个实例(侦听同一 IP 的不同端口),并且可以根据需要将其移动到不同的服务器并在那里设置它的新实例? 我熟悉的 Django 开发部分,但我之前从未使用过 Docker(或其他)容器。

我需要什么: 处理此特定主题的教程或文档 要么 一些文章提示如何完成这项工作的有序点。

解决方法

这是你想要的吗?

https://atrisaxena.github.io/projects/docker-basic-django-application-deployment/

拥有多个实例的秘诀是在运行容器时映射端口。

跑步时

docker run -d -p 8000:8000 djangosite

您可以通过将 8000:8000 设置更改为您想要的任何 <host_port>:<container_port> 来更改端口映射。

例如如果您按照上面的示例进行操作,您最终会在容器(Dockerfile 中的 EXPOSE 8000)上公开端口 8000。上述命令将主机上的 8000 端口映射到容器上的 8000 端口。如果您想在端口 8001 上运行容器的第二个实例,只需运行

docker run -d -p 8001:8000 djangosite

最后一步是使用 nginx 等代理将 docker 主机上的端口映射到可通过浏览器访问的 URL(即通过端口 80 用于 http,443 用于 https)。

关于移动容器,您只需将您构建的 docker 镜像导入到您想要的任何 docker 主机上,无需移动源代码。

这是否回答了您的问题?

附言值得注意的是,上面的教程建议使用 manage.py runserver 运行 Django 服务器,这不是部署 Django 站点的标准方式。正确的做法是在容器内使用 WSGI 或类似的(通过 apache、nginx、gunicorn 等)来正确地与容器边界接口。有关如何正确部署站点的详细信息,请参阅 https://docs.djangoproject.com/en/3.2/howto/deployment/。文档中详述的所有方法都可以在容器内完成(但请注意不要让您的容器过于庞大,否则会压低您的主机)。

P.P.S 也不是严格必须按照链接文章中的建议将您的 docker 容器标记到远程存储库。您可以使用 docker build(请参阅 https://docs.docker.com/engine/reference/commandline/build/)在本地构建容器,并使用 docker save(请参阅 https://docs.docker.com/engine/reference/commandline/save/)将图像保存为文件。然后,您可以使用 docker load (https://docs.docker.com/engine/reference/commandline/load/) 将映像导入新主机。

注意不要将 docker savedocker loaddocker exportdocker import 混淆,因为它们提供不同的功能。阅读文档以获取更多信息。 docker savedocker load 处理图像,而 docker exportdocker import 直接处理容器(即图像的特定实例)。

,

我会推荐一个 docker-compose 文件,有两个不同命名的服务并在不同的端口上运行,就是这样

version: '2'

services:
  backend:
    ports:
      - host_port:container_port example
      - 8080:8000
    build:
      context: ./directory_containing_docker_file
      dockerfile: .
    restart: unless-stopped
    networks:
      - your-network

  :
    ports:
      - host_port:container_port
      - 8090:8000
    build:
      context: ./directory_containing_docker_file
      dockerfile: .
    restart: unless-stopped
    networks:
      - your-network


networks:
  your-network:
    driver: bridge

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。