Последнее обновление на 09.01.2024
Привет, Мир! Этой статьёй я решил начать цикл записей про контейнеры и разворачиваемые приложения. В данной инструкции мы установим и настроем docker, docker-compose, а так же пару очень полезных приложения, которые помогут Вам в знакомстве с данным видом запуска и обслуживании контейнеров.
Так случилось что я привык запускать большинство приложений в контейнерах, а Docker — один из наиболее доступных и распространенных способов это реализовать (есть еще как минимум proxmox с lxc).
Ранее в статье про ВПН я уже описывал эти шаги, но решил продублировать их и тут для Вашего удобства. В дальнейших записях я буду ссылаться на данную инструкцию. Поехали!
Установка docker и compose
Устанавливаем зависимости необходимые для Docker:
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
Устанавливаем репозиторий:
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Устанавливаем Docker:
sudo dnf install -y docker-ce --nobest
Запускаем:
sudo systemctl enable --now docker
Можно добавить права пользователю для удобства:
sudo usermod -aG docker user
На этом установка Docker завершена, можно проверить ее командой:
sudo systemctl status docker
sudo docker --version
Но для продолжения нам еще необходим compose, он устанавливается двумя командами:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Проверяем установку:
docker-compose --version
Установка portainer
Portainer — это инструмент управления контейнерами с помощью WEB-интерфейса.
Docker прекрасен тем, что запуск приложений очень прост и, в большинстве случаев, требует лишь одной строчки запуска. В более сложных случаях используются конфигурационные файлы и\или используется compose.
Для запуска 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
Рассмотрим команду подробнее:
-p 8000:8000 -p 9443:9443
— данным разделом мы пробрасываем порты из сервера в контейнер. Слева порт сервера, справа — контейнера. Если данные порты уже используются у Вас, тогда поменяйте их на доступные.
--name portainer
— имя контейнера.
--restart=always
— политика управления перезапуска контейнера (варианты: unless-stopped
, no
, on-failure[:max-retries]
).
-v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data
— пробрасываем «папки» по аналогии с портами.
portainer/portainer-ce:latest
— используемый образ. Тут можно вместо latest
прописать необходимую версию. Это полезно, к примеру, для контейнеров с базами данных, если того требует использующее её приложение.
На этом все, проверить работу контейнера можно командой, она покажет все запущенные контейнеры:
docker ps
А так же Вы теперь можете войти в WEB-интерфейс portainer по адресу https://localhost:9443
— где localhost
— адрес Вашего сервера.
При первом входе на WEB-интерфейс Вам предстоит создать пользователя с паролем, а после подключиться к Вашему окружению, в нашем случае — Add Environmen>Sandalone>Socket
.
На этом этапе установка portainer закончена, Вы уже сможете увидеть свой контейнер в списке запущенных, а так же размещать новые. Этим мы и займемся сейчас ниже и сделаем это вторым способом — docker-compose через интерфейс Portainer. Поехали!
Установка Watchtover
Итак, для автоматизации процесса наблюдения за обновлениями существует контейнер Watchtower.
Есть простой способ запуска данного контейнера с стандартными настройками командой:
docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
Эта команда загрузит образ Watchtower из Docker Hub и запустит его в фоновом режиме. Он будет следить за изменениями в вашем реестре и автоматически обновлять ваши контейнеры.
Меня такой вариант не устраивает, люблю я контролировать процессы обновления моих контейнеров. Итак, если Вас так же волнует судьба Ваших приложений, ниже я опишу процесс запуска Watchtower только для мониторинга обновлений и уведомления на почту по расписанию.
Для запуска по методу compose в portainer Вам необходимо зайти в пункт меню Stacks и нажать на кнопку +add Stack. Перед Вами откроется окно редактора:
Нам необходимо внести название в строку Name, а в поле ниже конфигурацию для запуска контейнера на yaml. Пример конфигурации контейнера ниже:
version: "3"
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Europe/Moscow
# - WATCHTOWER_CLEANUP=true
- WATCHTOWER_MONITOR_ONLY=true
- WATCHTOWER_SCHEDULE=0 0 0 * * *
- WATCHTOWER_NOTIFICATIONS=email
- WATCHTOWER_NOTIFICATION_EMAIL_SUBJECTTAG=Ваш тэг
- WATCHTOWER_NOTIFICATION_EMAIL_FROM=почта отпрввителя
- WATCHTOWER_NOTIFICATION_EMAIL_TO=почта получателя
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER=адрес сервера исходящей почты
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=порт сервера исходящей почты
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=пользователь
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=пароль
- WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2
С первой частью понятно: мы описываем используемый образ и имя контейнера , далее пути проброса папки по аналогии с командой docker. Ниже же прописаны параметры контейнера, они специфические для разных приложений. Рассмотрим их подробнее:
- TZ — временная зона согласно списку;
- WATCHTOWER_CLEANUP — очистка неиспользуемых образов (в данном варианте я не использую это так как обновляю образы вручную);
- WATCHTOWER_MONITOR_ONLY — параметр ограничивающий действия с образами лишь мониторингом;
- WATCHTOWER_SCHEDULE — расписание запуска проверки как в Cron (Секунды Минуты Часы День месяца Месяц День недели). В моем варианте — в полночь;
- WATCHTOWER_NOTIFICATION — метод уведомлений (варианты:
email
,slack
,msteams
,gotify
) я выбрал вариант с почтой.
Ниже идут настройки почтового сервера, думаю, объяснять тут ничего не придется. Вносите необходимые правки и нажимайте кнопку Deploy the stack. Контейнер запустится и сразу пришлет тестовое письмо. Проверка произведется согласно Вашему параметру расписания.
Если Вы хотите автоматически обновлять свои контейнеры, тогда закомментируйте знаком #
строку WATCHTOWER_MONITOR_ONLY
или присвойте ей параметр false
. Так же будет полезным раскомментировать параметр WATCHTOWER_CLEANUP
.
На этом статья полностью охватила тему начального знакомства с контейнерами. Дальше на примерах более сложных контейнеров я Вам покажу как разворачивать сразу несколько приложений в одном стэке, как прятать свои пароли не используя их в теле yaml и много других полезных вещей.
Так же не забывайте о возможности задать вопросы в комментариях или Telegram канале. До связи!
Ваш комментарий будет первым