Docker host telepítése (Fossa)
Vázlatos, kritikával olvasd!
Tartalomjegyzék
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
- How to Install Docker On Ubuntu 20.04 LTS Focal Fossa (Linuxconfig.org)
- Install Docker Engine on Ubuntu (Docker Docs)
- What is docker.io in relation to docker-ce and docker-ee? (StackOverflow)
- The docker.io Debian package is back to life (Collabora)
- Post-installation steps for Linux (Docker Docs)
- To Fix The Docker and UFW Security Flaw Without Disabling Iptables (GitHub)