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 Prochaine révision | Révision précédente | ||
| technique:docker [2023/12/22 12:24] – [Network] guillaumev | technique:docker [2024/04/02 15:08] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== Virtualisation 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:// | + | |
| - | | + | |
| - | | + | |
| - | * chaine Xavki sur docker (+docker-compose pas loin) [[https:// | + | |
| - | + | ||
| - | ===== 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 | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | ===== Principe de fonctionnement ===== | + | |
| - | + | ||
| - | On peut soit récupérer une image docker existante depuis un dépot ([[https:// | + | |
| - | + | ||
| - | Il faut donc distinguer : | + | |
| - | + | ||
| - | * image docker : image " | + | |
| - | * conteneur docker : une ou plusieurs instanciations de l' | + | |
| - | + | ||
| - | 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' | + | |
| - | + | ||
| - | ===== 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 | + | |
| - | </ | + | |
| - | + | ||
| - | ====== Docker-compose ====== | + | |
| - | + | ||
| - | Permet de composer plusieurs docker ensemble, une stack de conteneurs, à partir d'un fichier .yml | + | |
| - | + | ||
| - | Il est nécessaire d' | + | |
| - | + | ||