June 23, 2020

Flask Checkpoint 02. Підготовка до проекту з Docker

Цілі

  1. Зрозуміти концепції віртуальних машин та контейнерів.
  2. Ознайомитись з інструментом Docker.

Основні терміни

Зараз багато речей йдуть пліч-о-пліч з інструментами, які допомагають розвернути функціонал того чи іншого репозиторія на будь-якій платформі.

Раніше величезною популярністю користувались віртуальні машини, я використовував VirtualBox для того, щоб запускати різноманітні генератори ключів чи інші вірусні програми. Я робив це для того, щоб в ізольованому просторі завантажувати потенційно шкідливий код в систему, аби це не шкодило основній.

Якщо говорити про тестування моделей машинного навчання, то більшість цих репозиторіїв постачаються одразу з Dockerfile, що дозволить відтворити по образу контейнер із робочим кодом та потрібними налаштуваннями.

Отже, розглянемо дві основні концепції:

Архітектура віртуальних машин та контейнерів

Конетейнери займають менше місця за рахунок перевикористання ресурсів на рівні операційної системи, тоді як VM робить це на апаратному рівні. Основні відмінності між контейнерами та VM заключаються саме в архітектурі, в той час як їхній функціонал дуже подібний, а саме ізоляція додатку, а також його залежностей в окремий модуль.

Важливо знати: ці інструменти усувають необхідність у використанні додаткового фізичного обладнання, що дозволяє більш ефективно використовувати обчислювальні ресурси.

Зважаючи на все це, ми будемо використовувати Docker, як зручний спосіб оганізувати середовище для розробки.

Must have Docker!

Це програмне забезпечення для автоматизації розгортання та управління додатками в середовищах з підтримкою контейнеризації. Дозволяє "упакувати" додатки зі всім оточенням та залежностями в контейнер, який можна перенести на будь-яку Linux-cистему.

До основних переваг можна віднести:

  1. Простота у використанні: Docker значно полегшує використання розробникам, системним адміністраторам, архітекторам для швидкого створення та тестування додатків. Те, що створено локально на ноутбуці з легкістю можна перемістити у хмару для загального використання. Мантра звучить як: "Побудуй один раз, запускай де завгодно".
  2. Швидкість: контейнери Docker легкі та швидкі. Оскільки контейнери - це просто ізольовані середовища, що працюють на ядрі Linux, вони споживають невелику кількість ресурсів. Можна створити та завантажити контейнер за лічені секунди, на відміну від інших віртуальних машин, яким доводиться кожен раз створювати повноцінну операційну систему.
  3. Docker Hub: користувачі Docker також отримують вигоду від багатої та постійно зростаючої екосистеми Docker Hub, яку можна розглянути як "магазин застосунків для Docker". Спільнота Docker Hub має десятки тисяч образів, у вільному доступі, які ви можете вільно використовувати. З легкістю можна знайти готові та працюючі образи, які будуть відповідати всім вимогам, без потреби модифікації (хіба, що чуть-чуть).
  4. Модульність та масштабованість: Docker дозволяє легко розбити функціональність вашого додатку на різні контейнери, які можна оновлювати як незалежні компоненти. Тобто в одному контейнері може бути база даних Postgres, коли в іншому сервер Redis, в той час як сервер на Python знаходиться у третьому.
Приклад того, як виглядає Docker Toolbox з-під Windows.

Рекомендую переглянути першу частину курсу на Stepik по Docker:
Stepik: Управління обчисленнями

Стосовно того, яким чином застосовувати Linux термінал, в першій частині:
Stepik: Вступ до Linux