Установка и настройка docker swarm centos 7

Обновлено: 04.07.2024

В этом руководстве мы рассмотрим, как установить Docker CE на CentOS 7, и изучим основные концепции и команды Docker.

Подготовка

Перед тем, как приступить к изучению этого руководства, убедитесь, что выполнены следующие предварительные условия:

  • Сервер CentOS 7
  • Вы вошли в систему как пользователь без полномочий root с привилегиями sudo. Вы ознакомитесь с этим руководством о том, как создать нового пользователя sudo.

Установите Docker на CentOS

Чтобы установить Docker на сервер CentOS 7, выполните следующие действия:

Начните с обновления системных пакетов и установки необходимых зависимостей:

Затем выполните следующую команду, которая добавит стабильный репозиторий Docker в вашу систему:

Теперь, когда репозиторий Docker включен, установите последнюю версию Docker CE (Community Edition) с помощью yum, набрав:

После установки пакета Docker запустите демон Docker и включите его автоматический запуск во время загрузки:

Чтобы убедиться, что служба Docker запущена, введите:

Результат должен выглядеть примерно так:

Выполнение команды Docker без Sudo

По умолчанию для управления Docker требуются права администратора. Если вы хотите запускать команды Docker от имени пользователя без полномочий root без добавления sudo вам необходимо добавить своего пользователя в группу docker, которая создается во время установки пакета Docker CE. Вы можете сделать это, набрав:

Выйдите из системы и войдите снова, чтобы членство в группе обновилось.

Результат должен выглядеть следующим образом:

Интерфейс командной строки Docker

Теперь, когда у нас есть работающая установка Docker, давайте рассмотрим базовый синтаксис интерфейса командной строки docker.

Командная строка docker имеет следующий вид:

Вы можете перечислить все доступные команды, набрав docker без параметров:

Если вам нужна дополнительная помощь по любой [subcommand] , просто введите:

Образы Docker

Для поиска изображения в репозитории Docker Hub просто используйте подкоманду search . Например, чтобы найти образ CentOS, запустите:

Результат должен выглядеть следующим образом:

Если мы хотим загрузить официальную сборку CentOS 7, мы можем сделать это с помощью подкоманды image pull :

В зависимости от скорости вашего Интернета загрузка может занять несколько секунд или несколько минут. После загрузки изображения мы можем перечислить изображения с помощью:

Результат должен выглядеть примерно так:

Если по какой-то причине вы хотите удалить изображение, вы можете сделать это с помощью подкоманды image rm [image_name] :

Контейнеры Docker

Экземпляр изображения называется контейнером. Контейнер представляет среду выполнения для отдельного приложения, процесса или службы.

Мы можем запускать, останавливать, удалять и управлять контейнером с помощью подкоманды docker container .

Следующая команда запустит контейнер Docker на основе образа CentoOS. Если у вас нет образа локально, он сначала загрузит его:

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

-it позволяет нам взаимодействовать с контейнером через командную строку. Чтобы запустить интерактивный контейнер, введите:

Как видно из выходных данных, после запуска контейнера командная строка изменяется, что означает, что теперь вы работаете изнутри контейнера :

Если у вас нет работающих контейнеров, вывод будет пустым.

Чтобы просмотреть как работающие, так и остановленные контейнеры, передайте ему переключатель -a :

Чтобы удалить один или несколько контейнеров, просто скопируйте идентификатор контейнера (или идентификаторы) сверху и вставьте их после подкоманды container rm :

Выводы

Вы узнали, как установить Docker на свой компьютер с CentOS 7, а также как загружать образы Docker и управлять контейнерами Docker. Вы также можете прочитать о Docker Compose , который позволяет вам определять и запускать многоконтейнерные приложения Docker.

Этот учебник едва затрагивает экосистему Docker. В некоторых из наших следующих статей мы продолжим углубляться в другие аспекты Docker. Чтобы узнать больше о Docker, ознакомьтесь с официальной документацией Docker .

Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.

Это будет в основном техническая статья, так как постоянно хожу за этой информацией в поиск, а сейчас решил упростить себе задачу. Я подробно расскажу, как установить систему контейнеризации docker и docker-compose на CentOS 7 и 8. Тема распространенная и популярная, регулярно приходится устанавливать, настраивать и запускать контейнеры.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на . Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.


Введение

Думаю, не нужно каких-то подробных пояснений на тему того, что такое Докер и зачем он нужен. Сейчас этот продукт у всех на слуху. В частности, он используется по дефолту в популярном кластерном продукте по автоматическому развертыванию и управлению контейнерами - Kubernetes. По сути он стал стандартом отрасли, хотя поддерживает работу не только на базе docker, но по факту в основном используют его. Я это все к тому, что docker с нами надолго :)

Пару тройку лет назад считалось, что docker лучше всего разворачивать на Ubuntu. С Centos были некоторые проблемы, но где-то в середине развития 7-й ветки они все были решены. Подробности я уже не помню, но по факту сейчас нет принципиальной разницы. Я запускаю контейнеры как на ubuntu, так и на centos. Обычно разработчики просят убунту, так как она им привычна. Лично я сам предпочитаю Centos. Там еще пока нет рекламы в syslog.

Установка Docker на Centos 8

Начинаем установку системы управления контейнерами Docker на Centos 8. Первыми делом подключаем официальный репозиторий.

Система проинформирует, что репозиторий успешно подключен. Сморим, какие версии докера доступны для установки.

Подключение официального репозитория

Устанавливаем Docker на Centos 8.

Установка docker на centos 8

Проверим, что Docker нормально запустился. И сразу добавим его в автозагрузку.

Проверка работы

Все нормально, Docker успешно стартовал. Проверим его работу, запустив какой-нибудь контейнер. Например, официальный образ nginx. Сначала загрузим его.

Загрузка образа nginx

Проверяем список образов.

Теперь запускаем контейнер на основе этого образа и сразу включаем ему автозапуск после старта системы. Частенько разработчики забывают это делать и потом, после ребута сервера, контейнеры не стартуют.

Смотрим список запущенных контейнеров.

Все в порядке, контейнер слушает 80-й порт. Посмотрим список открытых портов в системе.

Проверка работы контейнера

Несмотря на то, что указан ipv6 адрес, контейнер nginx запущен в том числе и на ipv4. Можете зайти браузером на страницу с ip адресом сервера и увидите там стартовую страницу nginx. Причем, даже если у вас запущен firewalld, docker автоматически добавит разрешающее правило для 80-го порта.

На этом по установке Docker на Centos 8 все. Мы настроили и проверили работу. Собственно, даже на таком простом примере наглядно видно, в чем удобство докера, хотя тут он сработал аналогично пакетному менеджеру. Но если у вас что-то посложнее с кучей зависимостей, поставится оно так же быстро и легко.

Установка Docker в Centos 7

В Centos 7 Docker устанавливается так же штатно, через официальный репозиторий. Прежде чем его подключить, убедитесь, что у вас установлен пакет yum-utils.

После этого подключаем репозиторий докера.

Теперь можно приступить к установке Docker на Centos 7.

Установка Docker в Centos 7

Запускаем докер и добавляем в автозагрузку.

Запускаем контейнер c nginx для теста.

Убеждаемся, что все запущено и корректно работает.

Проверка docker

На этом установка Docker на Centos 7 закончена. Для верности можете в браузере проверить, что nginx запущен и работает.

Установка docker-compose на Centos

Устанавливаем docker-compose на Centos.

Делаем файл исполняемым и на всякий случай добавляем символьную ссылку еще и в /usr/bin.

Смотрим, все ли корректно установилось.

Для теста можете запустить что-то с помощью docker-compose. Например, установить WordPress. Для этого создаем файл docker-compose.yaml следующего содержания.

После этого запускаем проект.

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

Значит у вас запущен firewalld. Он не дает нормально работать dns в докере. Вам необходимо отключить firewalld и перезапустить докер.

После этого запускайте docker-compose еще раз и проверяйте работу. Должно получиться примерно так.

Установка docker-compose на centos

Запуск wordpress через docker-compose

Docker-compose успешно установлен и проверен на Centos. Можно использовать по назначению.

Docker Swarm – это средство для развертывания кластера хостов Docker. Вы можете использовать его для быстрого развертывания кластера хостов на вашем локальном компьютере, либо на поддерживаемых облачных платформах.

До Docker 1.12 для настройки и развертывания кластера Docker и для обнаружения сервисов необходимо было использовать внешнее хранилище типа «ключ-значение», например, etcd или Consul. Однако благодаря Docker 1.12 внешние средства обнаружения больше не нужны, поскольку Docker из коробки поставляется с хранилищем «ключ-значение».

Данный мануал поможет развернуть кластер машин Docker с помощью Swarm. Каждая нода Docker в кластере будет использовать CentOS 7. Конечно, вы можете запустить кластер из десятков, сотен или тысяч хостов Docker, но в данном мануале для демонстрации достаточно создать кластер из одной главной и двух рабочих нод. По завершении этого мануала вы сможете с легкостью добавлять в кластер новые ноды.

Требования

  • Локальная машина с предустановленной платформой Docker. Локальная машина может использовать один из дистрибутивов Linux или же Windows или macOS. Установить Docker на Windows или macOS вам поможет официальный инсталлятор. Если на локальной машине используется CentOS 7, установить Docker вам поможет мануал Установка и использование Docker в CentOS 7.
  • API-токен хостинга (read-write).
  • Docker Machine на локальном компьютере. Для Windows и macOS официальный инсталлятор по умолчанию устанавливает Docker Machine вместе с Docker. Чтобы установить Docker Machine на локальную машину CentOS 7, читайте мануал Управление удалёнными хостами Docker с помощью Docker Machine в CentOS 7.

1: Оркестровка нод

Создайте несколько нод Docker для кластера. Чтобы следовать примерам в мануале, вам понадобится 3 ноды.

Когда машины будут созданы, убедитесь, что все прошло успешно:

Команда вернет список доступных нод:

NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
node-1 - my-provider Running tcp://111.111.111.111:2376 v1.12.2
node-2 - my-provider Running tcp://111.111.111.112:2376 v1.12.2
node-3 - my-provider Running tcp://111.111.222.222:2376 v1.12.2

На каждой ноде должен быть Docker 1.12.x. пока что ноды еще не собраны в кластер. Далее нужно настроить правила брандмауэра, которые заставят ноды функционировать как единый кластер, выбрать одну из нод и сделать ее менеджером Docker Swarm и настроить остальные ноды как рабочие.

2: Настройка брандмауэра

Кластер должен иметь хотя бы одну ноду, которая работает в качестве менеджера.

Примечание: Для среды производства рекомендуется три менеджера.

Для этой настройки выделите первую ноду и сделайте ее менеджером Swarm. Другие две ноды станут рабочими.

На нодах, которые будут частью кластера, нужно открыть определенные сетевые порты. Для этого нужно изменить настройки брандмауэра. Поскольку для выполнения этой задачи можно использовать три разных приложения брандмауэра, все необходимые команды описаны в отдельной статье, Настройка брандмауэра Linux для Docker Swarm в CentOS 7. Повторите этот мануал и на двух рабочих нодах.

3: Инициализация менеджера кластера

Предположим, node-1 будет менеджером кластера; войдите на ноду с локального компьютера:

docker-machine ssh node-1

Командная строка изменится и вы увидите, что подключились к нужной ноде. Чтобы сделать ноду менеджером Swarm, введите:

docker swarm init --advertise-addr node_ip_address

Примечание: Вместо node_ip_address укажите IP-адрес вашей ноды.

Вы увидите такой вывод:

Swarm initialized: current node (2n4y8bwu6s7c1kwdryd945zv1) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-57m6beujakwyx0t2j5mglpi9juf8czapp8kf2tj3gudkgjkoda-0eg0x08w7uvyxiacmmx0zv67o \
111.111.111.111:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

В выводе вы найдете ID ноды (2n4y8bwu6s7c1kwdryd945zv1 в этом примере) и инструкции, как добавить другие ноды в кластер.

Итак, теперь у вас есть менеджер Docker Swarm. Настройте остальные ноды.

4: Добавление нод в кластер

На этом этапе можно открыть другой терминал и оставить вкладку или окно терминала, с помощью которого вы раньше подключились к менеджеру Swarm.

Сначала подключитесь к node-2 с локальной машины:

docker-machine ssh node-2

Затем выполните эту команду, где your_swarm_token – это токен, который вы получили при создании кластера, а manager_node_ip_address – это IP-адрес менеджера Swarm.

docker swarm join \
--token your_swarm_token \
manager_node_ip_address:2377

Если команда выполнена успешно, вы увидите:

This node joined a swarm as a worker.

Выйдите с node-2 и повторите этот раздел на ноде node-3.

Итак, вы добавили в кластер две рабочие ноды. Если брандмауэр настроен правильно, теперь у вас есть функционирующий кластер Docker Swarm, где все ноды синхронизированы.

5: Управление кластером

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

docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
4smt8qechkvb8qp02nwo2oe6t * node-1 Ready Active Leader
5wzik3knakgj0c24jmtmiy5oq node-2 Ready Active
7f6ws6oladh94xnmbfdhanokm node-3 Ready Active

Согласно выводу, в кластере Docker Swarm есть 3 ноды – один менеджер и две рабочие ноды. Чтобы просмотреть список доступных команд для управления кластером, введите:

docker node --help

Для получения подробной информации о кластере вы можете использовать следующую команду (это общая команда Docker, ее можно запускать на менеджере или на рабочих нодах):

Команда сообщает статус кластера (active или pending), количество нод в кластере и роль ноды, с которой она запущена (менеджер или рабочая нода).

.
Network: null host overlay bridge
Swarm: active
NodeID: 4smt8qechkvb8qp02nwo2oe6t
Is Manager: true
ClusterID: 31i554ti23njgxg28av52hv47
Managers: 1
Nodes: 3
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Heartbeat Tick: 1
Election Tick: 3
Dispatcher:
Heartbeat Period: 5 seconds
CA Configuration:
Expiry Duration: 3 months
Node Address: 111.111.111.111
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 3.10.0-327.22.2.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
.

Если вы запустите эту команду на рабочих нодах, строка Is Manager будет показывать false.

Примечание: Вы можете добавлять или удалять ноды из кластера в любое время. Кроме того, вы можете менять роли нод: сделать рабочую ноду менеджером и наоборот.

6: Запуск сервиса в кластере Docker Swarm

Теперь, когда у вас есть запущенный кластер Docker Swarm и запущен, попробуйте запустить тестовый контейнер и посмотрите, как менеджер справится с этой задачей. На машинах Docker Engine 1.12+ контейнеры развертываются как сервисы с помощью команды docker service. Подобно команде docker node, команда docker service может выполняться только на ноде-менеджере.

Итак, для примера разверните сервис веб-сервера, используя официальный образ контейнера Nginx:

docker service create -p 80:80 --name webserver nginx

Эта команда соединяет порт 80 в контейнере Nginx с портом 80 кластера, благодаря чему вы можете получить доступ к приветственной странице Nginx из любой точки.

Чтобы убедиться, что сервисы работают, введите:

docker service ls

Команда должна вернуть такой вывод. Столбец REPLICAS показывает, сколько экземпляров сервиса запущено:

ID NAME REPLICAS IMAGE COMMAND
ch7xnvy8upho webserver 1/1 nginx

Вы можете определить, на каких нодах работает сервис, используя команду docker service ps и указав имя сервиса.

docker service ps webserver
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR

4pfbvs7sh5mugtzckw4czhcfm webserver.1 nginx node-1 Running Running 2 minutes ago

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

Еще одна особенность Docker Swarm – это возможность масштабирования сервиса, то есть разворачивания его дополнительных экземпляров. Предположим, что вам нужно масштабировать сервис webserver до пяти экземпляров. Для этого просто введите следующую команду, и система создаст еще четыре экземпляра:

docker service scale webserver=5

Введите команду docker service ps, и вы увидите, на каких нодах запущены новые экземпляры сервиса:

ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
4pfbvs7sh5mugtzckw4czhcfm webserver.1 nginx node-1 Running Running 3 minutes ago
1er2rbrnj6ltanoe47mb653wf webserver.2 nginx node-3 Running Running 14 seconds ago
evassgyvruh256ebv5pj3bqcz webserver.3 nginx node-3 Running Running 14 seconds ago
d453agrdpgng47klbl6yfjnka webserver.4 nginx node-1 Running Running 18 seconds ago
2hsdevx178rg15gqxhzrsnmg6 webserver.5 nginx node-2 Running Running 14 seconds ago

Вывод показывает, что два из четырех новых экземпляров были запущены на node-3, один был запущен на node-1, а другой – на node-2.

Наконец, если сервис отказывает, он автоматически перезапускается на той же ноде (или на другой ноде, если исходная нода больше не доступна).

Заключение

Теперь вы знаете, что настраивать Docker Swarm с помощью Docker Engine 1.12 очень легко. Вы научились создавать кластер и управлять им. Но пока что это только базовый уровень. Чтобы просмотреть все доступные команды Docker Swarm, выполните следующую команду на менеджере Swarm.

docker swarm --help

Для получения дополнительной информации о Docker Swarm посетите страницу официальной документации. Другие наши мануалы по Docker можно найти здесь.

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

Прежде чем приступить, убедитесь, что выполнены следующие предварительные условия:

  • Сервер CentOS 7
  • Вы вошли как пользователь с привилегиями sudo. Вы проверяете это руководство о том, как создать нового пользователя sudo.

Установите Docker на CentOS

Хотя пакет Docker доступен в официальном репозитории CentOS 7, он не всегда может быть последней версией. Рекомендуемый подход - установить Docker из репозитория Docker.

Чтобы установить Docker на вашем сервере CentOS 7, выполните следующие действия:

Начните с обновления системных пакетов и установите необходимые зависимости:

Затем выполните следующую команду, которая добавит стабильный репозиторий Docker в вашу систему:

Теперь, когда репозиторий Docker включен, установите последнюю версию Docker CE (Community Edition), используя yum, набрав:

После установки пакета Docker запустите демон Docker и включите его автоматический запуск во время загрузки:

Чтобы убедиться, что служба Docker запущена, введите:

Вывод должен выглядеть примерно так:

На момент написания текущей стабильной версией Docker 18.06.1 была напечатана версия версии Docker:

Выполнение команды Docker без Sudo

По умолчанию для управления Docker требуются права администратора. Если вы хотите запускать команды Docker от имени пользователя без полномочий root без предварительной подготовки sudo вам необходимо добавить своего пользователя в группу Docker, которая создается во время установки пакета Docker CE. Вы можете сделать это, набрав:

$USER является переменной среды , которая содержит имя пользователя.

Выйдите из системы и войдите снова, чтобы обновить членство в группе.

Вывод должен выглядеть следующим образом:

Интерфейс командной строки Docker

Теперь, когда у нас есть работающая установка Docker, давайте рассмотрим основной синтаксис командной строки Docker.

Командная строка Docker имеет следующий вид:

Вы можете получить список всех доступных команд, набрав docker без параметров:

Если вам нужна дополнительная помощь по любому [subcommand] , просто введите:

Docker Образ

Образ Docker состоит из инструкций, описанных в Dockerfile, которые составляют исполняемое программное приложение. Образ - это неизменяемый двоичный файл, включающий приложение и все другие зависимости, такие как двоичные файлы, библиотеки и инструкции, необходимые для запуска приложения. Короче говоря, образ Docker - это, по сути, снимок контейнера Docker.

Docker Hub - это облачная служба реестра, которая, помимо прочего, используется для хранения образов Docker в общедоступном или частном хранилище.

Для поиска изображения в хранилище Docker Hub просто используйте search подкоманду. Например, чтобы найти образ CentOS, запустите:

Вывод должен выглядеть следующим образом:

Как вы можете видеть результаты поиска печатает таблицу с пятью столбцами, NAME , DESCRIPTION , STARS , OFFICIAL и AUTOMATED . Официальный образ - это образ, который Docker разрабатывает совместно с вышестоящими партнерами.

Если мы хотим загрузить официальную сборку CentOS 7, мы можем сделать это с помощью image pull подкоманды:

В зависимости от скорости вашего Интернета, загрузка может занять несколько секунд или несколько минут. Как только образ загружен, мы можем перечислить список:

Вывод должен выглядеть примерно так:

Если по какой-то причине вы хотите удалить образ, вы можете сделать это с помощью image rm [image_name] подкоманды:

Контейнеры Docker

Экземпляр образа называется контейнером. Контейнер представляет собой среду выполнения для отдельного приложения, процесса или службы.

Возможно, это не самое подходящее сравнение, но если вы программист, вы можете рассматривать образ Docker как класс, а контейнер Docker как экземпляр класса.

Мы можем запускать, останавливать, удалять и управлять контейнером с помощью подкоманды docker container .

Следующая команда запустит Docker-контейнер на основе образа CentoOS. Если у вас нет изображения локально, оно сначала загрузит его:

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

Переключатель -it позволяет нам взаимодействовать с контейнером через командную строку. Для запуска интерактивного контейнера введите:

Как видно из вывода после запуска контейнера, командная строка изменяется, а это означает, что вы сейчас работаете изнутри контейнера :

Для просмотра списка запущенных контейнеров: введите:


Если у вас нет запущенных контейнеров, вывод будет пустым.

Чтобы просмотреть как запущенные, так и остановленные контейнеры, передайте ему -a переключатель:

Чтобы удалить один или несколько контейнеров, просто скопируйте идентификатор контейнера (или идентификаторы) сверху и вставьте их после подкоманды container rm :

Вывод

Вы узнали, как установить Docker на свой компьютер CentOS 7 и как загружать образы Docker и управлять контейнерами Docker. Вы также можете прочитать о Docker Compose , который позволяет вам определять и запускать мультиконтейнерные приложения Docker.

Это руководство поверхностно затрагивает Docker. В следующих наших статьях мы продолжим углубляться в другие аспекты Docker. Чтобы узнать больше о Docker, ознакомьтесь с официальной документацией Docker .

How to Install and Configure Docker Swarm Mode on CentOS 7

In this tutorial, we will go through the step by step instruction on configuring three node Docker Swarm cluster on CentOS 7.

Requirements

  • Three Alibaba cloud instances with CentOS 7 installed. Out of which once server will act as a Manager node and two servers will act as Worker node.
  • A static IP address is configured on all the instances. Here, we will use IP address 192.168.0.102 for Manager node, 192.168.0.103 for Worker node1 and 192.168.0.104 for Worker node2.

Launch Alibaba Cloud ECS Instance

Once you are logged into your CentOS 7 instance, run the following command to update your base system with the latest available packages.

Getting Started

Before starting, you will need to configure /etc/hosts file on each node, so each node can communicate with each other by hostname.

You can update the /etc/hosts file on each node as shown below:

Save and close the file when you are finished.

Next, you will need to configure hostname on each node as per /etc/hosts file.

You can do this by running the following command on each node one by one:

Manager node:

hostnamectl set-hostname managernode

hostnamectl set-hostname workernode1

hostnamectl set-hostname workernode2

Install Docker Engine

Next, you will need to install Docker Community Edition on all the nodes. By default, the latest version of the Docker CE is not available in CentOS 7 repository. So you will need to add the Docker CE repository to your system.

You can do this by running the following command on all the nodes:

Once the Docker repository is installed, run the following command to install Docker CE:

yum install docker-ce –y

Next, start Docker service and enable it to start on boot using the following command:

Configure Firewall

Next, you will need to open ports 7946, 4789, 2376, 2377 and 80 on the firewall for a swarm cluster to work properly.

Run the following command on all the nodes:

Finally, reload the firewall and Docker service to apply all the changes:

Create a Swarm

Next, you will need to initialize the swarm on the Manager node. You can do this by running docker swarm init command. This command will make your node as a manager node and advertising it's IP:

docker swarm init --advertise-addr 192.168.0.102

You should see the following output:

Note: Remember the token from the above output. This will be used to join worker nodes to the manager node later.

You can verify the status of Swarm cluster using the following command:

You can also see the list of nodes in your cluster with the following command:

Join the Worker nodes to the Manager node

Manager node is now ready. Next, you will need to add Worker node to the Manager node.

You can do this by running docker swarm join command on both Worker node as follows:

docker swarm join --token SWMTKN-1-3793hvb71g0a6ubkgq8zgk9w99hlusajtmj5aqr3n2wrhzzf8z-1s38lymnir13hhso1qxt5pqru 192.168.0.102:2377

This node joined a swarm as a worker.

On the manager node, run the following command to check the node status, whether the nodes are active or not:

If everything went fine, you should see the following output:

If at any time, you lost your join token. You can be retrieved by running the following on Manager node:

docker swarm join-token manager -q

Deploy Service in Docker Swarm Mode

Docker Swarm cluster is now ready. It's time to deploy service in Swarm Mode. Here, we will deploy a webserver service with three containers in Docker Swarm Mode.

On the Manager node, run the following command to launch a webserver service:

Now, you can list and check the status of the service with the following command:

docker service ls

Apache web service is now distributed across three node, you can access the web server by accessing any of Worker node and Manager node using your favorite web browser as follows:

Container Self-Healing

One of the important features of docker swarm mode is container self-healing. If any container goes down, it's automatically restarted on the same node or on a different node.

To test container self-healing feature, let's remove the container from workernode2 and see whether a new container is launched or not.

Before starting, you will need container ID in order to remove it. You can list out container ID by running the following command on Workernode2:

Now, remove container with ID 9b01b0a55cb7 by running the following command:

docker rm 9b01b0a55cb7 -f

Now verify the Service from Manager node and see whether a new container is started or not:

docker service ps webservice

You should see that one container is failed and another is started on workernode2 as shown below:

You can also scale up and down containers as per your requirements. For example, you can scale up the containers from 3 to 5 for the webservice using the following command on Manager node:

You can check the status of the webservice with the following command on the Manager node:

docker service ps webservice

In the above output, you should see that two new instances is started on workernode1.

Protecting Your Servers

After setting up your cluster of Docker nodes, it is a good idea to protect your servers by providing additional layers of security. A security solution consisting of both monitoring and firewall capabilities is a good place to start.

CloudMonitor by Alibaba Cloud can be used to provide in-depth insights into your cloud deployments. CloudMonitor provides advanced analytics on critical metrics such as Central Processing Unit (CPU) utilization, latency and also lets you customize parameters specific to business requirements.

Читайте также: