Linux入门教程:快速入门: Compose和Django, 定义项目组件 需要


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

定义项目组件

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

FROM python:2.7  ENV PYTHONUNBUFFERED 1  RUN mkdir /code  WORKDIR /code  ADD requirements.txt /code/  RUN pip install -r requirements.txt  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.

Django  psycopg2

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

version: '2'  services:    db:      image: postgres    web:      build: .      command: python manage.py runserver 0.0.0.0:8000      volumes:        - .:/code      ports:        - "8000:8000"      depends_on:        - db

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

创建一个Django项目

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

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命令完成后,列出项目的内容。

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

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

sudo chown -R $USER:$USER .

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

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

连接数据库

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

DATABASES = {      'default': {          'ENGINE': 'django.db.backends.postgresql',          'NAME': 'postgres',          'USER': 'postgres',          'HOST': 'db',          'PORT': 5432,      }  }

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

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

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

相关内容