Inici automàtic dels Dockers mitjançant systemd
El problema del VPS en Azure amb Dockers
Actualment, el VPS que allotja totes les pràctiques del Seminari 7 de PHP està allotjat a Azure.
El problema de tenir el VPS a Azure és que els seus preus són molt poc competitius, ja que un conjunt de recursos prou reduït per provocar despeses molt elevades. En canvi, amb OVH és possible obtenir pràcticament el mateix servei amb els mateixos resultats amb un preu reduït pràcticament del 90%.
Això provoca que s'hagi d'aturar el VPS cada cop que no es faci servir per estalviar diners.
El fet d'apagar el VPS comporta l'aturament de tots els dockers, i cada cop que es torna a posar en producció s'ha d'iniciar-los manualment.
És per això que es definirà un servei de systemd que executarà un script per aixecar tots els contenidors Docker que estiguin aturats cada cop que el sistema s'iniciï
Creació de l'script
Primerament, crearem un script amb nom iniciDockers.sh dins del directori /usr/sbin/ amb el següent contingut
#!/bin/bash docker start $(docker ps -a -q -f status=exited)
Aquest script fa servir l'ordre docker start per aixecar un contenidor Docker, però enlloc d'especificar un Docker en concret, executem l'ordre docker ps -a per llistar els Dockers, indicant:
- -q: que únicament retorni els ID dels Dockers
- -f status=exited: que retorni els que tingui l'estat "exited", és a dir, aturats
D'aquesta manera, docker ps -a -q -f status=exited retorna tots els ID dels contenidors actualment aturats i l'ordre docker start els inicïa
Per últim, caldrà donar permisos d'execució al script
sudo chmod +x iniciDockers.sh
Creació del servei de systemd
Un cop creat l'scrip, crearem el servei de systemd que executarà l'script. Per això, dins del directori /etc/systemd/system/ crearem un arxiu anomenat iniciDockers.service.
[Unit] Description= Servei de copies de seguretat Requires=docker.service After=docker.service [Service] Type=simple ExecStart=/usr/sbin/iniciDockers.sh User=guseba # Necessari per poder fer que el servei s'executi al iniciar el sistema [Install] WantedBy=multi-user.target
Un cop creat, habilitarem el servei per tal que s'executi quan el sistema arranqui
sudo systemctl daemon-reload sudo systemctl enable iniciDockers.service