Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | |||
technique:docker [2024/03/06 15:52] – francoisa | technique:docker [2024/04/02 15:08] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Conteneurisation avec Docker ====== | + | **Cette page est obsolète. Veuillez accéder au contenu à son nouvel emplacement : [[https://bibliotech.cemea.org/books/outils-technique/page/ |
- | + | ||
- | Docker est un système de virtualisation proche du sysème hote (s'il est similaire). Il permet de partager des ressources et de moins solliciter le système. | + | |
- | + | ||
- | Quelques sources : | + | |
- | + | ||
- | | + | |
- | | + | |
- | * Un serveur web docker | + | |
- | * [[https:// | + | |
- | * [[https:// | + | |
- | * Docker dans LXC : [[https:// | + | |
- | * chaine Xavki sur docker (+docker-compose pas loin) [[https:// | + | |
- | * serie d' | + | |
- | + | ||
- | ===== Schéma conteneur et virtualisation ===== | + | |
- | + | ||
- | {{.: | + | |
- | + | ||
- | ===== | + | |
- | + | ||
- | ===== Installation ===== | + | |
- | + | ||
- | Voir la méthode recommandée : [[https:// | + | |
- | + | ||
- | Ou depuis les dépots d' | + | |
- | < | + | |
- | + | ||
- | sudo apt install docker docker-compose # si on veut utiliser des fichiers docker-compose.yaml | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | Mais dans doute le paquet docker-ce dispo dans les repos est-il plus pertinent ? | + | |
- | + | ||
- | Mettre l' | + | |
- | + | ||
- | < | + | |
- | sudo addgroup monlogin docker | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | Install de docker via ansible dans le role setup_machine : [[https:// | + | |
- | + | ||
- | ===== Principe de fonctionnement ===== | + | |
- | + | ||
- | On peut soit récupérer une image docker | + | |
- | + | ||
- | Il faut donc distinguer : | + | |
- | + | ||
- | | + | |
- | | + | |
- | + | ||
- | Voir la version de docker : '' | + | |
- | + | ||
- | Récupérer une image : '' | + | |
- | + | ||
- | Voir les images récupérées : '' | + | |
- | + | ||
- | Voir les images disponibles : '' | + | |
- | + | ||
- | Télécharger une image : '' | + | |
- | + | ||
- | Effacer une image locale : '' | + | |
- | + | ||
- | Chaque image peut être instanciée plusieurs fois pour avoir plusieurs conteneurs différentes, | + | |
- | + | ||
- | Mettre à jour une image : '' | + | |
- | + | ||
- | ===== Lancement d'un conteneur ===== | + | |
- | + | ||
- | Création d'un conteneur nommé : '' | + | |
- | + | ||
- | Exemple : '' | + | |
- | + | ||
- | Voir les instances en cours avec '' | + | |
- | + | ||
- | Détruire un conteneur : '' | + | |
- | + | ||
- | Lancer un conteneur : '' | + | |
- | + | ||
- | Arrêter un conteneur : '' | + | |
- | + | ||
- | Voir les conteneurs actifs : '' | + | |
- | + | ||
- | Voir les conteneurs actifs et inactifs : '' | + | |
- | + | ||
- | Chaque image docker possède plusieurs tags, par défaut " | + | |
- | + | ||
- | ===== Quelques commandes utiles ===== | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | ===== Besoin d'aide ? ===== | + | |
- | < | + | |
- | + | ||
- | + | ||
- | docker info | + | |
- | docker -h | + | |
- | + | ||
- | docker container -h # manage les container | + | |
- | + | ||
- | docker image -h # manage les images | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | Idem pour network, volumes, service, system…. | + | |
- | + | ||
- | Publier une image | + | |
- | + | ||
- | < | + | |
- | docker commit < | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | et on pourra donc relancer : | + | |
- | + | ||
- | < | + | |
- | docker run -it NEW_IMAGENAME | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | ===== Dockerfile ===== | + | |
- | + | ||
- | Dans un dossier " | + | |
- | + | ||
- | < | + | |
- | FROM nginx | + | |
- | COPY index.html / | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | Dans le dossier mondocker, lancer le docker avec : | + | |
- | + | ||
- | < | + | |
- | docker build -t mondocker . | + | |
- | Puis | + | |
- | docker run -p 8888:80 mondocker: | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | Et pointer vers [[http:// | + | |
- | + | ||
- | ===== Instructions Dockerfile ===== | + | |
- | + | ||
- | * **FROM** | + | |
- | * **LABEL** | + | |
- | * **ARG** | + | |
- | * **ENV** | + | |
- | * **RUN** | + | |
- | RUN va créer une couche en cache qui sera réutilisée dans le cas de modification ultérieure du Dockerfile. | + | |
- | + | ||
- | * **COPY** | + | |
- | * **ADD** | + | |
- | * **ENTRYPOINT** | + | |
- | * **CMD** | + | |
- | ENTRYPOINT , (on peut aussi l' | + | |
- | + | ||
- | * **WORKDIR** | + | |
- | CMD et/ou ENTRYPOINT et ça sera aussi le dossier courant lors du démarrage du conteneur. | + | |
- | + | ||
- | * **EXPOSE** | + | |
- | * **VOLUMES** | + | |
- | * **USER** | + | |
- | RUN , CMD ou ENTRYPOINT (par défaut c'est l' | + | |
- | + | ||
- | Un outil pour explorer les couches d'une image Docker : [[https:// | + | |
- | + | ||
- | ===== Les volumes ===== | + | |
- | + | ||
- | Ce sont des dossiers accessibles en dehors de docker et donc mutualisables. | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | Ou sur une parition non montée : | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | ===== Network ===== | + | |
- | + | ||
- | Pour créer des réseaux entre plusieurs conteneurs de types possibles : | + | |
- | + | ||
- | * **bridge** | + | |
- | * **host** | + | |
- | * **none** | + | |
- | * **overlay** | + | |
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | Docker créer une interface pour chaque réseau créé (ip a). | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | ===== log via journald ===== | + | |
- | + | ||
- | Actifs sur toutes nos machines. Pour que les logs docker arrivent dans journald, ce qui permet une persistence, | + | |
- | < | + | |
- | + | ||
- | { | + | |
- | " | + | |
- | } | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | Ensuite, si on veut filtrer, plusieurs options : | + | |
- | + | ||
- | * sur le nom du conteneur : '' | + | |
- | * sur l'ID court de conteneur : '' | + | |
- | + | ||
- | Plus d' | + | |
- | + | ||
- | On peut bien sur combiner avec d' | + | |
- | < | + | |
- | + | ||
- | journalctl CONTAINER_NAME=scribe-scribe-1 -b -1 # Pour le dernier boot uniquement | + | |
- | journalctl CONTAINER_NAME=scribe-scribe-1 --since yesterday # Pour les logs depuis hier | + | |
- | journalctl CONTAINER_NAME=scribe-scribe-1 CONTAINER_NAME=scribe-dmp-server-1 #Pour avoir les logs de plusieurs containers d'un coup | + | |
- | + | ||
- | </ | + | |
- | === Cas particulier sous PVE === | + | |
- | + | ||
- | Penser à activer le keyctl=1 pour docker | + | |
- | + | ||
- | En cas de disque saturé, docker peut renvoyer des trucs bizarres sur des fichiers qu'il croit encore existants : | + | |
- | + | ||
- | < | + | |
- | systemctl stop docker && rm -Rf / | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | Et patienter avant de relancer un build... | + | |
- | + | ||
- | ===== Purge ===== | + | |
- | + | ||
- | Les usages mutliples de docker génèrent des fichiers liés au volume, au réseau au cache. Ce qui représente à la longue un espace conséquent dans / | + | |
- | + | ||
- | Un nettoyage complet peut s' | + | |
- | + | ||
- | < | + | |
- | docker system prune -a # suppresion des images, conteneur, réseau, volumes, cache... | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | Et hop : réduction à 40 Mo ! | + | |
- | + | ||
- | ====== Docker-compose ====== | + | |
- | + | ||
- | Permet de composer plusieurs docker ensemble, une stack de conteneurs, à partir d'un fichier .yml | + | |
- | + | ||
- | Il est nécessaire d' | + | |
- | + |