Автор: Михаил Шишло
В один прекрасный день, примерно в обед, ко мне подошел тех. лид, и сказал: «Вот тебе, Миша, доступ по ssh на линуксовую машину, нужно развернуть сайт на wordpress к концу дня». Как бы так сказать... Настройка серверов – это не совсем мой конек, а до этого момента с wordpress я вообще только как читатель блогов сталкивался, поэтому я отнесся с некоторой долей скептицизма к поставленным к задаче срокам.
Однако в моей памяти на долю секунду всплыло слово docker. О данном инструменте я услышал впервые на одном из докладов митапа 4front. В нем речь велась о том, что с помощью докера можно создать рабочее окружение буквально за несколько минут. То, что нужно. И это еще раз подтверждает тот факт, что посещение митапов и конференций – это не всегда пустая трата времени.
Итак, с чего начать. Конечно, с установки докера. Стоит отметить, что установка идёт на чистую, только установленную версию ubuntu server v14. И тут нас ждет первый сюрприз. Для установки последней версии докера на ubuntu одного apt-get не достаточно. Следует выполнить следующую магию:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" sudo apt-get update sudo apt-get install lxc-docker
Отлично, docker установлен, можно качать образы. Для wordpress, как пить дать, нужна база. Для нашего сайта достаточно mysql. Поэтому качаем два образа один для mysql и второй для wordpress – это следующие 2 команды:
sudo docker pull mysql sudo docker pull wordpress
Супер, теперь осталось запустить контейнера для mysql и для wordpress – для этого предназначены такие команды:
sudo docker run --name wp-db -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql
//запускает контейнер для mysql
sudo docker run --name web --link wp-db:mysql -p 80:80 -d wordpress
// запускает контейнер для wordpress
Заходим по 80 порту и нас там ждет скрин создания wordpress сайта.
Вот так вот. Т.е если пренебречь танцами с бубном для установки докера на ubuntu, то, чтобы создать рабочее окружение, потребовалось выполнить всего 5 команд. Пять, Карл!!!
apt-get install docker.io docker pull mysql docker pull wordpress docker run --name wp-db -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql docker run --name web --link wp-db:mysql -p 80:80 -d wordpress
Такс, нам надо закачать исходники на контейнер с установленным wordpress. Установливать git в контейнер желания нету, поэтому решаю сделать shared папку с хостовой машиной. И тут ждет сюрприз номер 2: менять параметры в уже созданных контейнерах не получится. Поэтому приходится удалять контейнеры и заново их создавать, добавляя следующую опцию для shared папки:
docker run --name wp-db -e MYSQL_ROOT_PASSWORD=mysecretpassword -v /home/ubuntu/src:/external/src
А стартует ли докер автоматом после перезагрузки? Нет, конечно. Ну, удалять и создавать контейнеры мы уже умеем… Добавляем еще одну опцию для автоматического рестарта:
docker run --name wp-db -e MYSQL_ROOT_PASSWORD=mysecretpassword --restart=always
Итак, окончательный вид команд для контейнеров такой:
docker run --name wp-db -e MYSQL_ROOT_PASSWORD=mysecretpassword --restart=always -v /home/ubuntu/src:/external/src -d mysql
docker run --name web --link wp-db:mysql -p 80:80 --restart=always -v /home/ubuntu/src:/external/src -d wordpress
Наступает еще один не менее прекрасный день. В обед подходит снова тех. лид и говорит: «Нужно нам тестовое окружение для проекта на wordpress». Я ему отвечаю: «Ты не успеешь дойти до своего стола, как уже будет готово!» – всего-то 2 команды выполнить.
И, действительно, 2 команды выполнены и еще 2 докер контейнера запущены на машине. И тут ждет сюрприз номер 3, самый неприятный, и я б сказал просто отвратительный.
4 запущенных докер контейнера просто отъели всю оперативную память (768 Mb) так, что по ssh попасть на сервер не представлялось возможным. А так как для тестовых контейнейров так же была установлена опция автоматического запуска, попасть на машину так и не удалось даже после перезрузки. Пришлось заново создавать сервер, благо на amazon это занимает не так много времени.
Чтобы обойти это проблему, было решено запустить один контейнер c mysql и там уже создать 2 базы – одну для продакшн сайта, а вторую для тестового. А также был выставлен memory limit для тестовогого сайта в 256Mb. Для этого есть опция:
docker run --name test-web --link wp-test-db:mysql -p 80:80 --restart=always -v /home/ubuntu/src:/external/src -d wordpress -m 256M
Что можно сказать в качестве вывода?
- Если Вам нужно развернуть промышленную среду, а у Вас мало времени или Вы не умеете этого делать, то используйте докер.
- Если Вам нужно одинаковую тестовую или девелопмент среду раздать всем членам команды, то используйете докер.
- Если Вы хотите создать образ своего окружения, чтобы потом была возможность перенести на другой физичиский сервер, то используйте докер.
- Если у Вас на сервере развернуто несколько независимых друг от друга систем, у которых входы и выходы должны быть под контролем для того, чтобы обеспечить их безопасность, используйте докер.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.