Если хочешь использовать Docker с Proxmox, у тебя есть 3 варианта: запускать Docker в VM, запускать Docker в LXC или запускать Docker напрямую на узле PVE. Вот небольшое руководство для 3-го варианта.
Обрати внимание: всё нужно выполнять от имени root.
Включи файрвол в графическом интерфейсе PVE (хотя бы на уровне центра обработки данных). Даже если ты не используешь файрвол в Proxmox, включи его (просто установи политику по умолчанию на ACCEPT), потому что Docker использует netfilter.
Подготовь iptables для Docker:
```
iptables -N DOCKER-USER;
iptables -I DOCKER-USER -j ACCEPT
```
Тебе нужно сделать эту настройку постоянной. Например, отредактируй /etc/network/interfaces и добавь её в качестве пре-up скрипта для интерфейса "lo":
```
auto lo
iface lo inet loopback
pre-up iptables -N DOCKER-USER;
iptables -I DOCKER-USER -j ACCEPT
```
Обрати внимание: возможно, существуют лучшие способы добиться этого, но вышеописанное "работает для меня"...
Подготовь файловую систему примерно так:
```
zfs create -o mountpoint=/var/lib/docker rpool/docker-root
zfs create -o mountpoint=/var/lib/docker/volumes rpool/docker-volumes
chmod 700 /var/lib/docker/volumes
```
Если ты используешь zfs-auto-snapshot, тебе стоит рассмотреть следующее:
```
zfs set com.sun:auto-snapshot=false rpool/docker-root
zfs set com.sun:auto-snapshot=true rpool/docker-volumes
```
Создай /etc/docker/daemon.json со следующим содержимым:
```json
{
"storage-driver": "zfs"
}
```
Добавь /etc/apt/sources.list.d/docker.list со следующим содержимым:
```
deb [arch=amd64] buster stable
# deb-src [arch=amd64] buster stable
```
Установи Docker:
```
apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL | sudo apt-key add -
apt update
apt install docker-ce docker-ce-cli containerd.io
```
Тебе может понадобиться это:
```
usermod -aG docker your-user
```
Воilà! Твой Docker должен быть готов!
Протестируй:
```
docker run hello-world
```
Опция: Установи Portainer
```
zfs create rpool/docker-volumes/portainer_data
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
```
Можно опустить первую строку, если не хочешь иметь отдельный набор данных для Docker-тома (плохая идея).
Перейди по адресу и сконфигурируй.
Обрати внимание: всё нужно выполнять от имени root.
Включи файрвол в графическом интерфейсе PVE (хотя бы на уровне центра обработки данных). Даже если ты не используешь файрвол в Proxmox, включи его (просто установи политику по умолчанию на ACCEPT), потому что Docker использует netfilter.
Подготовь iptables для Docker:
```
iptables -N DOCKER-USER;
iptables -I DOCKER-USER -j ACCEPT
```
Тебе нужно сделать эту настройку постоянной. Например, отредактируй /etc/network/interfaces и добавь её в качестве пре-up скрипта для интерфейса "lo":
```
auto lo
iface lo inet loopback
pre-up iptables -N DOCKER-USER;
iptables -I DOCKER-USER -j ACCEPT
```
Обрати внимание: возможно, существуют лучшие способы добиться этого, но вышеописанное "работает для меня"...
Подготовь файловую систему примерно так:
```
zfs create -o mountpoint=/var/lib/docker rpool/docker-root
zfs create -o mountpoint=/var/lib/docker/volumes rpool/docker-volumes
chmod 700 /var/lib/docker/volumes
```
Если ты используешь zfs-auto-snapshot, тебе стоит рассмотреть следующее:
```
zfs set com.sun:auto-snapshot=false rpool/docker-root
zfs set com.sun:auto-snapshot=true rpool/docker-volumes
```
Создай /etc/docker/daemon.json со следующим содержимым:
```json
{
"storage-driver": "zfs"
}
```
Добавь /etc/apt/sources.list.d/docker.list со следующим содержимым:
```
deb [arch=amd64] buster stable
# deb-src [arch=amd64] buster stable
```
Установи Docker:
```
apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL | sudo apt-key add -
apt update
apt install docker-ce docker-ce-cli containerd.io
```
Тебе может понадобиться это:
```
usermod -aG docker your-user
```
Воilà! Твой Docker должен быть готов!
Протестируй:
```
docker run hello-world
```
Опция: Установи Portainer
```
zfs create rpool/docker-volumes/portainer_data
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
```
Можно опустить первую строку, если не хочешь иметь отдельный набор данных для Docker-тома (плохая идея).
Перейди по адресу и сконфигурируй.

Когда ты запускаешь Docker напрямую на узле pve, ты получаешь потенциально более высокую производительность и прямой доступ к zfs (хорошо). Возможно, ты заметишь проблемы со связью по сети между контейнерами Docker и lxc на том же узле. (плохо) У меня не было времени это расследовать и подстраивать... 