Вступ
											
										
																			
											
												Передумови
											
										
																			
											
												Розгортання
											
										
																			
											
												Встановіть на серверах Alpine Linux 3.9.0
											
										
																			
											
												Конфігурація сервера після встановлення
											
										
																			
											
												Встановіть Docker на свої сервери
											
										
																			
											
												Ініціалізуйте рій Docker з одним вузлом менеджера та одним робочим вузлом
											
										
																			
											
												Розгорніть Portainer з SSL, щоб керувати своїм роєм Docker
											
										
																	
												
Вступ
Цей посібник покаже вам, як створити та налаштувати рій Docker за допомогою кількох серверів Alpine Linux 3.9.0 і Portainer. Зверніть увагу, що Vultr пропонує додаток Docker одним кліком, який наразі підтримує CentOS 7 x64 і Ubuntu 16.04 x64.
Передумови
Для початку вам знадобиться щонайменше два сервери VC2 під керуванням Alpine Linux 3.9.0. У вашій групі Docker один із цих серверів діятиме як manager nodeінтерфейс із зовнішніми мережами та делегування завдань робочим вузлам. Інший сервер тоді діятиме як worker node- виконуючи завдання, делеговані йому вузлом менеджера.
Зауважте, що ви можете запустити більше двох серверів, якщо ваша програма потребує резервування та/або більшої обчислювальної потужності, і кроки, наведені в цьому посібнику, будуть застосовуватися.
Розгортання
Відвідайте інтерфейс розгортання сервера Vultr .
Переконайтеся, що Vultr Cloud (VC2)вкладка вибрана у верхній частині сторінки.
Ви можете вибрати будь-яке розташування з Server Locationрозділу, однак усі сервери повинні бути в одному місці , інакше неможливо буде розгорнути на них рій Docker.
Виберіть ISO Libraryвкладку Server Typeрозділу та виберіть Alpine Linux 3.9.0 x86_64зображення.
Виберіть відповідний варіант із Server Sizeрозділу. У цьому посібнику буде використовуватися SSD-сервер розміром 25 ГБ, але цього може бути недостатньо, щоб задовольнити вимоги до ресурсів вашої програми. Хоча Vultr дозволяє легко оновлювати розмір сервера після його запуску, вам все одно слід уважно розглянути, який розмір сервера потрібен для оптимальної роботи вашої програми.
У Additional Featuresрозділі необхідно вибрати Enable Private Networkingваріант. Хоча інші варіанти не є обов’язковими для виконання цього посібника, вам слід подумати, чи має кожен з них сенс у контексті вашої програми.
Якщо ви раніше ввімкнули цю Multiple Private Networksопцію у своєму обліковому записі, вам потрібно буде вибрати існуючу або створити нову приватну мережу для своїх серверів. Якщо ви не ввімкнули його, ви можете проігнорувати цей розділ. Щоб отримати інформацію про ручне налаштування приватних мереж, перегляньте цей посібник .
Firewall GroupНаразі пропустіть розділ. Лише сервер, який виступає в якості вузла менеджера в зграї Docker, потребуватиме відкритих портів, і це слід налаштувати після розгортання сервера.
У самому низу сторінки ви повинні ввести Server Qtyпринаймні два. Як згадувалося раніше, вам може знадобитися більше двох серверів, але двох достатньо, щоб дотримуватися цього посібника.
Нарешті, у Server Hostname & Labelрозділі введіть значущі та запам’ятовуються імена хостів та мітки для кожного сервера. Для цілей цього посібника ім’я хоста та мітка першого сервера будуть docker-managerі Docker Manager, відповідно - і docker-workerі Docker Workerдля другого відповідно.
Після подвійної перевірки всіх ваших конфігурацій ви можете натиснути Deploy Nowкнопку внизу сторінки, щоб запустити свої сервери.
Встановіть на серверах Alpine Linux 3.9.0
Оскільки ви вибрали ОС з бібліотеки ISO Vultr, вам потрібно буде вручну встановити та налаштувати Alpine Linux 3.9.0 на кожному сервері.
Давши Vultr хвилину або дві, щоб виділити ваші сервери, клацніть піктограму з потрійною крапкою more optionsдля Docker Managerсервера в інтерфейсі керування сервером , а потім виберіть потрібний View Consoleпараметр.
Ви повинні бути перенаправлені на консоль із запитом входу. Якщо ні, зачекайте ще хвилину, поки Vultr завершить розгортання ваших серверів.
У цьому запиті входу введіть rootім’я користувача. У живій версії Alpine Linux 3.9.0 (яка наразі працюють на ваших серверах) не потрібно, щоб суперкористувач вводив пароль під час входу.
Після успішного входу в кореневий обліковий запис ви побачите вітальне повідомлення, за яким слідуватиме підказка оболонки, яка виглядає так:
localhost:~# 
Щоб запустити інсталятор Alpine Linux, введіть таку команду:
# setup-alpine
Спочатку виберіть відповідну розкладку клавіатури. У цьому посібнику буде використовуватися usмакет і варіант.
Встановлюючи ім’я хоста, виберіть те саме ім’я хоста, яке ви встановили для цього сервера під час розгортання. Якщо ви точно дотримувалися цього посібника, ім’я хоста має бути docker-manager.
Повинні бути доступні два мережеві інтерфейси: eth0і eth1. Якщо ви бачите лише eth0, це означає, що ви неправильно налаштували приватну мережу ваших серверів. Initialize , eth0використовуючи dhcp, і форматувати з eth1допомогою приватного IP - адреса, маску підмережі та шлюз цей сервер був призначений під час розгортання. Ви можете отримати доступ до цих деталей з інтерфейсу налаштувань вашого сервера. Коли з’явиться запит, не виконуйте жодних налаштувань мережі вручну.
Введіть новий пароль для облікового запису root, а потім виберіть часовий пояс, відповідний для розташування, у якому ви вибрали для розгортання цих серверів.
Якщо ви збираєтеся використовувати проксі-сервер HTTP/FTP, введіть його URL-адресу, інакше не встановлюйте URL-адресу проксі-сервера.
Виберіть клієнт NTP для керування синхронізацією системного годинника. Цей посібник буде використовувати busybox.
Коли попросять використовувати дзеркало сховища пакетів, виберіть його явно, ввівши його номер; автоматично визначити та вибрати найшвидший, ввівши f; або вручну відредагуйте файл конфігурації репозиторію, ввівши e, що не рекомендується, якщо ви не знайомі з Alpine Linux. У цьому посібнику буде використовуватися перше дзеркало.
Якщо ви плануєте використовувати SSH для доступу до своїх серверів або для розміщення файлової системи на основі SSH, виберіть сервер SSH. Цей посібник буде використовувати openssh.
При запиті диска до використання, вибрати диск в vdaякості sysтипу.
Тепер на вашому сервері має бути встановлено Alpine Linux 3.9.0. Повторіть цей процес для всіх інших серверів, які ви розгорнули раніше, переконавшись, що ви замінили правильні значення для імені хоста та eth1мережевого інтерфейсу.
Конфігурація сервера після встановлення
На даний момент на ваших серверах все ще працює активна версія ISO Alpine Linux 3.9.0. Щоб завантажитися з інсталяції SSD, перейдіть до інтерфейсу налаштувань вашого сервера, перейдіть до пункту Custom ISOбічного меню та натисніть Remove ISOкнопку. Це повинно перезавантажити сервер. Якщо це не так, то перезавантажтеся вручну.
Після завершення перезавантаження сервера поверніться до веб-консолі сервера Docker Manager.
Увійдіть в обліковий запис root, використовуючи пароль, який ви встановили раніше під час процесу встановлення.
Увімкніть сховище пакетів спільноти, розкоментувавши третій рядок /etc/apk/repositoriesвикористання vi. Подібним чином можна ввімкнути сховища краю та тестування, але вони не зобов’язані дотримуватися цього посібника.
Синхронізуйте локальний індекс пакетів сервера з віддаленим сховищем, яке ви вибрали раніше, ввівши таку команду оболонки:
# apk update
Потім оновіть застарілі пакети:
# apk upgrade
Як і раніше, повторіть цей процес налаштування для кожного сервера, який ви розгорнули раніше.
Встановіть Docker на свої сервери
Перш ніж інсталювати сам пакет Docker, ви можете створити окремого dockerкористувача. Ви можете зробити це за допомогою такої команди:
# adduser docker
Примітка.  Цей новий користувач і всі користувачі, додані до нової dockerгрупи, матимуть привілеї root після встановлення пакета Docker. Дивіться таку проблему зі сховища Moby Github:
  Due to the --privileged in docker, anyone added to the 'docker' group is root equivalent. Anyone in the docker group has a back door around all privilege escalation policy and auditing on the system.
  
  This is different from someone being able to run running sudo to root, where they have policy, and audit applied to them.
Якщо ви хочете надати користувачеві дозвіл sudo docker, спочатку встановіть sudoпакет:
# apk add sudo
Потім створіть sudoгрупу:
# addgroup sudo
Нарешті, додайте dockerкористувача до sudoгрупи:
# adduser docker sudo
Тепер ви можете виконати крок 4 цього посібника, щоб завершити налаштування sudo.
На цьому етапі ви готові встановити пакет Docker. Зауважте, що dockerдля встановлення та налаштування Docker необов’язково мати окремого користувача з можливістю sudo , але цей посібник дотримується цієї конвенції.
Встановіть пакет Docker за допомогою такої команди:
# apk add docker
Потім увімкніть сценарій ініціалізації Docker:
# rc-update add docker
Нарешті, запустіть демон Docker:
# rc-service docker start
Ви можете перевірити, чи працює Docker, за допомогою цієї команди:
# docker info
Як і минулого разу, повторіть цей процес встановлення Docker для кожного сервера, який ви розгорнули на початку.
Ініціалізуйте рій Docker з одним вузлом менеджера та одним робочим вузлом
Вирішивши всі ці налаштування, ви нарешті готові створити рій Docker.
Створіть рій і додайте вузол менеджера
Перейдіть назад до веб-консолі вашого Docker Managerсервера. Ви налаштуєте цей сервер як вузол менеджера у вашому рою. Якщо ви вирішили створити dockerкористувача раніше, увійдіть, використовуючи цей обліковий запис, а не суперкористувач.
Введіть таку команду, але замініть 192.0.2.1її приватною (не загальнодоступною) IP-адресою, призначеною вашому Docker Managerсерверу:
$ docker swarm init --advertise-addr 192.0.2.1
Docker will display a command you can execute on other servers in the private network to add them as worker nodes to this new swarm. Save this command.
Add a worker node
Now navigate to the web console of your Docker Worker server, signing in with the docker user if you created it.
To add this server as a worker node to the swarm you just created, execute the command you saved from the output of the swarm creation command. It will look similar to the following:
$ docker swarm join --token SWMTKN-1-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXX 192.0.2.1:2377
Docker will output whether the node was able to join the swarm. If you encounter issues adding worker nodes to the swarm, double check your private network configuration and refer to this guide for troubleshooting.
If you deployed more than two servers at the beginning, you can add the rest as worker nodes to your swarm using the command above, increasing the amount resources available to your application. Alternatively, you can add additional manager nodes, but that's beyond the scope of this guide.
Deploy Portainer with SSL to manage your Docker swarm
At this point your Docker swarm is ready for use. You may, however, optionally launch a Portainer stack on the manager node in your swarm. Portainer offers a convenient web interface for managing your swarm and the nodes therein.
It's now time to create a firewall group for your swarm. Unless your application specifically requires it, only expose ports on your manager nodes. Exposing ports on your worker nodes without careful consideration can introduce vulnerabilities.
Перейдіть до інтерфейсу керування брандмауером і створіть нову групу брандмауера. Ваша програма має вказувати, які порти надавати, але ви повинні, принаймні, відкрити порт 9000для Portainer. Застосуйте цю групу брандмауера до Docker Managerсервера.
Хоча це не є обов’язковим, настійно рекомендується захистити Portainer за допомогою SSL. Заради цього посібника ви будете використовувати лише самопідписаний сертифікат OpenSSL, але вам слід розглянути можливість використання Let's Encrypt у виробництві.
Перейдіть до веб-консолі Docker Managerсервера, увійдіть за допомогою dockerкористувача та скористайтеся такими командами, щоб створити самопідписаний сертифікат OpenSSL:
$ mkdir ~/certs
$ openssl genrsa -out ~/certs/portainer.key 2048
$ openssl req -new -x509 -sha256 -key ~/certs/portainer.key -out ~/certs/portainer.pem -days 3650
Створіть новий файл ~/portainer-agent-stack.yml, з таким вмістом:
version: '3.2'
services:
  agent:
    image: portainer/agent
    environment:
      AGENT_CLUSTER_ADDR: tasks.agent
      CAP_HOST_MANAGEMENT: 1
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
      - /:/host
    networks:
      - agent_network
    deploy:
      mode: global
  portainer:
    image: portainer/portainer
    command: -H tcp://tasks.agent:9001 --tlsskipverify --ssl --sslcert /certs/portainer.pem --sslkey /certs/portainer.key
    ports:
      - target: 9000
        published: 9000
        protocol: tcp
        mode: host
    volumes:
      - portainer_data:/data
      - /home/docker/certs:/certs
    networks:
      - agent_network
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]
networks:
  agent_network:
    driver: overlay
    attachable: true
volumes:
  portainer_data:
Після зміни цього файлу конфігурації стека Docker відповідно до ваших вимог ви можете розгорнути його:
$ docker stack deploy --compose-file ~/portainer-agent-stack.yml portainer
Щоб переконатися, що Portainer працює, виконайте таку команду, давши Docker хвилину або дві на розгортання стека:
$ docker ps
Ви побачите два контейнери із зображеннями portainer/portainer:latestта portainer/agent:latest, що підтверджує, що Portainer запущено правильно.
Тепер ви можете налаштувати та керувати своїм роєм Docker, відвідавши публічну IP-адресу свого Docker Managerсервера на порту 9000за допомогою HTTPS.