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

Непрерывная интеграция и развёртывание (CI/CD) в GitLab

GitLab logo

В прошлом месяце мы, наконец, переехали со своей старой CI/CD (continuous integration and delivery) системы домашней выделки на GitLab Community Edition, и этот факт делает моё лицо счастливым до сих пор. Всё-таки так приятно, когда и репозитории, и коммиты, и компиляция, и тесты, и результаты всего этого, и даже так кнопка «Одобрям-с», которая отправляет релиз-кандидата в репозиторий одобренных релизов — когда всё это лежит в одном месте и прекрасно интегрируется друг с другом.

От чего я действительно фанатею в Гитлабе, так это насколько легко в нём всё это настраивать. Настолько просто, что сегодня мы настроим полнофункциональную CI/CD систему от начала и до конца. От установки GitLab и до выкатывания релиза после успешных тестов.

Ну что, будем начинать?

Читать далее Непрерывная интеграция и развёртывание (CI/CD) в GitLab

Как перенести 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

Отказоустойчивый Kafka кластер в Docker

Kafka кластер в Docker

До сегодняшнего дня мы запускали Apache Kafka на одном хосте, в кластере из одного брокера и всего с одним монолитным топиком. Для платформы, которая проектировалась под распределенные сценарии, это, наверное, печально. Поэтому сегодня мы станем на шаг ближе к представлению о том, как Kafka работает в нагруженных системах.

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

Читать далее Отказоустойчивый Kafka кластер в Docker