Docker Compose: запуск Flask приложения с mongodb
Запросить демо
Я подтверждаю свое согласие на обработку компанией КРОК моих персональных данных, указанных в форме, в целях и пределах, установленных законодательством РФ о персональных данных в рамках проводимых мероприятий в течение неопределенного срока
Предпочтительный способ связи
Оставить заявку
Я подтверждаю свое согласие на обработку компанией КРОК моих персональных данных, указанных в форме, в целях и пределах, установленных законодательством РФ о персональных данных в рамках проводимых мероприятий в течение неопределенного срока
Узнать стоимость
Я подтверждаю свое согласие на обработку компанией КРОК моих персональных данных, указанных в форме, в целях и пределах, установленных законодательством РФ о персональных данных в рамках проводимых мероприятий в течение неопределенного срока
Предпочтительный способ связи
Попробовать бесплатно
Я подтверждаю свое согласие на обработку компанией КРОК моих персональных данных, указанных в форме, в целях и пределах, установленных законодательством РФ о персональных данных в рамках проводимых мероприятий в течение неопределенного срока
Предпочтительный способ связи
Регистрация в консоли
Я подтверждаю свое согласие на обработку компанией КРОК моих персональных данных, указанных в форме, в целях и пределах, установленных законодательством РФ о персональных данных в рамках проводимых мероприятий в течение неопределенного срока
Предпочтительный способ связи
Быть в теме

Docker Compose: запуск Flask приложения с mongodb

15.05.2019 5 минут 2021

В этой статье вы узнаете как добавить к существующему приложению 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-flask-mongo-app.png

Использование Docker Compose позволяет существенно сократить время, затрачиваемое на разработку, обновление и сопровождение ваших приложений. В следующих статьях я расскажу о том, как масштабировать ваше приложение.

Не пропустите самые важные, интересные и полезные статьи недели

Ваш e-mail успешно подписан.