您现在的位置: 万盛学电脑网 >> 操作系统 >> Linux教程 >> 正文

Linux系统使用Docker开发Django项目教程

作者:佚名    责任编辑:admin    更新时间:2022-06-22

  在Linux系统中Docker是一个应用开发平台,可以把应用在Docker上打包,然后在Linux Docker上运行调试。而且目前Docker是Linux最火热的软件发布器之一了。本文就来介绍一下Linux系统使用Docker开发Django项目教程。

  通过 Docker Machine 「系统配置」和 Docker Compose 「多容器应用组装」 提供堆栈可以完成 Postgres, Redis 和 Django 项目相结合的开发。

  而在最后,该堆栈将包括如下每个服务的单独的容器:

  一个 Web/ Django 的容器

  一个 Nginx 的容器

  一个 Postgres 的容器

  一个 Redis 的容器

  一个 Data 容器

Linux系统使用Docker开发Django项目教程

  本地设置

  使用 Docker「v1.6.1」版本我们将使用到 Docker Compose 「v1.2.0」编排一个多容器组成的应用程序,使用 Docker Machine「v0.2.0」创建本地和云的 Docker 主机。 按照指示,分别安装 Docker Compose 和 Machine,然后测试安装结果:

  $ docker-machine --version

  docker-machine version 0.2.0 (8b9eaf2)

  $ docker-compose --version

  docker-compose 1.2.0

  接下来,根据以下项目结构从realpython/dockerizing-django克隆一份项目或自己创建项目:

  ├── docker-compose.yml

  ├── nginx

  │ ├── Dockerfile

  │ └── sites-enabled

  │ └── django_project

  ├── production.yml

  └── web

  │ ├── Dockerfile

  │ ├── docker_django

  │ │ ├── __init__.py

  │ │ ├── apps

  │ │ │ ├── __init__.py

  │ │ │ └── todo

  │ │ │ ├── __init__.py

  │ │ │ ├── admin.py

  │ │ │ ├── models.py

  │ │ │ ├── templates

  │ │ │ │ ├── _base.html

  │ │ │ │ └── home.html

  │ │ │ ├── tests.py

  │ │ │ ├── urls.py

  │ │ │ └── views.py

  │ │ ├── settings.py

  │ │ ├── urls.py

  │ └── wsgi.py

  │ ├── manage.py

  │ ├── requirements.txt

  │ └── static

  │ │ └── main.css《/code》

  现在我们准备容器运行……

  Docker Machine

  开启 Docker Machine,只需运行:

  $ docker-machine create -d virtualbox dev;

  INFO[0000] Creating CA: /Users/michael/.docker/machine/certs/ca.pem

  INFO[0000] Creating client certificate: /Users/michael/.docker/machine/certs/cert.pem

  INFO[0001] Downloading boot2docker.iso to /Users/michael/.docker/machine/cache/boot2docker.iso.。。

  INFO[0035] Creating SSH key.。。

  INFO[0035] Creating VirtualBox VM.。。

  INFO[0043] Starting VirtualBox VM.。。

  INFO[0044] Waiting for VM to start.。。

  INFO[0094] “dev” has been created and is now the active machine.

  INFO[0094] To point your Docker client at it, run this in your shell: eval “$(docker-machine env dev)”

  这个 create 命令设置一个新的 Machine「开发环境」。实际上,它是下载 Boot2Docker 并开始运行 VM。现在只要在开发环境下指定 Docker:

  $ eval “$(docker-machine env dev)”

  运行以下命令来查看当前正在运行的机器:

  $ docker-machine ls

  NAME ACTIVE DRIVER STATE URL

  dev * virtualbox Running tcp://192.168.99.100:2376

  接下来,我们会让 Django,Postgres 和 Redis 的容器运行起来。 上一页1234下一页共4页

  Docker Compose

  让我们看一看 docker-compose.yml 文件:

  web:

  restart: always

  build: 。/web

  expose:

  - “8000”

  links:

  - postgres:postgres

  - redis:redis

  volumes:

  - /usr/src/app/static

  env_file: .env

  command: /usr/local/bin/gunicorn docker_django.wsgi:application -w 2 -b :8000

  nginx:

  restart: always

  build: 。/nginx/

  ports:

  - “80:80”

  volumes:

  - /www/static

  volumes_from:

  - web

  links:

  - web:web

  postgres:

  restart: always

  image: postgres:latest

  volumes_from:

  - data

  ports:

  - “5432:5432”

  redis:

  restart: always

  image: redis:latest

  ports:

  - “6379:6379”

  data:

  restart: always

  image: postgres:latest

  volumes:

  - /var/lib/postgresql

  command: true

  在这里,我们定义了五个服务: Web、Nginx、Postgres、Redis 和 Data。 上一页12 34下一页共4页

  Web 服务通过 「Web」 目录下的 Dockerfile 来进行构建,这里也设置了 Python 环境设置,Django 应用默认8000端口。这个端口之后转发到主机环境的80端口上–例如,Docker Machine。Web 服务还在容器 Restore.env 文件中增加了环境变量。

  Nginx 服务用于反向代理,作用于 Django 或静态文件目录。

  Postgres 服务是从 Docker Hub 的官方 PostgreSQL镜像 安装,安装 Postgres 后运行在默认的服务器的5432端口。

  Redis 使用官方 Redis镜像 安装,默认 Redis 服务是运行在6379端口。

  最后,注意有一个单独的容器来存储数据库数据,即为 Data。这有助于确保即使 Postgres 容器完全摧毁数据仍然存在。

  现在,运行容器,构建镜像,然后开始服务:

  $ docker-compose build

  $ docker-compose up -d

  这时可以有时间喝一杯咖啡或走走路,因为你第一次运行它将需要一段时间,随后就可以从 Docker 缓存中建立运行更快的了。

  一旦服务运行,我们就需要创建数据库迁移:

  $ docker-compose run web /usr/local/bin/python manage.py migrate

  获得 Docker Machine 的相关 IP, – docker-machine ip –,然后在您的浏览器中输入IP:

Linux系统使用Docker开发Django项目教程

  出现上图后刷新,您应该能看到页面更新。从本质上讲,我们使用 Redis INCR 来递增每个处理请求,查看web/docker_django/apps/todo/views.py 代码以获得更多信息。 上一页123 4下一页共4页

  同样,这创造了五项服务,都在不同的容器中运行:

  $ docker-compose ps

  Name Command State Ports

  ----------------------------------------------------------------------------------------------

  dockerizingdjango_data_1 /docker-entrypoint.sh true Up 5432/tcp

  dockerizingdjango_nginx_1 /usr/sbin/nginx Up 0.0.0.0:80-》80/tcp

  dockerizingdjango_postgres_1 /docker-entrypoint.sh postgres Up 0.0.0.0:5432-》5432/tcp

  dockerizingdjango_redis_1 /entrypoint.sh redis-server Up 0.0.0.0:6379-》6379/tcp

  dockerizingdjango_web_1 /usr/local/bin/gunicorn do 。。. Up 8000/tcp

  要查看哪些环境变量可用于 Web 服务,运行:

  $ docker-compose run web env