Архив метки: container

Как перенести WordPress сайт в Docker

WordPress в Docker

Ни один из моих блогов на WordPress не установлен в Docker контейнерах, и об этом я жалею с самого момента их создания. Мне хватило всего пары недель, чтобы забыть, как именно настроены сервера, зачем на них включена та или иная фича, и теперь во время каждого апдэйда приходится молиться всем известным богам программирования, потому что если что-то пойдёт не так, я уже без понятия, как это разруливать. Даже просто перенести сайт на новый сервер было бы подвигом.

С Докер контейнерами таких проблем бы не было. Взял Dockerfile или docker-compose.yml, взял volumes с данными, перенёс на другую машину, и всё. Можно было бы даже запустить реплики блогов дома, чтобы на них экспериментировать, проверять апдэйты и надругивать новые фичи.

Но не всё потеряно. Прогрессирующее старпёрство мне уже не позволит просто так вот взять и выкатить Docker в свой «продакшен», но создать локальную докеризированную реплику одного из блогов определённо можно. А там, если всё пойдёт нормально, можно и в большой интернет. Читать далее Как перенести WordPress сайт в Docker

Локальный Docker реестр в Swarm

container stackВ одном из прошлых постов про проверку состояния контейнеров в Docker ближе к концу поста мне удалось запустить Swarm сервис из локально собранного образа. Ну как удалось.. Собрал и запустил. Но что меня удивило, Docker в Swarm режиме мне это позволил. Всё-таки в нём могло быть больше, чем один хост, а образ я создавал только на первом. Что если бы Swarm запустил сервис на ноде, где образа не было? Или отмасштабировал? Он же не стал бы автоматически копировать образы между хостами, так ведь? Или всё-таки стал бы?

Попробуем-ка сегодня мы отмасштабировать сервис на базе кастомного образа и посмотрим, получится ли. Спойлер: без локального реестра образов получится так себе.

Читать далее Локальный Docker реестр в Swarm

Что же всё-таки такое kubernetes

kubernetesKubernetes (он же K8s) — это ещё одна инструментина для управления контейнерами в кластере. Она решает, в какой части кластера контейнер будет запущен, следит, чтобы его запрошенная конфигурация («запущен», «пять реплик») выполнялась, чтобы у контейнера была сеть и айпишка, настроен доступ извне (если нужно), обновления приходили в нужном порядке, и т.п.

Изначально Kubernetes разрабатывался Гуглом, но те передали его в open source, так что теперь K8s свободен, как бесплатное пиво. Читать далее Что же всё-таки такое kubernetes

Проверка состояния контейнера в Docker

Проверка состояния контейнераКаким-то непонятным образом я пропустил новость о том, что начиная с версии 1.12 Docker контейнерам можно навешивать проверку состояния. И речь тут идёт не о проверке, запущен ли ещё контейнер, а о том, делает ли он всё ещё то, ради чего создавался. Например, мы можем проверять, отзывается ли веб-сервер внутри контейнера на входящие запросы, вменяемое ли количество памяти он использует, встречаются ли в логах фразы вроде «epic fail!!!»… Много чего можно проверить, ведь проверка делается через запуск какого-нибудь стороннего скрипта или приложения, а её результат зависит от кода, с которым это приложение завершилось.

В обычном режиме контейнер, последние несколько проверок которого оказались «так себе», получит атрибут «unhealthy», в Docker events появится соответствующая запись (health_status), и на этом история закончится. Но если речь идёт о Swarm режиме, то проблемный контейнер без лишних разговоров усыпят и автоматически запустят новый. Вот так жестоко. Читать далее Проверка состояния контейнера в Docker

docker-compose для Swarm: docker stack

docker stack

Допустим, вы уже создали свой новенький Docker кластер и морально готовы заполонить своими приложениями. Такой вопрос: как именно вы будете это делать? Не руками ведь, через docker service create, правда? Кластер же большой, а приложение, которому он потребовался, явно будет состоять не из одного сервиса.

В обычном Docker была такая прекрасная штука как docker-compose, с которой можно было описать все контейнеры и их параметры в одном docker-compose.yml файле и потом запустить всё одним махом через docker-compose up. Вот бы можно было сделать так и в кластере.

Оказывается, можно. Читать далее docker-compose для Swarm: docker stack

Краткое введение в Docker Swarm mode

docker swarmDocker — прекрасен. С ним можно упаковать приложение по контейнерам, забросить их на случайный хост, и всё будет просто работать. Но на одном хосте особо не отмасштабируешься. Да и если хост прикажет долго жить, всё приложение отправится на тот свет вместе с ним. Конечно, для масштабирования можно завести сразу несколько хостов, объединить их при помощи overlay сети, так что и места больше будет, и возможность для контейнеров общаться останется.

Но опять же, как всем этим управлять? Хосты всё ещё могут отмирать. Как быстро определить, какой именно? Какие контейнеры на нём были? Куда теперь их переносить?

Начиная с версии 1.12.0 Docker может работать в режиме Swarm («Рой». В старых версиях был просто Docker Swarm, но тот работал по-другому), и потому способен решать все эти проблемы самостоятельно. Читать далее Краткое введение в Docker Swarm mode

Как хранить данные в Docker volumes

docker volumes

Если полистать какой-нибудь Докер гайдлайн, то скорее всего в нём скажут, что контейнеры должны быть маленькими, с одним процессом, легко удаляемыми и так же легко заменяемыми на более новый. Прекрасная концепция. О чём в гайдлайнах пишут немного реже, так это что же делать с данными внутри таких контейнеров. Я же не могу легко удалить тот же mysql контейнер и заменить его на новый, но пустой внутри. Он ведь мне только ради данных и нужен был.

Но, оказывается, проблема вполне решаема. Docker volumes, которые существовали в Докере с момента сотворения мира, начиная с версии 1.8 получили обновлённый API, и теперь справляются с хранением данных не только технически, но и эстетически прекрасно.

Читать далее Как хранить данные в Docker volumes

Как создать overlay сеть без Docker Swarm

В Docker, среди его разнообразия типов сетей, есть один особенно интересный — overlay. Overlay сеть может охватывать сразу несколько хостов таким образом, что, например, контейнер веб-приложения на хосте 1 может общаться по имени с контейнером базы данных на хосте 2, как если бы они были на одной машине.

Но просто так создать такую сеть нельзя. Докер-хосты ведь могут добавляться и исчезать, и непонятно, как им находить друг друга, кто будет хранить список участвующих хостов, и т. п. Нужен какой-то сторонний компонент, который будет этой координацией заниматься.

Конечно, Докер можно запустить в Swarm режиме, и тогда проблема исчезнет сама собой. Но и без Swarm, как оказалось, это очень легко устроить.

Читать далее Как создать overlay сеть без Docker Swarm

Краткое введение в Windows контейнеры

Windows контейнеры

Свершилось! То ли молитвы помогли, то ли жертвоприношения, но теперь можно запускать Docker контейнеры с Windows внутри. Прекрасная новость пришла одновременно с релизом Windows Server 2016. И речь не идёт о какой-нибудь хитро-спрятанной виртуальной машине, или эмуляции Windows на Linux ядре — запускается настоящая Windows в настоящем Docker, с работающими Dockerfile, docker-compose и прочими docker-приблудами.
Читать далее Краткое введение в Windows контейнеры

Как использовать ZeroMQ с Docker

Как использовать ZeroMQ с Docker

В прошлый раз мы написали аж три примера клиент-сервер Node.js приложений, в которых компоненты общаются между собой через ZeroMQ. Примеры простые, показывают основную идею, но работают всё-таки на localhost, и поэтому слабо пересекаются с реальностью, в которой ZeroMQ обычно работает. И тогда я подумал, а почему бы не раскидать клиента и сервера по Docker-контейнерам? В задачу добавятся новые вопросы, она станет больше похожа на правду, и главное, это отличный шанс откатать сразу несколько инструментов, которые обычно используются вместе.

Итак, задача на сегодня: взять fire-and-forget паттерн из прошлого поста и доработать его до контейнерного приложения. Читать далее Как использовать ZeroMQ с Docker