Для чого тестеру може знадобитися свій інвайронмент, якщо можна просто почекати, доки код виллють на тестовий сервер?
Мені це питання задають постійно. І відповідь, як завжди, залежить від контексту.
Щось ризиковане треба перевірити у середовищі, яке не шкода; для чогось потрібні особливі налаштування, недоступні на тестовому сервері; а хтось, як я, хоче тестити ще у девелоперській гілці, бо не може дочекатися, доки новий код нарешті дорев’ювлять і замерджать в develop.
В епоху віртуальних машин існує кілька загальних інструментів, що дозволяють запустити собі власне тестове середовище, та заразом вижерти зайву оперативку та довантажити процесор вашого комп’ютера до "прийнятних" 104%.
Як розгорнути два зв’язаних docker-контейнера: веб-сервер із Вашим проектом та базу, подивимось на прикладі PHP та MySQL.
Локально у мене Ubuntu 15.04. За інструкціями із встановлення docker на інших системах звертайтеся до http://docs.docker.com/engine/installation/
Для початку, треба поставити docker-engine. Він є у стандартних репах, але якщо щось не виходить - уважно читайте інструкції.
$
sudo apt-get install docker-engine
Для ще більшої
гнучкості (бо у 21 столітті ніколи не
буває забагато гнучкості), ставимо
docker-compose - додаток для документованого
керування кількома віртуалками. Він
ставиться через менеджер пакетів для
Python'а - pip:
$
sudo pip install docker-compose
Структура
Готові файли
на гітхабі
https://github.com/oburdin/docker4webtesting/tree/myproject
Уся структура
тек та файлів для прикладу:
.
├──
docker-compose.yml
├──
drupal8
│
└── Dockerfile
├──
myproject
│
└── index.html
└──
mysql
└── Dockerfile
Зміст
docker-compose.yml (усі налаштування обох
контейнерів перенесено у цей єдиний
файл):
web:
build: ./drupal8
hostname: drupal8ready
environment:
- TERM=xterm # to enable nano editor
ports:
- "8000:80" # host port : container's port
links:
- db
volumes:
- ./myproject:/var/www/html
# host folder : container's folder
db:
build: ./mysql
environment:
-
MYSQL_ROOT_PASSWORD=mysqlrootverysecretpassword
- MYSQL_USER=mruser
- MYSQL_PASSWORD=mruserpass
- MYSQL_DATABASE=drupal
Зміст
Dockerfile'у з Drupal8 взято із побудови
оригінального образу тут, видаливши
лише останній крок із завантаженням
самого друпалу, бо ми будемо використовувати
свій власний проект:
#
Dockerfile from
https://github.com/docker-library/drupal/blob/58c575506a269f099b5578b76249101763e31ae7/8/Dockerfile
#
Drupal-8-Ready!
#
from https://www.drupal.org/requirements/php#drupalversions
FROM
php:5.6-apache
RUN
a2enmod rewrite
#
install the PHP extensions we need
RUN
apt-get update && apt-get install -y libpng12-dev libjpeg-dev
libpq-dev \
&&
rm -rf /var/lib/apt/lists/* \
&&
docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr
\
&&
docker-php-ext-install gd mbstring opcache pdo pdo_mysql pdo_pgsql
zip
#
set recommended PHP.ini settings
#
see https://secure.php.net/manual/en/opcache.installation.php
RUN
{ \
echo
'opcache.memory_consumption=128'; \
echo
'opcache.interned_strings_buffer=8'; \
echo
'opcache.max_accelerated_files=4000'; \
echo
'opcache.revalidate_freq=60'; \
echo
'opcache.fast_shutdown=1'; \
echo
'opcache.enable_cli=1'; \
}
> /usr/local/etc/php/conf.d/opcache-recommended.ini
WORKDIR
/var/www/html
Для контейнера
із mysql зміст елеґантно мізерний адже усі налаштування робитиме
docker-compose
(оригінальний образ із поясненнями):
FROM
mysql:5
Запускаємо
Переконайтеся,
що демон докера працює, чи запустіть
його самі:
$
sudo docker daemon
Тепер у теці
із docker-compose.yml збираємо наш образ:
$
sudo docker-compose build
Тут усе має
завантажуватись-виконуватись, виглядає
магічно і приголомшливо.
Дуже говірка
команда, пише в консоль усе, що треба, і
що не треба. Якщо щось потім іде не так,
шукати помилку важкенько у тому потоці
непотребу.
Повторний
запуск не буде усе завантажувати, якщо
ви не змінюєте docker-файли. Якщо не було
змін, безпосередньо рядок при збірці
не виконується, а його результат береться
із кеша.
Запуск:
$
sudo docker-compose up
Робота
Відповідно
до наших налаштувань у docker-compose.yml , наш
веб-контейнер має бути доступним у
браузері за адресою: http://localhost:8000
За цим URL'ом
веб-сервер web контейнера має видає
зміст файлу myproject/index.html
Якщо ви
покладете в цю теку свій проект, або
замаунтете іншу локальну теку через
docker-compose.yml - він має відкритись!
(Перевірено на Drupal 8 та Magento 1.12)
Happy dockerizing!
Наступним
кроком має бути зручне керування базами
даних. Але що таке "зручне", я ще не
вигадав :-)
Немає коментарів:
Дописати коментар