uDocs

Docker часть 2: Docker и Portainer

Устанавливаем и настраиваем Docker и Portainer на Debian.

Docker часть 2: Docker и Portainer

В первый части мы установили чистый Debian на виртуальную машину Proxmox. Сейчас добавим Docker и Portainer для управления контейнерами.

Настройка репозитория

Будет использовать метод установки из репозитория. Данный способ является самым оптимальным. И рекомендован разработчиками Docker.

Обновляем все текущие пакеты и добавляем возможность использовать apt через HTTPS:

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

Добавляем официальный GPG-ключ

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Настраиваем доступ до репозитория

echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Установка Docker

Устанавливаем все необходимые пакеты для работы с docker

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Чтобы не было ошибки permission denied unix:///var/run/docker.sock необходимо добавить текущего пользователя в группу и назначить права на docker.sock:

sudo usermod -aG docker ${USER}
sudo chmod 666 /var/run/docker.sock

Установка Portainer

Чтобы установить Portainer, мы создадим скрипт docker-compose, который затем запустим, чтобы все настроить. В дальнейшем все дополнительные контейнеры будем хранить в этом файле.

mkdir home-assistant
cd ./home-assistant
sudo nano docker-compose.yaml
# Сохранить и закрыть с помощью Ctrl+O и Ctrl+X

Хранить всю конфигурацию будем в папке home-assistant. Это упрощает резервное копирование всего. Эти тома будут хранить данные из образа Docker локально, поэтому данные не будут потеряны при пересборке контейнера (например, при обновлении).

version: '3.0'

services:
  portainer:
    container_name: portainer
    image: portainer/portainer-ce:latest
    restart: unless-stopped
    ports:
      - "9000:9000/tcp"
      - "9443:9443/tcp"
    environment:
      - TZ=Europe/Moscow
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock
      - ./portainer/data:/data

Мы также разрешим нашему пользователю без прав администратора изменять этот файл. Опять же, просто чтобы сделать нашу жизнь немного проще.

sudo chown root:docker docker-compose.yaml
sudo chmod g+w docker-compose.yaml

Запуск

Теперь выполняем команду docker compose up -d, и Docker загрузит последний образ и все настроит.

При первом посещении Portainer нас попросят создать учетную запись пользователя. На это будет 10 минут. Если не успеть, то придется перезагружать docker контейнер. Это сделано для безопасности. Так как не всегда Portainer запускается локально.

Когда настройка пройдет у нас появится доступ к web интерфейсу:

https://<ip>:9443 # ошибка сертификата
http://<ip>:9000 # не защищенное соединение

Не обращайте внимание на ошибки. Они появляются так как ssl сертификат является самоподписанным. В этом нет ничего плохого.

Итоговая структура проекта

Папка portainer заполнилась автоматически, после запуска Docker контейнера. В ней хранятся данные, которые в случае перезапуска загрузятся и не придется устанавливаться все с нуля.

home-assistant
├── docker-compose.yaml
└── portainer
    └── data

Обсуждение

JURIKJURIK
13 мая 2024

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

  – ./homeassistant/:/config

  – /etc/localtime:/etc/localtime:ro

network_mode: LAN
Alexander PushkarevAlexander Pushkarev
7 октября 2023
version: '3.0'

services:
  homeassistant:
    container_name: homeassistant
    image: ghcr.io/home-assistant/home-assistant:stable
    restart: unless-stopped
    privileged: true
    network_mode: host
    environment:
      - TZ=Europe/Moscow
    volumes:
      - ./homeassistant/:/config
      - /etc/localtime:/etc/localtime:ro
      - /run/dbus:/run/dbus:ro
    depends_on:
      - mariadb

  mariadb:
    container_name: mariadb
    image: mariadb:latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Moscow
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_HA_DATABASE}
      - MYSQL_USER=${MYSQL_HA_USER}
      - MYSQL_PASSWORD=${MYSQL_HA_PASSWORD}
    ports:
      - 3306:3306
    volumes:
      - ./mariadb:/var/lib/mysql

  phpmyadmin:
    container_name: phpmyadmin
    image: phpmyadmin:latest
    restart: unless-stopped
    environment:
      - PMA_HOST=mariadb
      #- PMA_USER=root
      #- PMA_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
    volumes:
      - ./phpmyadmin/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php
    ports:
      - 8090:80
    depends_on:
      - mariadb

  mosquitto:
    container_name: mosquitto
    image: eclipse-mosquitto:latest
    restart: unless-stopped
    stdin_open: true
    tty: true
    environment:
      - TZ=Europe/Moscow
    volumes:
      - ./mosquitto/config:/mosquitto/config
      - ./mosquitto/data:/mosquitto/data
      - ./mosquitto/log:/mosquitto/log
    ports:
      - 1883:1883/tcp

  zigbee2mqtt:
    container_name: zigbee2mqtt
    image: koenkk/zigbee2mqtt:latest
    restart: unless-stopped
    devices:
      - ${ZIGBEE_ADAPTER_TTY}:/dev/ttyACM0
    environment:
      - TZ=Europe/Moscow
    volumes:
      - ./zigbee2mqtt:/app/data
      - /run/udev:/run/udev:ro
    ports:
      - 8020:8020
    depends_on:
      - mosquitto

  esphome:
    container_name: esphome
    image: esphome/esphome:latest
    restart: unless-stopped
    privileged: true
    network_mode: host
    environment:
      - TZ=Europe/Moscow
      - ESPHOME_DASHBOARD_USE_PING=true
    volumes:
      - ./esphome/config:/config
      - /etc/localtime:/etc/localtime:ro

  nodered:
    container_name: nodered
    image: nodered/node-red:latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Moscow
    volumes:
      - ./nodered:/data
    ports:
      - 1880:1880/tcp
    depends_on:
      - homeassistant
      - mosquitto

  code-server:
    image: lscr.io/linuxserver/code-server:latest
    container_name: code-server
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Moscow
    volumes:
      - ./:/config/workspace
    ports:
      - 8443:8443
ЕвгенийЕвгений
20 июля 2023

Хорошие статьи. А где у Вас можно взять полный docker-compose.yml файл?