serveurs:installation:docker

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
serveurs:installation:docker [2023/05/10 07:19] – [Installer Docker] jpmilcentserveurs:installation:docker [2024/12/19 19:30] (Version actuelle) – [Déplacer le dossier contenant les données de Docker] jpmilcent
Ligne 23: Ligne 23:
   * Ajouter l'utilisateur //admin// au groupe //docker//  : ''usermod -aG docker admin''   * Ajouter l'utilisateur //admin// au groupe //docker//  : ''usermod -aG docker admin''
     * Se connecter sur une console avec l'utilisateur //admin// et tester Docker : ''docker run hello-world''     * Se connecter sur une console avec l'utilisateur //admin// et tester Docker : ''docker run hello-world''
-    * Si le message d'erreur ''docker: Got permission denied while trying to connect to the Docker daemon socket'' apparaitredémarrer la machine pour activer la prise en compte de Docker+    * Si le message d'erreur ''docker: Got permission denied while trying to connect to the Docker daemon socket'' apparait 
 +      * Essayer de sourcer à nouveau le fichier ''.bashrc'' : ''source ~/.bashrc'' 
 +      * Essayer de redémarrer la machine pour activer la prise en compte de Docker
     * Tester à nouveau le bon fonctionnement de Docker : ''docker run hello-world''     * Tester à nouveau le bon fonctionnement de Docker : ''docker run hello-world''
  
Ligne 52: Ligne 54:
 </code> </code>
   * Créer le dossier de destination des données de Docker : ''sudo mkdir /data/docker''   * Créer le dossier de destination des données de Docker : ''sudo mkdir /data/docker''
-  * Copier les données dans le nouveau dossier : ''rsync -avxP /var/lib/docker/ /data/docker''+  * Copier les données dans le nouveau dossier : ''rsync -avxPS /var/lib/docker/ /data/docker''
     * Vérifier que les tailles des 2 dossiers correspondent : ''du -hs /var/lib/docker/; du -hs /data/docker''     * Vérifier que les tailles des 2 dossiers correspondent : ''du -hs /var/lib/docker/; du -hs /data/docker''
   * Renommer l'ancien dossier : ''mv /var/lib/docker /var/lib/docker.old''   * Renommer l'ancien dossier : ''mv /var/lib/docker /var/lib/docker.old''
   * Redémarrer le service Docker : ''systemctl start docker''   * Redémarrer le service Docker : ''systemctl start docker''
     * Vérifier le statut : ''systemctl status docker''     * Vérifier le statut : ''systemctl status docker''
-  * Accéder aux interfaces web des outils utilisant Docker, si Portainer est installé vérifier le paramètre //Root directory// de l'hôte.+  * Vérifier le nouvel emplacement : 
 +    * ''docker info | grep 'Docker Root Dir' '' 
 +    * Accéder aux interfaces web des outils utilisant Docker, si Portainer est installé vérifier le paramètre //Root directory// de l'hôte. 
 +  * Vérifier que les containers ont démarrés et fonctionnent comme prévu : ''docker ps''
   * Si tout est ok, supprimer l'ancien dossier : ''rm -rf /var/lib/docker.old''   * Si tout est ok, supprimer l'ancien dossier : ''rm -rf /var/lib/docker.old''
 ===== Installer Docker Compose ===== ===== Installer Docker Compose =====
 +  * Dans les versions récentes de Docker, Compose est directement intégré à la commande ''docker''. Si la commande suivante afficher la version de Compose, inutile de suivre les étapes suivantes : ''docker compose version''
   * Installer //docker-compose// v2 : ''apt install docker-compose-plugin''   * Installer //docker-compose// v2 : ''apt install docker-compose-plugin''
-  * Vérifier la version installée : ''docker --help |grep compose''+  * Vérifier la version installée : ''%%docker --help |grep compose%%''
   * NOTES : supprimer l'ancienne version v1 télécharger manuellement : ''rm -f /usr/local/bin/docker-compose ; rm -f /etc/bash_completion.d/docker-compose''   * NOTES : supprimer l'ancienne version v1 télécharger manuellement : ''rm -f /usr/local/bin/docker-compose ; rm -f /etc/bash_completion.d/docker-compose''
  
 +===== Activer IPv6 pour Docker =====
 +  * Éditer le fichier ///etc/docker/daemon.json// : ''vi /etc/docker/daemon.json''
 +  * Ajouter les paramètres suivant : <code javascript>
 +{
 +    "ipv6": true,
 +    "fixed-cidr-v6": "c01d:c01a:cafe::/64",
 +    "experimental": true,
 +    "ip6tables": true
 +}
 +</code>
 +  * Redémarrer Docker : ''systemctl restart docker''
 +  * Vérifier la prise en compte d'IPv6 dans le réseau par défaut : ''docker network inspect bridge|grep EnableIPv6''
 +  * Si vous avez déjà créer votre réseau local Docker (Ex. //nginx-proxy//) :
 +    * éteindre tous les containers via Portainer par exemple.
 +    * supprimer votre réseau : ''docker network rm nginx-proxy''
 +    * [[serveurs:installation:docker#creation_d_un_reseau_local_docker|créer à nouveau le réseau externe (nginx-proxy) avec l'activation d'IPv6]]
 +    * Redémarrer toutes les stacks avec : ''docker compose down; docker compose up -d''
 +  * Si vous utiliser le container [[https://hub.docker.com/r/nginxproxy/nginx-proxy|nginxproxy/nginx-proxy]] activer l'écoute sur les IPv6 en plus d'IPv4: <code yaml>
 +    ports:
 +      - "0.0.0.0:80:80"
 +      - "0.0.0.0:443:443"
 +      - "[::]:80:80"
 +      - "[::]:443:443"
 + </code>
 +    * Vous pouvez vérifier la bonne écoute sur les ports 80 et 443 de l'IPv6 locale avec : ''ss -6ltpn''
 +  * Si vous utiliser [[https://hub.docker.com/r/nginxproxy/docker-gen|nginxproxy/docker-gen]], activer le support d'IPv6 dans le fichier //docker-compose.yml// :<code yaml>
 +    environment:
 +      ENABLE_IPV6: true
 + </code>
 +  * Tester la connectivité IPv6 vers votre site web avec : https://ready.chair6.net/
 ===== Création d'un réseau local Docker ===== ===== Création d'un réseau local Docker =====
-  * Créer un réseau local de type bridge "utilisateur" avec : ''<nowiki> docker network create --driver=bridge --subnet=172.18.5.0/24 --ip-range=172.18.5.0/24 --gateway=172.18.5.1 nginx-proxy </nowiki> ''+  * Créer un réseau local de type bridge "utilisateur" compatible IPv4 et IPv6 avec : ''<nowiki> docker network create --driver=bridge --ipv6 --subnet=172.18.5.0/24 --ip-range=172.18.5.0/24 --subnet a1f:ea75:ca75::/48 --gateway=172.18.5.1 nginx-proxy</nowiki> ''
     * Ainsi, depuis un container associé à ce réseau, il est possible d'adresser l'hôte avec l'IP de la gateway, soit : 172.18.5.1     * Ainsi, depuis un container associé à ce réseau, il est possible d'adresser l'hôte avec l'IP de la gateway, soit : 172.18.5.1
-    * De limiter les accès sur un outil de l'hôte aux IP des container de ce réseau qui seront créé parmis (<nowiki>--ip-range</nowiki>) : 172.18.5.0/24 +    * De limiter les accès sur un outil de l'hôte aux IP des container de ce réseau qui seront créé parmi (<nowiki>--ip-range</nowiki>) : 172.18.5.0/24 
- + 
 +===== Activer l'API Docker sur l'instance ===== 
 +Voir la [[serveurs:installation:db-srv:docker-api|documentation d'activation de l'API Docker]].
 ===== Mise à jour de Docker et Docker Compose ===== ===== Mise à jour de Docker et Docker Compose =====
-La mise à jour se fait via le système de paquet de Debian à l'aide de aptitude+  * La mise à jour se fait via le système de paquet de Debian à l'aide d'Apt
-Suite à une mise à jour de Docker sur l'instance "db", il est nécessaire de [[serveurs:installation:db-srv:docker-api|mettre à jour le fichier systemd]] s'il n'a pas encore été surchargé.+  Suite à une mise à jour de Docker sur l'instance "db", il est nécessaire de [[serveurs:installation:db-srv:docker-api|mettre à jour le fichier systemd]] s'il n'a pas encore été surchargé.
  
 ===== Copier les fichiers docker-compose.yml depuis le dépôt Github sinp-<region>-srv ===== ===== Copier les fichiers docker-compose.yml depuis le dépôt Github sinp-<region>-srv =====
Ligne 87: Ligne 125:
   * Pour chaque serveur, synchroniser ces fichiers avec le serveur correspondant en utilisant ''rsync'' :   * Pour chaque serveur, synchroniser ces fichiers avec le serveur correspondant en utilisant ''rsync'' :
     * Se placer à la racine du dépôt     * Se placer à la racine du dépôt
-    * Lancer la commande ''rsync'' suivante, ici pour //web-srv// et le dossier ///web-srv/home/admin/docker// avec l'option ''--dry-run'' (à supprimer quand tout est ok) : <code bash> rsync -av ./web-srv/home/admin/docker/ admin@web-<region>-sinp:/home/admin/docker/ --dry-run </code>+    * Lancer la commande ''rsync'' suivante, ici pour //web-srv// et le dossier ///web-srv/home/admin/docker// avec l'option ''%%--dry-run%%'' (à supprimer quand tout est ok) : <code bash> rsync -av ./web-srv/home/admin/docker/ admin@web-<region>-sinp:/home/admin/docker/ --dry-run </code>
  
 ===== Renommer une stack générer via docker-compose ===== ===== Renommer une stack générer via docker-compose =====
Ligne 125: Ligne 163:
   * Se placer dans le nouveau dossier de la stack et lancer les services : ''docker-compose up -d''   * Se placer dans le nouveau dossier de la stack et lancer les services : ''docker-compose up -d''
   * Vérifier que tout fonctionne correctement   * Vérifier que tout fonctionne correctement
 +
 +===== Déplacer les données (volumes nommés) de Docker d'un serveur à un autre =====
 +Il est possible de déplacer les volumes nommés d'un serveur à un autre :
 +  * Mettre à jour Docker sur les 2 instances pour avoir la même version installée.
 +  * Arrêter les services utilisant les volumes sur les serveur d'origine : ''docker compose down''
 +    * Si possible arrêter également Docker : ''systemctl stop docker''
 +  * Rechercher les dossiers des volumes nommées concernés dans : ''/var/lib/docker/volumes/''
 +  * Une fois repéré, copier chaque dossier sur le serveur de destination. Il est neccessaire de passer par l'utilisateur //admin// car il n'y a pas d'accès direct à root sur le serveur de destination. Ex. avec le volume nommé //matomo-storage// dans la stack //analytics// : ''rsync -e 'ssh -p <bkp-srv-ssh-port>' -avxP analytics_matomo-storage/ admin@bkp-paca-sinp:~/dwl/analytics_matomo-storage/''
 +  * Sur le serveur de destination, déplacer le dossier dans l'emplacement (non standard) des données de docker (sur ''/data/docker/'') : ''mv analytics_matomo-storage /data/docker/volumes/''
 +  * Modifier le propriétaire qui a été défini à //admin// par le propriétaire initial, généralement //root// (vérifier sur le serveur d'origine) : ''chown --from=admin root -R /data/docker/volumes/analytics_matomo-storage ''
 +  * Modifier le DNS pour faire pointer le nom de domaine sur le nouveau serveur.
 +  * Vous pouvez maintenant ré-installer les fichiers Docker Compose sur le nouveau serveur.
 +  * Modifier les éventuels fichiers de configuration ou ''.env'' pour adapter la configuration au nouveau serveur.
 +  * Relancer la stack : ''docker compose up -d''
 +  * Vérifier que tout fonctionne à nouveau.
 ===== Commandes utiles ===== ===== Commandes utiles =====
   * Accéder aux logs du service Docker : '' journalctl -x -u docker.service ''    * Accéder aux logs du service Docker : '' journalctl -x -u docker.service '' 
Ligne 136: Ligne 189:
   * Construire une image à partir d'un fichier //Dockerfile// présent dans le dossier courant : ''docker build -t <nom>:<tag> .''   * Construire une image à partir d'un fichier //Dockerfile// présent dans le dossier courant : ''docker build -t <nom>:<tag> .''
   * Se connecter à un container : ''docker exec -it <container name> /bin/bash''   * Se connecter à un container : ''docker exec -it <container name> /bin/bash''
 +    * Depuis un container (si ''ip'' est installé - paquet //iproute2//), afficher l'IP de l'hôte : ''ip route|awk '/default/ { print $3 }''' 
 +  * Informations sur la place occupée par Docker : 
 +    * Résumé de la place occupée : <code bash>docker system df</code> 
 +    * Infos détaillées dont la place occupée par chaque volume : <code bash>docker system df --verbose</code> 
 +  * Nettoyage : 
 +    * <color #ed1c24>**ATTENTION:**</color> **s'assurer au préalable que  tous les containers utiles sont bien actif sur l'hôte !** 
 +    * <color #ed1c24>Nettoyer tout (images, containers et réseaux) inactifs</color> : <code bash>docker system prune</code> 
 +    * <color #ed1c24>Nettoyer tout (images, containers et réseaux) et les volumes contenant des données (!!) inactifs</color> : <code bash>docker system prune --volumes</code>
 ==== Docker Compose ==== ==== Docker Compose ====
   * **Source** : https://opensharing.fr/docker-compose-commandes-utiles   * **Source** : https://opensharing.fr/docker-compose-commandes-utiles
  • serveurs/installation/docker.1683703180.txt.gz
  • Dernière modification : 2023/05/10 07:19
  • de jpmilcent