Как правильно монтировать внешний диск в докер-контейнер?

Я хочу создать персональную облачную службу в контейнере докеров на Raspberry Pi. Из-за ограниченного хранилища и долговечности SD-карт я хочу создать базу данных на внешнем диске достаточной емкости.

Сначала я столкнулся с проблемой монтирования в контейнере и смог решить эту проблему, создав привилегированный контейнер. Теперь я хотел использовать autofs.service для автоматического монтирования диска в желаемое место, но systemd отсутствует. После некоторого чтения я обнаружил, что использовать его в контейнере не рекомендуется.

Итак, как мне проще всего автоматизировать диск? Куда идти?

0
задан 6 July 2021 в 19:17

1 ответ

Я считаю, что правильный способ сделать это - смонтировать внешний диск в вашей хост-системе, а затем сопоставить том с контейнером при запуске.

Я приведу базовый пример с контейнером NextCloud .

Итак, смонтируйте внешний диск в вашей хост-системе обычным образом - скажем, вы монтируете его в / mnt / my-data .

Затем вы хотите создать каталог для данных NextCloud:

$ mkdir /mnt/my-data/nc-data

Затем при запуске образа контейнера NextCloud предоставьте информацию для сопоставления тома с внутренним каталогом данных NextCloud:

$ docker run -d \
-v /mnt/my-data/nc-data:/var/www/html \
nextcloud

Если вам нужна внешняя база данных , сделайте то же самое для MariaDB:

$ mkdir /mnt/my-data/nc-mariadb

$ docker run -d \
-v /mnt/my-data/nc-mariadb:/var/lib/mysql \
mariadb

Убедитесь, что владелец и разрешения для каталогов данных совпадают с правами запущенного контейнера.

Я считаю, что проще всего использовать docker-compose для создания полного установочного файла всего стека контейнеров. Используя приведенный выше пример и файл docker-compose , показанный в Docker Hub, результатом будет следующее:

version: '2'

services:
  db:
    image: mariadb
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - /mnt/my-data/nc-mariadb:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    restart: always
    ports:
      - 8080:80
    links:
      - db
    volumes:
      - /mnt/my-data/nc-data:/var/www/html
    environment:
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db

Обратите внимание, что раздел «тома» отсутствует, поскольку мы сопоставляем абсолютный путь на вашем хост-система ( / mnt / my-data / nc-xxxx ), а не именованный том.

0
ответ дан 28 July 2021 в 11:21

Другие вопросы по тегам:

Похожие вопросы: