Docker Compose: запуск Flask приложения с mongodb
Содержание:
В этой статье вы узнаете как добавить к существующему приложению MongoDB, превратив его в прототип записной книжки дел.
Требования
- Docker (1.11.0 или выше)
- Docker Compose (1.8.0 или выше)
- Python 2.7 или выше
Структура файлов проекта
Обновление flask приложения
Обновим содержимое Flask приложения для того, чтобы оно могло использовать MongoDB в качестве СУБД, отредактировав файл my_flask_app/app.py.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from flask import Flask, redirect, url_for, request, render_template
from pymongo import MongoClient
app = Flask(__name__)
client = MongoClient('mongodb', 27017)
db = client.tododb
@app.route('/')
def todo():
_items = db.tododb.find()
items = [item for item in _items]
return render_template('todo.html', items=items)
@app.route('/new', methods=['POST'])
def new():
item_doc = {
'task': request.form['task'],
'description': request.form['description']
}
db.tododb.insert_one(item_doc)
return redirect(url_for('todo'))
if __name__ == "__main__":
app.run(host='0.0.0.0', debug=True)
Важно отметить, что в строке подключения в качестве имени хоста используется “mongodb“. Это имя хоста получает контейнер, запускаемый Docker Compose по имени запускаемого сервиса (mongodb). Контейнер web знает о контейнере mongodb, т.к. в его описании присутствует параметр links, указывающий на этот сервис (см. Обновление docker-compose.yml).
Также в директории my_flask_app создадим директорию templates, в которой необходимо создать шаблон страницы todo.html, использующийся в вашем приложении.
Новая запись
Список дел
Дело
Описание
{% for item in items %}
{% endfor %}
Для работы с MongoDB нашему приложению необходима библиотека pymongo, которую необходимо добавить в качестве зависимостей следующим образом.
$ source venv/bin/activate
$ pip install pymongo
$ pip freeze > my_flask_app/requirements.txt
Обновление Docker-compose.yml
В уже существующий docker-compose.yml необходимо добавить новый сервис mongodb, запускающийся из образа mongo версии 3.2, а также обновить сервис web, добавив параметр links, указывающий на сервис mongodb, чтобы контейнер web знал о контейнере mongodbпосле запуска.
$ cat docker-compose.yml
web:
build: ./my_flask_app
ports:
- "5000:5000"
volumes:
- ./my_flask_app:/app
links:
- mongodb
mongodb:
image: mongo:3.2
Параметр links – это инструкция для Docker, которая заставит его обновить файл /etc/hosts контейнера web, внеся туда информацию об IP-адресе контейнера mongodb.
Сборка и запуск обновленного Flask приложения
Обновите ваше приложение командой
$ docker-compose up -d --build
После успешного выполнения этой команды в браузере по адресу http://192.168.99.100:5000/ будет запущено ваше приложение, состоящее уже из двух контейнеров: web с простым Flask приложением и mongodb с СУБД.
Использование Docker Compose позволяет существенно сократить время, затрачиваемое на разработку, обновление и сопровождение ваших приложений. В следующих статьях я расскажу о том, как масштабировать ваше приложение.