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

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

1004
5 минут

В этой статье вы узнаете как добавить к существующему приложению 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 позволяет существенно сократить время, затрачиваемое на разработку, обновление и сопровождение ваших приложений. В следующих статьях я расскажу о том, как масштабировать ваше приложение.

15 ноября 2022
OpenShift остался без поддержки – как решить проблему российским клиентам
Интерес к семейству ПО для контейнеризации OpenShift был довольно высоким в корпоративном сегменте в прежние годы. По данным мониторинговой службы Datadog, только за прошлый год во всем мире количество пользователей платформ от RedHat увеличилось на 28%. Весной IBM объявил об уходе из России и прекращении поддержки всех программных продуктов для текущих клиентов. Разберемся, насколько критичной оказалась данная ситуация для заказчиков, и какие варианты действий существуют, чтобы минимизировать возможные риски отключения от сервиса.
0 минут
709
25 февраля 2021
Свидетели DevOps: мифы и байки про девопсов и тех, кто их нанимает
Те, кто решил стать девопсом, видят в этой профессии заманчивые перспективы. Это новый уровень мышления, это творчество и возможность создавать, это безграничные просторы для самосовершенствования. Не секрет также, что девопсам хорошо платят. Вместе с тем, вокруг понятия DevOps сформировался некий культ, овеянный мифами и легендами.
0 минут
1004
4 декабря 2020
Дайджест обновлений К2 Облака осень 2020 г.
За осень в К2 Облаке многое изменилось. Мы активно писали код и не успевали сообщать обо всех переменах. Постараемся исправиться и информировать вас ASAP, чтобы вы могли сразу же использовать новые фичи.
1 минута
298
scrollup