Utiliser Docker Auto-compose pour générer des docker-compose de vos containers existants

Nincha

Chevalier Jedi
27 Octobre 2021
329
96
68
Seine et Marne
Professionnel
Non
Hello,

tuto sans prétention vu que je ne fais que transposer en français une info trouvée sur le forum d'openmediavault.
Mes excuses par avance si le tuto est déjà existant, j'ai fait une recherche dans cette section avec autocompose et rien trouvé.
Source openmediavault: Any way to create a docker-compose.yml from installed containers?

  1. Installer git
    Bash:
    sudo apt update
    sudo apt install git
  2. Se placer là où l'on a ses images, ou à l'endroit de son choix
    Bash:
    cd /home/docker1
  3. Récupérer le projet docker-autocompose (source) (ne pas créer de dossier, git le fera pour vous)
    Bash:
    sudo git clone https://github.com/Red5d/docker-autocompose.git
  4. Se placer dans le dossier créer
    Bash:
    cd /home/docker1/docker-autocompose
  5. Construire l'image (ne pas oublier le point à la fin)
    Bash:
    sudo docker build -t red5d/docker-autocompose .
  6. Créer le fichier bash (j'ai dû le créer un cran au dessus dans l'arborescence sinon celà ne trouvait pas l'image docker)
    Bash:
    cd ../
    touch run_backup_compose_containers.sh
  7. Editer le fichier précédemment créé
    Bash:
    nano run_backup_compose_containers.sh
  8. Copier coller les lignes suivantes dans le fichier précédemment créé (ne crééra des docker-compose QUE pour les containers actuellement en fonction. Si vous voulez TOUT sauvegarder avec ceux qui ne tournent pas, il faut ajouter -a entre 'docker ps' et '--no-trunc' sur la première ligne).
    Pensez bien à remplacer la valeur de "Path" par le chemin vers lequel vous voulez stocker vos fichiers
    Le "-v 3" n'est pas obligatoire sur la ligne du docker run car c'est le paramètre qui permet de régler la version du docker compose (donc ici 3), mais celà vous permet de régler plus facilement si vous voulez du compose 2 ou 1 ;-)
    Bash:
    Containers=$(docker ps --no-trunc --format "{{.ID}};{{.Names}}")Date=$(date +%Y-%m-%d-%H%M)
    Path="/home/user/Containers_config/$Date/"
    
    mkdir -p "$Path"
    echo "$Containers" | while IFS= read -r line; do
       echo "$line" | while IFS=';' read ID Name; do
              docker run --rm -v /var/run/docker.sock:/var/run/docker.sock red5d/docker-autocompose -v 3 "$ID" > "$Path/$Name.yml"
              echo "$ID $Name"
         done
    done
  9. Rendre le fichier executable:
    Bash:
    chmod +x run_backup_compose_containers.sh
  10. Lancer !
    Bash:
    ./run_backup_compose_containers.sh
  11. CONTROLER que vos fichiers compose sont bien générés avant toute autre opération irréversible ;-) (genre tout supprimer ou faire une clean install)
En espérant que celà puisse en aider certains!
Je découvre docker-compose (je m'appête à passer de omv4 à omv6 donc je fais mes sauvegardes), donc n'hésitez pas à me dire si j'ai indiqué une bêtise ou s'il manque un point important ^^
 
Merci pour la découverte. Faisait tout de base en docker-compose je ne l'utiliserai pas mais c'est sympa pour qui veut basculer ses conteneurs existants en compose !

Attention tout de meme aux conteneurs avec des réglages particulier comme par exemple SYS_ADMIN, des limites de mémoire, ou des adresse IP que celui soit bien pris en compte !
 
Effectivement je pense que ça ne servira qu'à ceux qui comme moi veulent faire la transition.
Bon je constate au passage que mes containers ont beaucoup de permissions dans la section cap_add... Je vais comparer avec ceux que tu as déjà fait dans les tutos, ça me permettra au passage d'être plus restrictif sur mes configs.
Exemple sur mon Swag:
1655638950699.png
 
  • Wow
Réactions: EVO
Le conteneur SWAG a uniquement besoin de :

Code:
    cap_add:
      - NET_ADMIN

et cela est uniquement nécessaire a Fail2Ban pour pouvoir faire des modification des règles iptables sur l’hôte.
 
Portainer c'est pas mal amélioré sur la prise en charge des composes. Malgré tout, j'ai garder pour abitude de toujours créer mles conteneurs en SSH, pour éviter les problemes avec par exemple des arguments non pris en charge, ...