Avec Docker il est très facile de déployer des "machines" de tests qui n'auront pas beaucoup d'impact si tout n'est pas remonté dans les 30mn en cas de crash. Mais dans le cas d'une infra en production il est important de pouvoir remonter une "machine" à l'état identique avant un crash. Par identique j'entends données et paramètres. Docker intègre tout ce qu'il faut pour sauvegarder les données mais rien pour les paramètres de lancement du container.
Sauvegarde et restauration d'une image
J'utilise les outils proposé par Docker
# docker save -o /save/mon-image.tar mon-image
Pour la restauration
# docker load -i /tmp/mon-image.tar
Pour visualiser le résultat utiliser la commande
# docker images
Votre image doit apparaître. Maintenant il faut lancer le container mais comme il tourne depuis de nombreux mois vous ne vous rappelez pas des paramètres de lancement et bien sûr plus de trace du Dockerfile.
Sauvegarder les paramètres d'un container
Pour le moment il n'existe pas d'outils intégré donc il va falloir jongler avec docker et rekcod (merci palm123 de linuxfr). Pour obtenir l'état d'un container il faut utiliser
# docker inspect test
[ { "Id": "bfe527876bc3d27b9db1a46cf9f1f82510465327daace81c7a74b3d360f7a507", "Created": "2018-03-12T14:04:00.858259025Z", "Path": "/bin/bash", "Args": [], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 17803, "ExitCode": 0, "Error": "", "StartedAt": "2018-03-12T14:04:01.329352727Z", "FinishedAt": "0001-01-01T00:00:00Z" }, [...] ]
Vous obtenez une sortie en json. Je vous laisse analyser votre sortie mais tout ce qu'il nous faut est présent. Reste plus qu'à le transformer en commande docker.
# docker inspect test > /tmp/test.json
# rekcod test.json > /tmp/test.doc
# cat /tmp/test.doc
docker run --name test -p 2223:22/tcp --net bridge --restart no -h 75cf1a36c945 --expose 22/tcp -e 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' -e 'LANG=fr_FR.utf8' -d -t -i --entrypoint "/bin/bash" test:latest
Et voilà vous pouvez lancer la commande contenu dans le fichier. Après il vous reste plus qu'à intégrer tout ça dans votre processus de sauvegarde.