这个快速入门指南将演示如何使用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.