Управление контейнерами на сервере
Для каждого своего клиента я стараюсь создавать рабочее окружение для сервисов, в котором они будут стабильно выполнять поставленные задачи долгое время. Но часто случается, что для разных сервисов на одном сервере нужны разные версии библиотек, дополнительные настройки, конфликтуют рабочие директории. Попробуй уследи, чтобы новая база данных не подтерла наработки другого сервиса и не остановила выполнение другого. В итоге занимаешься обслуживанием сервисов, а не задачей клиента.
На помощь приходит Docker в связке с Portainer. Этот набор для работы уже де факто является стартовым на серверах клиентов и моих. А теперь по порядку:
Что такое контейнеры и зачем нужен Docker?
Давайте начнем с основ. Контейнеры – это некая изолированная среда, в которой запускаются приложения и сервисы. Они включают в себя всё необходимое для работы приложения: код, библиотеки, зависимости и настройки. Docker – это платформа для создания и управления контейнерами, которая обеспечивает стандартизацию и автоматизацию процесса разработки, доставки и эксплуатации приложений.
Преимущества использования Docker:
- Изолированность: Контейнеры изолируют приложения друг от друга и от базовой системы, что делает их безопасными для использования.
- Портативность: Контейнеры могут быть запущены на любой платформе, где установлен Docker.
- Легковесность: Контейнеры используют общие ресурсы хост-системы, что делает их легче и быстрее в запуске, чем виртуальные машины.
Точка 1
Docker контейнер — это приложение и вся его обвязка в одном флаконе. Внутри одного контейнера могут быть сразу несколько служб, все они нужных версий и настроены между собой.
Если вышла новая версия сервиса, то просто обновляем образ контейнера и перезапускаем его. Готово, мы обновили сервис и всю его обвязку.
Docker Compose: управление многоконтейнерными приложениями
Docker Compose — инструмент, с его помощью мы можем запустить Docker приложения, которые состоят из нескольких контейнеров сразу и связаны между собой.
В этом подходе мы не настраиваем каждый сервис по отдельности, а описываем структуру и настройки приложений в файле docker-compose.yml и запускаем все контейнеры одной командой.
Вот пример docker-compose файла, в нем мы запустим прокси сервер NGINX вместе с базой данных Postgresql.
Так же мы указываем, что сервис «web» должен быть размещен на порту 80, а пароль для подключения к базе данных «example».
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: example
Когда вы понимаете, из каких частей строятся docker-compose файлы, то прочитав его сразу становится понятно, какие сервисы он запускает, с какими параметрами и какие из них будут доступны по внешним портам сервера.
Это очень простой пример такого файла. На практике могут использоваться файлы конфигурации, которые запускают сразу 5, 10 и более контейнеров, объединенных в одну сеть и имеющие взаимосвязь между собой.
Точка 2
Docker compose — подход к многоконтейнерным приложениям. Не настраиваем каждый сервис руками, а прописываем всё в одном файле и запускаем.
Если с Docker мы расходуем меньше времени на настройку, то здесь получаем еще и прочную связь между сервисами между собой в пределах Стека (набора приложений в одном docker-compose файле).
Знакомство с Portainer
Portainer – это инструмент с открытым исходным кодом для управления контейнерами и Docker-хостами через веб-интерфейс.
Он удобен, понятен, стабилен. С ним процесс управления контейнерами становится ещё более удобным и простым.

- Стеки — создание и управление ими
- Мониторинг контейнеров, их логов, создаваемой нагрузки.
- Терминал с подключением внутрь контейнера. Нужно редко, но бывает и точно не лишнее.
- Создание управление сетями.
- Удобный интерфейс написания docker-compose конфигурации и переменных окружения, чтобы учетные данные сервисов не «вывалились» наружу или для удобства тиражирования сервисов по серверам.
Все это — только часть функционала данного сервиса. Как итог: 99% необходимых вам действий с контейнерами можно сделать из веб-интерфейса.
Чем меньше кода и консольных, тем лучше на мой взгляд. Теперь к практике.
Точка 3
Portainer — веб-интерфейс для использования docker и docker compose. Он упрощает типовые операции и помогает не ошибиться при установке и обновлении сервисов.
Установка Portainer
Установка Portainer проста и занимает всего несколько шагов.
Конечно для начала вам потребуется установить docker и docker compose на ваш сервер, ведь и сам Portainer является приложением-контейнером, который содержит в себе все зависимости.
Вот команды для установки docker и docker compose, чтобы вам два раза не вставать.
- Проверяем и удаляем предыдущие части установок docker и всего с ним связанного
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
- Получаем ключи для подключения к репозиторию Docker
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
- Устанавливаем необходимые пакеты одной командой
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-compose -y
- Проверяем, что docker, docker compose и docker-compose установлены на вашем сервере:
docker version
docker compose version
docker-compose version
- Запускаем portainer на сервере с помощью команды:
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
- После выполнения всех команд переходим по адресу:
https://ip-вашего-сервера:9443
- Соглашаемся с предупреждением от браузера и переходим к сервису.
(браузер будет ругаться на сертификат безопасности. Мы ведь переходим по прямому адресу сервера + порт по протоколу https, а браузеры считают такую активность небезопасной) - Задаем логин и пароль для администратора.
- Вы успешно установили Portainer на свой сервер.
Пример использования Portainer
В данном блоге будет масса примеров установки популярных сервисов, утилит и приложений с помощью portainer. Немного позже ссылки на них появятся в этом разделе.
Заключение
Portainer – это мощный инструмент для управления контейнерами Docker, который значительно упрощает жизнь фрилансера при работе с серверами и развертыванием приложений. Надеюсь, эта статья помогла вам понять основы Docker и преимущества использования Portainer в вашей работе. Следите за обновлениями, чтобы узнать больше об интересных инструментах.
Оставьте комментарий