Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
serveurs:installation:docker [2023/06/15 15:04] – [Docker] jpmilcent | serveurs:installation:docker [2024/12/19 19:30] (Version actuelle) – [Déplacer le dossier contenant les données de Docker] jpmilcent |
---|
* 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'' apparait, redé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'' |
| |
</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 ===== | ===== Activer l'API Docker sur l'instance ===== |
* 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 ===== |
* 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 }''' | * 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 |