Loading...
05-09-2019

Onverwacht bleek dat de root partitie van mijn server vol gelopen was. Ik gokte al direct goed dat dit door de docker images komt. Dit kan namelijk best hard oplopen als er veel updates op images zijn geweest. Standaard wordt deze storage op /var/lib/docker opgeslagen en aangezien dit op de root partitie staat in mijn geval, liep de disk ruimte hard achteruit. Het opruimen van de ongebruikte docker images kan simpel worden uitgevoerd. Let wel op dat alle images die niet gebruikt worden op dat moment, opgeruimd worden.

# docker system prune

De Ubuntu 18.04 server bestaat uit 2 partities. 1 Voor alle systeem mappen en 1 waar de data van de diverse projecten staan. Ik zou de storage dan ook graag verplaatsen naar de 2de partitie. Het verplaatsen zou relatief simpel moeten zijn, let wel dat een aantal beschrijvingen een oudere methode weergeven, die niet meer werkt.

Zo wordt er beschreven dat je de opstart van dockerd (/lib/systemd/system/docker.service) kan aanpassen. Doe dit niet! Dit is niet verstandig, omdat dit bestand door de package manager wordt beheerd. Bij een update zou hij dus overschreven kunnen worden.

Overigens, het gaat hier om Docker versie 18.09. Beter is om een extra configuratie bestand toe te voegen (als deze nog niet bestaat). Nog een extra detail is dat partitie 2 een ZFS partitie is. Het bleek dat Docker niet start en daarbij geen duidelijke foutmelding geeft. De oplossing was om als storage-driver ZFS aan te geven in hetzelfde configuratie bestand.

De eerste stap is het opschonen van de docker en het stoppen van de service, en vervolgens controleren of er geen docker instantie meer actief is:

# docker system prune
# systemctl stop docker
# ps aux | grep -i [d]ocker

Vervolgens maken we een nieuwe directory, verplaatsen de docker storage directory en optioneel maken we een symbolic link naar de nieuwe lokatie

# mkdir /new/path/docker
# mv -r /var/lib/docker/* /new/path/docker
# ln -s /new/path/docker /var/lib/docker

Hierna moet de configuratie aangepast worden. Maak of edit het daemon.json bestand en pas de data-root en de storage-driver aan:

# nano /etc/docker/daemon.json

{
    "data-root": "/new/path/docker",
    "storage-driver": "zfs"
}

# systemctl start docker

Hierna zou alles weer moeten opstarten. Bij mij ging het niet goed, omdat de data via rsync gekopieerd was, waarbij er blijkbaar iets niet 100% was. Omdat ik alles via docker-compose doe en alle data in lokale directories opsla (inclusief de data directories van MySql), was het een kwestie om alle applicaties via 'docker-compose up -d' opnieuw te starten. Alle applicaties draaiden verder zonder problemen.

Sources:

  • Docker
  • Linux
  • Ubuntu
  • ZFS