User Tools

Site Tools


informatique:logiciels:docker

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
informatique:logiciels:docker [2024/08/19 11:23] – created pteuinformatique:logiciels:docker [2024/09/20 15:29] (current) pteu
Line 1: Line 1:
 ======Docker====== ======Docker======
  
-Ceci est un pense-bête en vrac. Il peut contenir des erreurs.+{{ :informatique:logiciels:docker_logo.png?200| }} 
 + 
 +Docker est un outil permettant de faire tourner une application et ses dépendances dans un conteneur isolé, en s'appuyant sur certaines parties du système hôte. 
 + 
 +//Ceci est un pense-bête en vrac. Il peut contenir des erreurs.//
  
 =====Installation===== =====Installation=====
Line 9: Line 13:
   * [[https://tteck.github.io/Proxmox/#docker-lxc|Installation en 1 clic dans un conteneur LXC sous Proxmox]]   * [[https://tteck.github.io/Proxmox/#docker-lxc|Installation en 1 clic dans un conteneur LXC sous Proxmox]]
  
-=====Documentations===== 
- 
-  * https://www.tecmint.com/install-run-and-delete-applications-inside-docker-containers/ 
-  * https://docs.docker.com/desktop/windows/ 
- 
-Vidéos: 
-  * https://www.youtube.com/watch?v=-jeeHiJ1B-0&list=PLn6POgpklwWq0iz59-px2z-qjDdZKEvWd&index=9 
-  * https://www.youtube.com/results?search_query=docker+synology 
-  * https://www.youtube.com/watch?v=db5jLi6BnaI 
-  * https://servicemax.com.au/tips/pi-hole-in-docker-on-synology-the-best-way/ 
  
 =====Généralités===== =====Généralités=====
  
-Il faut être root pour utiliser docker. +Il faut être root pour utiliser docker (par défaut en tout cas)On peut obtenir de l'aide pour chaque commande avec ''docker <command%%--help%%''.
-<code bash> +
-# afficher l'arborescence de la conf d'un composant, par ex le réseau (sh conf) +
-docker inspect bridge +
-# afficher la conf d'un conteneur +
-docker inspect pihole +
-# n'afficher qu'un paramètre de sa conf : +
-docker inspect -f "{{.State.Health.Status}}" pihole-dogen +
-</code> +
- +
-=====B.-A.-BA=====+
  
 Vérification de la version : Vérification de la version :
Line 72: Line 56:
  
 =====Conteneurs===== =====Conteneurs=====
 +
 +Un conteneur est l'instanciation d'une image (souvent personnalisée via les variables d'environnement).
  
 Création d'un conteneur Alpine Linux (Linux minimaliste) Création d'un conteneur Alpine Linux (Linux minimaliste)
Line 84: Line 70:
 Action sur les conteneurs Action sur les conteneurs
 <code bash> <code bash>
 +# lister les conteneurs
 +docker ps
 +docker container ls
 +# pour lister aussi les conteneurs arrêtés
 +docker ps -a
 +CONTAINER ID   IMAGE         COMMAND    CREATED        STATUS                    PORTS     NAMES
 +f8b7c15f443f   hello-world   "/hello"   8 months ago   Exited (0) 8 months ago             frosty_napier
 +
 # démarrer arrêter un conteneur # démarrer arrêter un conteneur
 docker start alpine docker start alpine
 docker stop alpine docker stop alpine
  
-suppr un conteneur +supprimer un conteneur (-f pour forcer même s'il est en fonctionnement) 
-docker rm (-f) <conteneur1> (-f pour forcer même s'il est en fonctionnement)+docker rm (-f) <conteneur1>
  
-lister les conteneurs +supprimer les conteneurs non utilisés 
-docker ps # (ou docker container ls) +docker container prune
- +
-# pour lister aussi les conteneurs arrêtés +
-docker ps -a+
 </code> </code>
  
-=====Volumes===== 
  
-<code bash> +=====Images=====
-docker volume ls +
-docker volume create monvolume +
-docker volume rm monvolume +
-</code>+
  
-===== Gestion des logs=====+Ce sont des "pré-conteneurs" à instancier (personnaliser) et installer ; leur nommage est de type : ''image:version''. On peut les télécharger depuis un repository, celui par défaut est le [[https://hub.docker.com/|docker hub]].
  
 <code bash> <code bash>
-afficher les logs d'un conteneur: +lister les images 
-# -f/--follow ; -t/--timestamps ; -n/--tail +docker images 
-docker container logs --follow <ID> +#(ou "docker image ls")
-docker logs -f -t --details <Nom_du_conteneur> +
-filtrer les logs sur un créneau horaire (ici affiche les logs du 11 mars) +
-docker logs -t --since 2023-03-11 --until 2023-03-12 --details <conteneur> +
-docker logs -t --since 1h30m --details <conteneur> +
-# par def, les logs des conteneurs sont dans /var/lib/docker/containers/ +
-# supprimer les logs d'un conteneur : +
-: > $(docker inspect --format='{{.LogPath}}' <nom ou ID du conteneur>) +
-</code>+
  
-=====Images=====+# télécharger une image 
 +docker pull pihole 
 + 
 +# supprimer les images inutilisées 
 +docker image prune
  
-<code bash> 
-# lister les images 
-docker images 
-(ou docker image ls) 
 # créer image à partir d'un conteneur # créer image à partir d'un conteneur
 docker commit -m "hello image v1" <containerID> firstimage:v1.0 docker commit -m "hello image v1" <containerID> firstimage:v1.0
-docker history <ID_image> (afficher l'historique des cmds passées dans l'image)+ 
 +afficher l'historique des cmds passées dans l'image 
 +docker history <ID_image>
 </code> </code>
 +
 +
 +=====Registres (d'images)=====
 +
 +Les "registry" sont des bases d'images Docker ; le "registre officiel" est le [[https://hub.docker.com/|Docker Hub]] mais il en existe moult ([[https://github.com/linuxserver|LinuxServer.io]] par exemple).
 +
  
 =====Build===== =====Build=====
Line 146: Line 132:
 </code> </code>
  
-=====network=====+=====Network===== 
 + 
 +Les réseaux docker sont des bridges créés sur le système pour isoler les conteneurs, l'hôte pouvant ainsi gérer les communication inter-conteneurs et sortants de la machine.
  
 <code bash> <code bash>
 # lister les réseaux (loopback) créés dans docker # lister les réseaux (loopback) créés dans docker
 docker network ls docker network ls
 +</code>
 +
 +Dans un docker compose, créer un réseau bridgé dont on maitrise l'adressage:
 +<code yaml>
 +networks:
 +  br-1:
 +    name: pont1
 +    driver: bridge
 +      ipam:
 +        config:
 +          - subnet: 172.17.17.0/24
 +            gateway: 172.17.17.254
 +[..]
 +services:
 +  myalpine:
 +    image: alpine
 +    container_name: myalpine
 +    command: sh
 +    network:
 +      - br-1
 +        name: pont1
 +        #external: true    # uniquement si le réseau a déjà été créé en dehors compose
 +        ipv4_address: 172.17.17.10
 +</code>
 +
 +Pour faire communiquer (basiquement) 2 réseaux docker il faut manipuler l'iptables du host :
 +<code bash>
 +iptables -I DOCKER-USER -i br-1 -o br-2 -j ACCEPT
 +iptables -I DOCKER-USER -i br-2 -o br-2 -j ACCEPT
 +</code>
 +
 +
 +=====Volumes=====
 +
 +Permet de faire persister les données entre plusieurs lancements de conteneurs, en montant un volume sur le système de fichier de la machine hôte.
 +
 +<code bash>
 +docker volume ls (-a)
 +docker volume create <monvolume>
 +docker volume rm <monvolume>
 +docker volume prune
 </code> </code>
  
 =====Compose===== =====Compose=====
  
-docker compose: permet de créer et ordonnancer de multiples conteneurs pour monter un service (site web + BDD + etc) ; il utilise des fichiers yml pour définir le service+docker compose: permet de créer et ordonnancer de multiples conteneurs pour monter un "service(site web + BDD + etc) ; il utilise des fichiers yml pour définir le service
  
 <code bash> <code bash>
 +docker compose version
 +
 +docker compose build
 +
 # https://docs.docker.com/compose/gettingstarted/ # https://docs.docker.com/compose/gettingstarted/
 mkdir nextcloud && cd nextcloud mkdir nextcloud && cd nextcloud
Line 166: Line 199:
 # afficher les logs # afficher les logs
 docker-compose logs -f docker-compose logs -f
-# arrêter le conteneur +# arrêter les conteneurs (-v pour supprimer les volumes également) 
-docker-compose down+docker-compose down (-v)
 ! !
 docker compose pull ? docker compose pull ?
 +</code>
 +
 +Mettre à jour un conteneur existant (exemple avec technitium/dns-server):
 +<code bash>
 +docker compose down
 +docker image rm technitium/dns-server
 +docker compose up -d
 +</code>
 +===== Gestion des logs=====
 +
 +<code bash>
 +# afficher les logs d'un conteneur:
 +# -f/--follow ; -t/--timestamps ; -n/--tail
 +docker container logs --follow <ID>
 +docker logs -f -t --details <Nom_du_conteneur>
 +# filtrer les logs sur un créneau horaire (ici affiche les logs du 11 mars)
 +docker logs -t --since 2023-03-11 --until 2023-03-12 --details <conteneur>
 +docker logs -t --since 1h30m --details <conteneur>
 +# par def, les logs des conteneurs sont dans /var/lib/docker/containers/
 +# supprimer les logs d'un conteneur :
 +: > $(docker inspect --format='{{.LogPath}}' <nom ou ID du conteneur>)
 +</code>
 +
 +
 +=====Divers=====
 +
 +<code bash>
 +# afficher l'arborescence de la conf d'un composant, par ex le réseau (sh conf)
 +docker inspect bridge
 +# afficher la conf d'un conteneur
 +docker inspect pihole
 +# n'afficher qu'un paramètre de sa conf :
 +docker inspect -f "{{.State.Health.Status}}" pihole-dogen
 +
 +
 +# effacer les données inutilisées par docker (comme les vieilles images par ex)
 +docker system prune
 </code> </code>
  
Line 203: Line 273:
 </code> </code>
  
-=====Divers=====+=====Documentations===== 
 + 
 +  * https://www.tecmint.com/install-run-and-delete-applications-inside-docker-containers/ 
 +  * https://docs.docker.com/desktop/windows/ 
 + 
 +Vidéos: 
 +  * https://www.youtube.com/watch?v=-jeeHiJ1B-0&list=PLn6POgpklwWq0iz59-px2z-qjDdZKEvWd&index=9 
 +  * https://www.youtube.com/results?search_query=docker+synology 
 +  * https://www.youtube.com/watch?v=db5jLi6BnaI 
 +  * https://servicemax.com.au/tips/pi-hole-in-docker-on-synology-the-best-way/
  
 Outils liés à docker: Outils liés à docker:
informatique/logiciels/docker.1724066631.txt.gz · Last modified: 2024/08/19 11:23 by pteu