Это руководство по быстрому старту демонстрирует как использовать Docker Compose что бы запустить простое приложение Django/PostgreSQL. Перед началом, убедитесь что установили docker compose.
Для этого проекта, вам необходимо создать Dockerfile, файл с зависимостями Python и docker-compose.yml
файл.
Создайте пустой каталог для проекта.
Выберете легко запоминающееся название для каталога. Данный каталог будет является контекстом для образа вашего приложения. Каталог будет содержать только ресурсы необходимые для сборки образа.
Создайте новый файл с именем Dockerfile
в каталоге вашего проекта.
Dockerfile определяет содержимое образа с помощью нескольких команд сборки конфигурирующих данный образ. После сборки вы можете запустить образ в контейнере. Более подробную информацию по Dockerfiles
, вы можете найти в разделах руководство пользователя Docker
и руководство по Dockerfile.
Добавьте следующие строки в 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. Базовый образ изменен посредством добавления каталога code
. Так же в него будут установлены зависимости Python из файла requirements.txt
.
Сохраните и закройте Dockerfile
.
Создайте файл requirements.txt
в каталоге вашего проекта.
Данный файл будет использоваться командой RUN pip install -r requirements.txt
из вашего Dockerfile
.
Добавьте необходимые зависимости в requirements.txt.
Django
psycopg2
Сохраните и закройте файл requirements.txt
.
Создайте файл с именем docker-compose.yml
в каталоге вашего проекта.
Файлdocker-compose.yml
описывает сервисы из которых будет состоять ваше приложение. В этом примере это будут web-сервер и база данных. Файл docker-compose.yml также описывает какие Docker образы будут использовать сервисы, как они будут связаны и какие тома данных нужно смонтировать в контейнеры. И наконец docker-compose.yml
описывает какие порты сервисы будут использовать. Более подробную информацию по конфигурированию сервисов вы найдете в разделе руководство по docker-compose.yml
.
Добавьте следующую конфигурацию в файл 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
сервис.
Сохраните и закройте docker-compose.yml
файл.
На этом шаге, вам потребуется создать начальный Django проект собрав образ из контекста сборки созданного в предыдущем шаге.
Зайдите в каталог вашего проекта.
Создайте Django проект с помощью команды docker-compose
:
$ docker-compose run web django-admin.py startproject composeexample .
Данная инструкция говорит Compose выполнить в контейнере следующую команду django-admin.py startproject composeeexample
, используя образ и конфигурацию сервиса web
. Поскольку образ web
еще не существует, Compose начнет его сборку из текущего каталога, поскольку вы указали build: .
в docker-compose.yml
.
После того как образ сервиса web
собран, Compose запускает его и выполняет команду django-admin.py startproject
внутри контейнера. Данная команда создает набор файлов и каталогов для Django проекта.
После того как команда 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
Если вы запускаете Docker на Linux, файлы созданные django-admin
будут принадлежать пользователю root. Это происходит по тому что контейнер работает под пользователем root. Поменяйте владельца новых файлов.
sudo chown -R $USER:$USER .
Если вы запускаете Docker на Mac или Windows, значит у вас уже выставлен правильный владелец файлов, в том числе на созданные с помощью 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 к базе данных.
В директории вашего проекта отредактируйте файл composeexample/settings.py
.
Замените DATABASES = ...
следующим кодом:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
Эти настройки определены в образе postgres указанном в docker-compose.yml
.
Сохраните и закройте файл.
Выполните команду 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 приложение будет работать на 8000
порту вашего Docker хоста. Если вы используете Docker Machine VM, вы можете использовать команду docker-machine ip MACHINE_NAME
что бы узнать IP адрес.
Комментарии:
Пожалуйста, авторизуйтесь что бы оставлять комментарии.