Перейти к содержимому

Docker: установка и первоначальная настройка

Последнее обновление на 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 канале. До связи!

Опубликовано вПрочии записи

Ваш комментарий будет первым

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *