Доброе утро или «Как поднять WordPress блог внутри Docker на DogitalOcean?»
Ну, для начала, доброе утро!
Просыпаюсь сегодня, смотрю на часы и понимаю, что слишком рано вчера лег спать. Ну лежу я, значит, такой, плюю в потолок и думаю: код писать рано, мозги не проснулись еще, болтать не с кем (НОРМАЛЬНЫЕ ЛЮДИ ЕЩЕ СПЯТ), а в подписках на YouTube нет ни одного интересного ролика. Думаю… Диалоги вести не с кем, значит нужно «помоноложить». А где моноложить? Опять проблема. Ну, значит пришло, наконец, время поднять еще один нудный блог. Сказано — сделано!
Долго думать о чем написать не пришлось, идея подала идею, так что под катом разместилась статья о том, как поднять свой блог, да чтоб повеселей…
Итак, задачу поставили, поднять личный блог. Далее что требуется? Выбрать движок, хостинг и прочие скучные вещи.
Хоститься я решил на приевшемся уже DigitalOcean.
Логинимся, нажимаем «Create» и видим такую картину:

ТАК ПРОСТО? Но это ведь не интересно!
Постойте… «Docker on Ubuntu 14.04». Вот это интереснее. Давно ведь смотрел в его сторону! Выбираем, заполняем оставшиеся поля и нажимаем «Create Droplet». Сразу скажу, я выбрал минимальный план за 5$.
После того, как наш Droplet создался, коннектимся к серверу и начинаем эксперименты.
Первым делом я решил проверить версию Docker’а
docker version
Client version: 1.2.0
Client API version: 1.14
Go version (client): go1.3.1
Git commit (client): fa7b24f
OS/Arch (client): linux/amd64
Server version: 1.2.0
Server API version: 1.14
Go version (server): go1.3.1
Git commit (server): fa7b24f
Ага, как минимум это означает, что нас не обманули и Docker действительно предустановлен. Затем следовало выбрать движок для блога. Я решил не заморачиваться и выбрать один отсюда. Делается это в терминале так:
docker search blog

Выбор у меня оказался простым. Я просто взял единственный блог, помеченный, как OFFICIAL. Выбрав WordPress вспоминаем, что для работы ему нужна база данных. Тащим себе WordPress вместе с MySQL (latest означает, что нам нужна только последняя версия)
docker pull mysql:latest
docker pull wordpress:latest
Проверим, что мы накачали
docker images
Все верно, теперь мы можем попробовать запустить эти образы
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
Сразу оговорюсь, если вы выбрали (как и я) минимальный план DigitalOcean, то есть большая вероятность того, что база у вас не поднимется. Как это проверить?
docker ps -a
Смотрим на колонку STATUS. Вы должны увидеть там аптайм контейнера. Иначе там будет что-то вроде «docker Exited (1) 2 seconds ago».
Итак, наш контейнер не поднялся, как узнать причину? А очень просто
docker logs <id нашего контейнера, указанное в первом столбце выше>
Видим нечто такое:
[ERROR] Plugin 'InnoDB' init function returned error. 131005
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB 131005
[ERROR] Aborting
А вот и вышла боком нам экономия на DigitalOcean. Как исправить? Добавить Swap раздел нашему дроплету.
Замечательно, теперь все должно быть хорошо. Удалим контейнер, который не удалось поднять прошлый раз
docker rm <id контейнера>
Теперь пробуем поднять базу вновь
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
Проверим, как там наша база на этот раз
docker ps -a
В статусе заветное «Up 3 seconds», ура! Теперь поднимаем WordPress
docker run --name some-wordpress --link some-mysql:mysql -p 8080:80 -d wordpress
Теперь, попробовав снова вывести список контейнеров, мы увидим и контейнер some-wordpress.
Поздравляю! Теперь заходим на <Droplet IP>:8080 и видим приветственную страницу WordPress.
Теперь можно со спокойной совестью встать с постели и идти пить чай с печеньками :3