Docker host telepítése (Fossa)

Innen: AdminWiki

Vázlatos, kritikával olvasd!

Docker házirend

  • Ebben a leírásban egy standalone szervergépen (nem swarm-ban) futtatunk egymástól független dockerezett szolgáltatásokat.
  • Minden szolgáltatást egy-egy docker-compose.yml állomány definiál.
  • A szolgáltatásokat azonos, nem sudo-képes, dedikált Linux felhasználó (dockeradmin) nevében futtatjuk.
  • A szolgáltatások számára a szervergép
    • közös külső IP-t,
    • hálózati forgalomirányítást,
    • közös web reverse proxyt,
    • SMTP smarthostot (technikai levelezést) és
    • periodikus (napi) mentést (DB dump, fájlterület time machine (git) vagy tar.gz) biztosít.
  • A szolgáltatásokat kiszolgáló közös scriptek a dockeradmin HOME/bin könyvtárában találhatóak.
  • A szolgáltatásokhoz kapcsolódó valamennyi egyedi állomány (specifikus kód, karbantartó script, konfiguráció, adat, helyi mentés, log, stb.) egyetlen könyvtárszerkezetben, a dockeradmin $HOME/services/<szolgáltatás neve> könyvtárban (szolgáltatáskönyvtár) található.
  • A szolgáltatáskönyvtárak azonos skeletonból jönnek létre.

TODO!

Telepítés

A Docker (community edition) telepíthető az Ubuntu repositoryból (docker.io, Debian way), vagy a docker.com repositoryból (docker-ce, Golang way). A fő különbség, hogy a docker.ce statikusan linkelt (az összes függőségével egybecsomagolva érkezik), míg a docker.io esetében a függőségeket a Debian/Ubuntu kezeli (ami jelentős erőfeszítést igényel a maintainer-től). A Debian-way mellett szólhat a kiterjedtebb security- és tesztelési mechanizmus; ellene szólhat a kétely, hogy képes lesz-e lépést tartani a Docker kiadásaival az LTS támogatás teljes időtartamában.

Mivel mindkét kiadás egyazon operációs rendszer alá nem telepíthető, választanunk kell közülük. Jelen leírásban a Debian way-t preferálom.

docker.io

A szokásos módon telepíthető:

sudo apt install docker.io docker-compose  # Sok függőség, elsősorban Python

docker-ce

TODO!

Beállítások

Automatikus indítás

A telepített engine nem fut automatikusan, ezt külön engedélyezni kell:

sudo systemctl enable --now docker
sudo systemctl status docker
sudo systemctl start docker  # ha nem futna

Ezután az engine elindul, és a szervergép újraindításakor is automatikusan futni kezd.

Kezelési jog nem sudo-képes felhasználóknak

A Docker engine (sudo használata nélküli) kezelésére a docker Linux csoport tagjai jogosultak, ezért a dockeradmin felhasználót ebbe a csoportba fel kell venni:

sudo usermod -aG docker dockeradmin

A következő belépéstől kezdve a dockeradmin felhasználó már kiadhatja a Docker kezelő parancsokat.

Tűzfalbeállítások (UFW) módosítása a Docker használatához

Alapértelmezésben az UFW blokkolja a szolgáltatások (Docker image-ek) kommunikációját a host gépen futó szolgáltatásokkal (pl. levélküldés a host MTA-n keresztül). Engedélyezzük a szolgáltatások alhálózatairól és a host gép közötti forgalmat korlátozások nélkül (átgondolni: TODO!):

sudo ufw allow in  from 172.17.0.0/16 to any
sudo ufw allow out from any to 172.17.0.0/16

Alapértelmezésben a Docker által exportált portok kívülről láthatóak lesznek annak ellenére, hogy az UFW-ban nem engedélyeztük ezeket az in szabályokban.

TODO!

Levélküldés engedélyezése a dockerezett szolgáltatások számára

Hasznos lehet, ha a szolgáltatások is igénybe vehetik a korábban beállított technikai levélküldést. Ehhez engedélyezzük a mail relay-t a Postfixben a Docker networkök felől is:

sudo mcedit /etc/postfix/main.cf

[...]
mynetworks = 127.0.0.0/8 [...] 172.17.0.0/16
[...]

sudo systemctl restart postfix

Gyorsteszt

dockeradmin felhasználóként bejelentkezve futtassuk le a hello-world példa image-et:

docker run hello-world

Siker esetén a Docker alapfunkciói használhatóak.

Docker host szolgáltatások

Irodalom