docker: поддержка nfs томов

This commit is contained in:
Alexander Zhirov 2022-06-24 10:22:34 +03:00
parent 239832b1f0
commit 73fb121fda
1 changed files with 77 additions and 3 deletions

View File

@ -8,7 +8,7 @@
docker system prune -a docker system prune -a
``` ```
### image ## image
Список загруженных `image`: Список загруженных `image`:
@ -74,7 +74,7 @@ docker load < image.tar.gz
docker load --input image.tar docker load --input image.tar
``` ```
### container ## container
Список контейнеров: Список контейнеров:
@ -116,7 +116,7 @@ docker run --restart always --name mynginx -p 8080:80 -d nginx:alpine
- `-d` - запустить контейнер в фоновом режиме (*detached mode*) - `-d` - запустить контейнер в фоновом режиме (*detached mode*)
- `nginx:alpine` - имя образа `image`, на основе которого запускается контейнер - `nginx:alpine` - имя образа `image`, на основе которого запускается контейнер
### volume ## volume
Список `volume`: Список `volume`:
@ -135,3 +135,77 @@ docker volume rm volume_name volume_name
```sh ```sh
docker volume prune docker volume prune
``` ```
### Монтирование `volume`
#### Использование `nfs`
При монтировании сетевого `volume` типа `nfs` необходимо убедиться, что права (`uid` и `gid`) расшариваемого каталога, установленные **на сервере**, совпадают с правами пользователя, от которого выполняется запуск контейнера, а также выставлены правильные права на расшариваемый каталог в файле `/etc/exports` **на сервере** `nfs`.
Т.е., необходимо, чтобы **на сервере**, где поднят `nfs-server` в файле `/etc/exports` были правильно указаны права (`uid` и `gid`) каталогу, который будет расшариваться и использоваться в качестве `volume`, и сам расшариваемый каталог обладал соответствующими правами (`uid` и `gid`).
**Например:**
Необходимо поднять контейнер `gitea` с использованием `nfs` тома. Т.к. `gitea` запускается с правами `1000:1000` - то и производит запись в `volume` от этих же прав.
К примеру, на `nfs` сервере необходимо использовать каталог `/volumes/gitea` в качестве расшариваемого ресурса для использования в качестве `volume` для `gitea`.
В файле `/etc/exports` внести запись:
```sh
/volumes/gitea <ip-address>(rw,sync,insecure,all_squash,anonuid=1000,anongid=1000,no_subtree_check,nohide,fsid=1)
```
где `<ip-address>` необходимо указать IP-адрес или подсеть
Установить права `1000:1000` на расшариваемый каталог:
```sh
chown 1000:1000 /volumes/gitea
```
**Для проверки** можно произвести монтирование каталога в `host` системе, где установлен `docker`. К примеру, каталог для монтирования указан в `/mnt/volumes/gitea`:
```sh
mount -t nfs <ip-address>:/volumes/gitea /mnt/volumes/gitea
```
Каталог в `host` системе будет смонтирован с правами `1000:1000`.
##### Создание `volume` вручную
Создание `volume` с использованием `nfs` тома:
```sh
docker volume create --driver local --opt type=nfs --opt o=addr=192.168.1.1,nfsvers=4,rw,async,rw --opt device=:/volumes/gitea gitea_data
```
##### Создание `volume` в `compose`
Для использования `nfs` тома в `docker-compose` необходимо указать в секции `volume` свой том и в сервисе указать используемый `volume`:
```sh
...
services:
gitea:
...
volumes:
- type: volume
source: gitea
target: /data
- /etc/timezone:/etc/timezone:ro
...
...
volumes:
gitea:
driver: local
driver_opts:
type: nfs
o: addr=192.168.1.1,nfsvers=4,rw,async
device: ":/volumes/gitea"
...
```