no-style

Установка и знакомство с Portainer

docker-compose + linuxserver + wireguard
Этот пост посвящен панельке для управления докер контейнерами Portainer. Мы установим Portainer внутрь докер контейнера, а так же рассмотрим его функционал и базовые настройки...


Необходимые требования

Чтобы всё получилось нам понадобится:







В двух словах о Portainer

Portainer представляет из себя GUI интерфейс для управления докер контейнерами. С его помощью можно Добавлять / Удалять / Клонировать / Стартовать / Перезагружать / Останавливать контейнеры.

Также очень просто можно посмотреть логи конкретного контейнера. Присоединяться к терминалу конкретного контейнера. Выбираем интересующий нас и нажимаем на соответствующую кнопку. Всё интуитивно понятно.

Помимо вышеперечисленного, Portainer умеет работать с Kubernetes. А ещё его можно использовать как единый узел для управления сразу несколькими серверами.

Portainer сильно упростит изучение технологий Docker на самом раннем этапе.







Установка Portainer

Создадим Volume где будет храниться информация

sudo docker volume create portainer_data

Теперь необходимо выбрать способ установки. Для новичков я рекомендую Способ 1, т.к. он более прост в понимании. Изначально этот пост писался именно под этот способ. Минусом данного способа будут торчащие наружу порты. Те самые которые вы замапите на 8000 и 9443.

Однако, существует и альтернативный вариант, рассмотренный во втором способе. Данный способ подразумевает что вы прочитали пост про Nginx Proxy Manager. В особенности раздел Вариант 2: Проксируем приложение через хостнейм. Этот способ чуть сложнее, но при этом он лучше в плане безопасности.



Способ 1: установка Portainer с торчащими наружу портами

sudo docker run -d -p 44149:8000 -p 44150:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.16.1

Мы замапили порт 9000 внутри контейнера на порт 44150 на хостовую машину.

Обратите внимание порт 8000 внутри контейнера используется для агента Portainer. А порт 9000 внутри контейнера используется для веб интерфейса.

О том как добавить SSL сертификат для этого способа - читайте ниже в этом посте.







Способ 2: установка Portainer с привязкой по хостнейму

sudo docker run -d --name portainer --network=evilcorp --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.16.1

Перед тем как подключить SSL сертификат для этого способа, обязательно прочтите раздел: Вариант 2: Проксируем приложение через хостнейм из поста про Nginx Proxy Manager. Имейте в виду что в виду особенностей этого способа проксировать надо не на ip+внешний порт, а на portainer:9443







Способ 3: установка Portainer Portainer с помощью docker-compose

Как и в предыдущих статьях про докер контейнеры мы будем придерживаться правила - хранить все контейнеры в одном месте. Создаём необходимые директории для Portainer

sudo mkdir -p /app/misc/portainer

Сделаем нашего пользователя (не root !) владельцем этой директории

sudo chown -R $USER:$USER /app/misc/portainer

Перейдём в директорию, которую мы создавали на предыдущем шаге

cd /app/misc/portainer

Создадим фаил docker-compose.yml

nano docker-compose.yml

И заполняем его таким таким содержанием. Данный конфиг подойдёт сразу под amd64 и arm64 архитектуры.

Если Вы хотите поднять Portainer не светя порты наружу, прочитайте про проксирование приложения в NPM через хостнейм. После усвоения материала используйте этот фаил docker-dompose. В противном случае используйте первый вариант, изначально пост писался именно под него!




Я советую периодически проверять DockerHub на наличие новых версий. На момент написания статьи актуальная версия была
portainer-ce:2.19.4






SSL сертификат для Portainer

Необязательным но желательным шагом будет получение SSL сертификата. Дело в том что в данный момент все данные передаются по незащищённому протоколу http. Логин и пароль передаются в открытом виде.

Если вы ставите портейнер для того чтобы потренироваться на домашнем сервере то можно обойтись и без SSL. На продакшн сервере SSL musthave!

Самый простой вариант завести поддомен например portainer.domain.com и посадить на этот поддомен Portainer. Проще всего это сделать при помощи Nginx Proxy Manager. Если вы не знаете как, то читайте предыдущий пост Nginx Proxy Manager в Docker контейнере.

В Nginx Proxy Manager(далее NPM) создаём новый хост. Заполняем необходимую информацию.

  • Домен либо поддомен
  • Scheme - https
  • Ip адрес
  • Порт - 44150
  • Обязательно включаем - Websockets Support если не включим то не сможем атачиться внутрь контейнеров через web интерфейс

npm portainer

Нажимаем Save и ждём примерно 60 секунд.

После этого снова редактируем только что добавленный хост, нажав на три точки справа и Edit.

На этот раз отправляемся в раздел SSL в котором запрашиваем новый ssl сертификат для нашего домена - Request a new SSL Certificate


npm portainer 2

И нажимаем кнопку Save

Обратите внимание, что после нажатия кнопки Save не должно быть никаких ошибок. Если у вас всё же были какие то ошибки, скорее всего это связано с тем что у вас не успели обновиться записи в DNS, либо вы превысили лимиты(количество попыток) LetsEncrypt. В обоих случаях надо просто подождать и повторить попытку позже.

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

Мы должны увидеть страницу установки Portainer







Базовая настройка Portainer

Открываем адрес

http://ip.адрес.вашего.сервера:44150

Либо тот порт который вы замапили на порт 9000 внутри контейнера.

Нас приветствует Portainer и предлагает задать логин и пароль для администратора

Portainer Fresh Install

Следующим шагом будет задание эндпоинта. В рамках данной статьи мы рассматриваем работу Portainer в среде Docker - выбираем соответствующий пункт и нажимаем connect

Portainer Select Docker Endpoint

Нас перекинет на главную страницу Portainer

Portainer Install Complete

На этом установка завершена.







Что умеет Portainer

Кликая по значку кита мы попадаем на Dashboard конкретного эндпоинта. В нашем случае локального.

Portainer Dashboard

Тут мы наблюдаем сразу несколько разделов

Stacks - Тут содержатся так называемые стэк контейнеры. В таких контейнерах присутствует сразу же несколько сервисов например Nginx + Php + MySQL.

Выгодным отличием стэк контейнера заключается в том что мы можем устанавливать какой сервис запускать после какого. Например в случае веб сервера имеет смысл сначала запустить БД потом PHP и После этого запустить Nginx. Если бы мы сначала запустили Nginx то наблюдали бы ошибки связанные с невозможностью подключиться к базе данных или же ошибки Php. Это фишка самого докера, а не портейнера.

Containers - Наши контейнеры. Запущенные и остановленные.

Images - образы для контейнеров. Те что скачиваются с докерхаба либо же те которые мы сами билдим.

Volume - название говорит само за себя. Тут содержаться наши виртуальные фаиловые системы для контейнеров.

Networks - сети.







Практика

Предлагаю попрактиковаться и поставить что нибудь из шаблонов портейнера. Пускай это будет нода (node).

Из главного меню переходим в раздел App Templates. Из списка выбираем ноду

Portainer Templates install


В поле name вписываем название используя только маленькие латинские буквы a-z. У меня это будет nodesurge. После этого разворачиваем спойлер на котором написано +Show advanced options.

(Если вам нужно чтобы контейнер был присоединён к кастомной сети то вместо bridge выберите желаемую сеть, у меня это будет сеть evilcorp)

Portainer Templates install 2


В выпадающем списке нас интересует пункт Volume mapping в котором кликаем по пункту map additional volume .

Перед тем как замапить директорию создадим её, например такую

sudo mkdir -p /app/misc/nodesurge/data


И сразу дадим нашему пользователю права для этой директории

sudo chown -R $USER:$USER /app/misc/nodesurge/data



Возвращаемся к мэпингу директории в portainer. После того как мы нажали map additional volume выбираем Bind

В поле container вписываем /app

В поле host вписываем /app/misc/nodesurge/data

Portainer Templates install 3

И нажимаем Deploy the container




Если всё сделано правильно, то спустя какое то время мы увидим оповещение что всё хорошо

Portainer Templates install 4

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

Portainer Templates install 5


В любой момент мы можем посмотреть логи контейнера, зайдя в соответствующий раздел. Я же предлагаю сразу зайти в пункт >_Console
Мы можем зайти внутрь нашего контейнера нажав кнопку Connect



Попав внутрь поставим модуль для NPM Surge для этого вписываем

npm install --global --save-dev surge

Portainer Templates install 5


Ну и напоследок добавим какой нибудь простой HTML код в качестве сайта для Surge. Создаём папку с фаилом index.html с таким содержанием.

(Во время первой закачки необходимо будет авторизоваться вписав почту и пароль для входа, вас автоматически зарегистрирует если почта в сервисе используется 1 раз)

Node add Surge 1


Видим что наш сайт опубликован на домене temporary-talk.surge.sh переходим на него, только подставим перед доменом https иначе откроется сайт без SSL сертификата.

Portainer Templates install 2

Сработало!




Хитрости Surge

Если вы хотите использовать свой придуманный домен, то перед заливкой сайта создайте в его корне фаил CNAME в котором напишите желаемый домен.

echo mydomain.surge.sh > CNAME

Вам никто не запрещает создать HTML редирект с красивым доменом и потом использовать его в своих целях.

На этом с практикой закончили.







Переустановка Portainer

Иногда бывает нужно переустановить portainer. Для этого сначала понадобится удалить прежнюю версию. Делается это довольно

Останавливаем контейнер с portainer

sudo docker stop portainer

Удаляем контейнер с portainer

sudo docker rm portainer

Опционально - смотрим список всех имаджей

sudo docker images

Опционально - удаляем имадж portainer

sudo docker rmi [image ID]

Удаляем volume с данными portainer

sudo docker volume rm portainer_data

После этого можем заново установить portainer







Полезные ссылки

Deploying Portainer CE in Docker

Portainer на DockerHub

2 Комментарии

  1. Спасибо тебе большое, добрый человек. Сэкономил мне кучу времени, когда я запорол работу контейнера с Portainer установкой Бизнес редакции вместо Community. Благодаря тебе переустановил все за пару минут

    ОтветитьУдалить

Отправить комментарий