快速入门: Compose和Django

这个快速入门指南将演示如何使用docker compose来配置和运行一个简单的Django/PostgrepSQL app。

定义项目组件

需要为这个项目创建一个Dockerfile,一个Python依赖文件和一个docker-compose.yml文件。
1.创建一个空的项目目录。
可以以容易记忆的名称命名项目。这个目录是你的应用程序镜像的上下文。此目录应该只包含用来构建镜像的资源。
2.在项目目录中创建一个新的Dockerfile文件。
Dockerfile通过一个或多个构建命令来定义应用程序镜像内容。一旦构建完成,可以在容器运行这个镜像。
3.添加如下内容到Dockerfile文件。

  1. FROM python:2.7
  2.  ENV PYTHONUNBUFFERED 1
  3.  RUN mkdir /code
  4.  WORKDIR /code
  5.  ADD requirements.txt /code/
  6.  RUN pip install -r requirements.txt
  7.  ADD . /code/

这个Dockerfile从一个Python 2.7 base镜像开始构建新镜像。然后添加了一个新的code目录到此镜像。最后安装定义在requirements.txt文件的python依赖。
4.保存并关闭Dockerfile。
5.在项目目录创建requirements.txt文件。
在Dockerfile中的RUN pip install -r requirements.txt命令需要用到这个文件。
6.添加如下内容到requirements.txt.

  1. Django
  2.  psycopg2

7.保存并关闭requirements.txt文件。
8.在项目目录中创建一个docker-compose.yml文件。
这个docker-compose.yml文件描述组成你的app的服务。在这个示例中那么服务是web server和database。这个compose文件也描述了这些服务使用哪个docker镜像,它们如何链接到一起以及它们可能需要挂载到容器内的数据卷。最后这个docker-compose.yml文件描述这些服务暴露了哪个端口。
9.添加如何内容到docker-compose.yml文件。

  1. version: '2'
  2.  services:
  3.    db:
  4.      image: postgres
  5.    web:
  6.      build: .
  7.      command: python manage.py runserver 0.0.0.0:8000
  8.      volumes:
  9.        - .:/code
  10.      ports:
  11.        - "8000:8000"
  12.      depends_on:
  13.        - db

这个文件定义了两个服务:db服务和web服务。
10.保存并关闭docker-compose.yml文件。

创建一个Django项目

在本步骤中,我们通过构建在上一步骤中定义的镜像来创建一个Django项目。
1.切换到项目目录的根目录。
2.使用docker-compose命令创建一个Django项目。

  1. docker-compose run web django-admin.py startproject composeexample .

指示compose使用了web服务的镜像和配置文件在容器中运行django-admin.py start project composeexample命令。由于web镜像还不存在,compose就按照在docker-compose.yml中的build: .行定义的在当前目录构建镜像。
一旦web服务镜像构建完成,compose就运行它并在容器内执行django-admin.py startproject命令。这个命令创建了Django项目使用到的一系列文件和目录。
3.当docker-compose命令完成后,列出项目的内容。

  1. $ ls -l
  2.  drwxr-xr-x 2 root   root   composeexample
  3.  -rw-rw-r-- 1 user   user   docker-compose.yml
  4.  -rw-rw-r-- 1 user   user   Dockerfile
  5.  -rwxr-xr-x 1 root   root   manage.py
  6.  -rw-rw-r-- 1 user   user   requirements.txt

如果是在Linux运行的docker,django-admin文件所有者应该是root。这是因为容器以root用户运行。更改这个新文件的所有者。

  1. sudo chown -R $USER:$USER .

如果在Mac或Windows运行的Docker,你应该已经是这些文件的所有者了,包括那些由django-admin生成的文件。

  1. $ ls -l
  2.     total 32
  3.     -rw-r--r--  1 user  staff  145 Feb 13 23:00 Dockerfile
  4.     drwxr-xr-x  6 user  staff  204 Feb 13 23:07 composeexample
  5.     -rw-r--r--  1 user  staff  159 Feb 13 23:02 docker-compose.yml
  6.     -rwxr-xr-x  1 user  staff  257 Feb 13 23:07 manage.py
  7.     -rw-r--r--  1 user  staff   16 Feb 13 23:01 requirements.txt

连接数据库

在本步骤,我们来设置Django数据库的连接。
1.在项目目录中,编辑composeexample/settings.py文件。
2.使用如下行替换DATABASES = …

  1. DATABASES = {
  2.      'default': {
  3.          'ENGINE': 'django.db.backends.postgresql',
  4.          'NAME': 'postgres',
  5.          'USER': 'postgres',
  6.          'HOST': 'db',
  7.          'PORT': 5432,
  8.      }
  9.  }

这些设置取决于在docker-compose.yml指定的postgres docker镜像。
3.保存并关闭文件。
4.执行docker-compose up命令。

  1. $ docker-compose up
  2.  Starting composepractice_db_1...
  3.  Starting composepractice_web_1...
  4.  Attaching to composepractice_db_1, composepractice_web_1
  5.  ...
  6.  db_1  | PostgreSQL init process complete; ready for start up.
  7.  ...
  8.  db_1  | LOG:  database system is ready to accept connections
  9.  db_1  | LOG:  autovacuum launcher started
  10.  ..
  11.  web_1 | Django version 1.8.4, using settings 'composeexample.settings'
  12.  web_1 | Starting development server at http://0.0.0.0:8000/
  13.  web_1 | Quit the server with CONTROL-C.

在这时候,Django app已经运行在docker主机上的8000端口。

发布于:2019-11-19 04:14:48