Я хочу создать персональную облачную службу в контейнере докеров на Raspberry Pi. Из-за ограниченного хранилища и долговечности SD-карт я хочу создать базу данных на внешнем диске достаточной емкости.
Сначала я столкнулся с проблемой монтирования в контейнере и смог решить эту проблему, создав привилегированный контейнер. Теперь я хотел использовать autofs.service
для автоматического монтирования диска в желаемое место, но systemd
отсутствует. После некоторого чтения я обнаружил, что использовать его в контейнере не рекомендуется.
Итак, как мне проще всего автоматизировать диск? Куда идти?
Я считаю, что правильный способ сделать это - смонтировать внешний диск в вашей хост-системе, а затем сопоставить том с контейнером при запуске.
Я приведу базовый пример с контейнером 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
), а не именованный том.