Быстрый старт: Docker Compose и Django

Это руководство по быстрому старту демонстрирует как использовать Docker Compose что бы запустить простое приложение Django/PostgreSQL. Перед началом, убедитесь что установили docker compose.

Определяем компоненты проекта

Для этого проекта, вам необходимо создать Dockerfile, файл с зависимостями Python и docker-compose.yml файл.

  1. Создайте пустой каталог для проекта.

    Выберете легко запоминающееся название для каталога. Данный каталог будет является контекстом для образа вашего приложения. Каталог будет содержать только ресурсы необходимые для сборки образа.

  2. Создайте новый файл с именем Dockerfile в каталоге вашего проекта.

    Dockerfile определяет содержимое образа с помощью нескольких команд сборки конфигурирующих данный образ. После сборки вы можете запустить образ в контейнере. Более подробную информацию по Dockerfiles, вы можете найти в разделах руководство пользователя Docker и руководство по 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. Базовый образ изменен посредством добавления каталога code. Так же в него будут установлены зависимости Python из файла requirements.txt.

  4. Сохраните и закройте Dockerfile.

  5. Создайте файл requirements.txt в каталоге вашего проекта.

    Данный файл будет использоваться командой RUN pip install -r requirements.txt из вашего Dockerfile.

  6. Добавьте необходимые зависимости в requirements.txt.

    Django
    psycopg2
    
  7. Сохраните и закройте файл requirements.txt.

  8. Создайте файл с именем docker-compose.yml в каталоге вашего проекта.

    Файлdocker-compose.yml описывает сервисы из которых будет состоять ваше приложение. В этом примере это будут web-сервер и база данных. Файл docker-compose.yml также описывает какие Docker образы будут использовать сервисы, как они будут связаны и какие тома данных нужно смонтировать в контейнеры. И наконец docker-compose.ymlописывает какие порты сервисы будут использовать. Более подробную информацию по конфигурированию сервисов вы найдете в разделе руководство по 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. Создайте 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 проекта.

  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
    

Если вы запускаете 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 к базе данных.

  1. В директории вашего проекта отредактируйте файл composeexample/settings.py.

  2. Замените DATABASES = ... следующим кодом:

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

    Эти настройки определены в образе postgres указанном в docker-compose.yml.

  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 приложение будет работать на 8000 порту вашего Docker хоста. Если вы используете Docker Machine VM, вы можете использовать команду docker-machine ip MACHINE_NAME что бы узнать IP адрес.

    Django example

Дополнительная документация по Compose

Перевод абзаца

Оригинал:


Комментарии:

  • Zill
    переведите плс!! у меня курсовая на носу, хочу взять эту тему
    14 Фев 2017, 18:08 ответить
    • admin
      Ну что с вас взять с халявщиков? Ладно так уж и быть =)
      15 Фев 2017, 16:34 ответить
  • Mitai .
    а как теперь например зайти в эту базу постгриса и создать пользователя и нужную базу?
    05 Авг 2019, 23:10 ответить

Пожалуйста, авторизуйтесь что бы оставлять комментарии.