Використовуємо Docker для розгортання web-додатка bitrix
22 Серпня 2019
наступна статтяЩо таке Docker?
Якщо описувати простими словами, то Docker — це інструмент, який дозволяє запускати програми в «віртуальному» середовищі-контейнері. Інтуїтивно зрозуміло навіть з брендування, що принцип роботи сервісу можна порівняти з транспортними контейнерами в реальному житті. У кожному контейнері можна зберігати і запускати набір потрібних програм.
Що ж таке контейнер?
Контейнер можна порівняти з віртуальною машиною, яка ізолює процес для додатка, але, на відміну від віртуальних машин, контейнер не створює такого великого навантаження на «залізо». Також можна навести приклад з «пісочницею», яка ізолює процес від батьківської ОС, але, при цьому, не використовує ресурси для емуляції роботи віртуального ПК.
Docker розроблений спеціально для роботи в Linux. Контейнерна віртуалізація або віртуалізація на рівні операційної системи Docker нативно працює тільки на цій ОС. На Windows вам знадобиться гостьова Linux-система або спеціальна мінімалістична віртуальна машина з ядром Linux від розробників Docker, яка встановлюється з коробки. На офіційному сайті є досить велика документація по Docker; не будемо в неї сильно заглиблюватися, а розглянемо процес установки і налаштування оточення для роботи bitrix на ОС Linux.
Установка
Насамперед нам потрібно встановити Docker. Для цього будемо використовувати дистрибутив Ubuntu 18.04.7
Якщо у вас свіжевстановлена система, то необхідно виконати команду оновлення індексу пакетів:
$ sudo apt-get update
На другому кроці встановлюємо пакети необхідні для роботи:
$ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ Software-properties-common
Додаємо офіційний docker GPG-ключ:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Додаємо репозитарій, де розташовані пакети для установки Docker:
$ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
І нарешті набираємо команду яка встановить сам Docker:
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
Для перевірки правильності встановлення докера можна виконати команду яка завантажить образ і створить тестовий контейнер hello world:
$ sudo docker run hello-world
Якщо все встановлено правильно ми повинні побачити у вікні ось такий текст:
В Docker-світі існують такі поняття, як образи і контейнери. Попри те, що вони тісно пов'язані, вони відрізняються, і на початку вивчення Docker часто виникають складнощі в розумінні цих термінів. Якщо описувати простими словами, то образ — це заготовка або еталон, з якого створюється контейнер; його не можна змінювати або встановлювати в нього програми. Але є можливість створювати свої образи і зберігати їх на сайті hub.docker.com, де його зможе завантажити і використовувати в своїх цілях будь-який користувач.
Установка Docker-compose
Docker-compose — пакетний менеджер (по аналогії з composer і npm, льки у docker — контейнери), що дозволяє описувати необхідну структуру в одному файлі (конфіги).
Для його установки потрібно виконати команду:
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Встановимо права на виконання бінарного файлу:
$ sudo chmod +x /usr/local/bin/docker-compose
Перевіримо його версію:
$ docker-compose --version
Якщо все зроблено правильно, то можна приступити до запуску нашого оточення для розробки.
Запускаємо оточення
Спершу клонуємо репозитарій, який містить всі необхідні файли конфігурацій.
$ git clone https://github.com/workground/docker-config.git
Перейдемо в робочий каталог:
$ cd docker-config
У файлі docker-compose.yml можна встановити логін і пароль для mysqlтакож там міститься багато інших налаштувань — їх можна залишити за замовчуванням. Далі виконаємо команду, яка зробить все необхідне для запуску LAMP оточення:
$ docker-compose up
Після першого запуску потрібно буде почекати поки завантажаться всі необхідні образи і встановляться всі необхідні пакети. Після того, як процес завершиться, потрібно записати в каталог /docker-config/www файл bitrixsetup.php і можна починати установку bitrix.
Щоб дізнатися ip адресу, на якому працює web-сервер, потрібно виконати команду:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' test_apache_1
Test_apache_1 — це назва контейнера, в якому працює апач. У вас він може відрізнятись і дізнатися його можна, виконавши в терміналі команду docker ps. Перейдемо на сторінку установки: http://127.22.0.4:8000/bitrixsetup.php. Процес установки стандартний, тільки зауважу, що адреса сервера mysql потрібно встановити — mysql. Ця назва контейнера в нашому файлі конфігурації.
Порівняння BitrixVM і Docker
На сайті 1c-bitrix в розділі «Завантажити» є вже готові образи для віртуальних машин в різних форматах. Нижче на сторінці є вже готовий скрипт bitrix-env.sh для установки на чисту систему, який дозволяє за лічені хвилини встановити і налаштувати оточення для CentOS 6, CentOS 7 з потрібним набором програм.
Якщо взяти Docker, то він більше схожий на конструктор, в якому з окремих блоків можна зібрати і налаштувати потрібний набір програм. Наприклад, можна завантажити чистий образ CentOS і всередині нього запустити скрипт bitrix-env.sh, який встановить і налаштує набір програм всередині ізольованого оточення в контейнері. Він буде працювати в Docker-контейнері.
Docker потрібно розглядати як альтернативу віртуальній машині, але на відміну від неї тут можна розподіляти програми по різних контейнерах, що дозволяє при оновленні уникнути конфліктів. Наприклад, якщо потрібно оновити версію php, це може викликати конфлікт залежностей. А якщо використовувати Docker, буде досить під’єднати новий контейнер і всередину нього встановити нову версію php.
З цього випливає, що Docker швидше є корисним доповненням для оточення bitrixVM, яке потрібно використовувати в залежності від поставлених завдань. І порівнювати їх не зовсім коректно.
Основні переваги Docker
-
Простота використання. Заснована на контейнерах Docker-платформа дозволить легко перенести корисне навантаження. Docker-контейнери можуть працювати як на реальній локальній машині або машині в датацентрі, так і на віртуальній машині в хмарі. Портивність і легка природа Docker дозволяє легко і динамічно управляти навантаженням. Можна використовувати Docker, щоб розгорнути або погасити ваш додаток або сервіси. Швидкість Docker дозволяє робити це майже в режимі реального часу.
-
Швидкість роботи. Docker-контейнери легковагі і швидкі. Можна створити і запустити Docker-контейнер за секунди, на відміну від віртуальних машин, які кожного разу запускають повноцінну віртуальну ОС.
-
Модульність і масштабованість. Docker дозволяє легко розділяти функціональність програми в окремі контейнери. Наприклад, можна запускати базу даних Postgres в одному контейнері, сховище Redis в іншому, в той час як додаток Node.js знаходиться в третьому. Це дозволить легко масштабувати і оновлювати компоненти програми незалежно один від одного.
Недоліки використання docker
-
Безпека. Проблема полягає в тому, що контейнеризовані додатки випускає хто завгодно. І серед розробників завжди знайдуться «погані хлопці». Якщо, наприклад, ви або ваші співробітники досить ліниві, щоб запустити на сервері перший-ліпший контейнер, то цілком можете отримати трояна.
-
Складність першої настройки. Для використання Docker потрібно встановлювати додаткові програми, такі як Docker і Docker-compose, що не завжди проходить без проблем. Також потрібно вивчити велику кількість команд для налаштування і запуску контейнерів.
-
Робота тільки в Linux. Для роботи в таких ОС як Windows і MacOS потрібно встановлювати віртуальну машину, в яку потрібно вже встановити docker.
Висновок
У цій статті ми розглянули установку і запуск оточення Docker для роботи з bitrix, і це тільки невелика частина можливостей що надає Docker. Контейнеризація Docker має свої переваги і недоліки. У будь-якому випадку, перевага використання контейнерів повинна вирішуватися виходячи з поставленого завдання. Для деяких завдань без Docker не обійтися, а для інших — він просто зайвий.
Ми зв'яжемось з Вами протягом 10 хвилин