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 [2025/10/17 09:57] (current) – overlay2 prend trop de place 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=====+=====Portainer===== 
 + 
 +[[https://www.portainer.io/|Portainer]] est une webUI pour docker ; il permet de gérer le moteur via le navigateur. 
 + 
 +Les confs (notamment les docker-compose à sauvegarder) se trouvent dans : ''/var/lib/docker/volumes/portainer_data/'' 
 + 
 +Alternative: [[https://github.com/louislam/dockge|Dockge]] 
 +=====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:
   * https://github.com/wagoodman/dive   * https://github.com/wagoodman/dive
  
 +=====Tips=====
 +
 +====overlay2 prend trop de place====
 +
 +Docker a tendance à prendre de la place, certains conteneurs notamment remplissent le système de fichier et saturent le dossier 
 +
 +<code bash>
 +df -h | grep -E /$
 +/dev/sda2           20G     19G     0 100% /
 +</code>
 +
 +On peut commencer par supprimer tous les objets inutilisés, en faisant attention c'est une manipulation destructrice :
 +<code bash>
 +docker system prune
 +WARNING! This will remove:
 +  - all stopped containers
 +  - all networks not used by at least one container
 +  - all dangling images
 +  - unused build cache
 +
 +Are you sure you want to continue? [y/N]
 +</code>
 +
 +Dans mon cas cela fait gagner un peu de place, mais le soucis principal vient d'ailleurs :
 +<code bash>
 +du -hs /var/lib/docker/*
 +116K    /var/lib/docker/buildkit
 +248K    /var/lib/docker/containers
 +4,0K    /var/lib/docker/engine-id
 +2,6M    /var/lib/docker/image
 +88K     /var/lib/docker/network
 +23G     /var/lib/docker/overlay2   <---- là !
 +16K     /var/lib/docker/plugins
 +4,0K    /var/lib/docker/runtimes
 +4,0K    /var/lib/docker/swarm
 +4,0K    /var/lib/docker/tmp
 +1,3M    /var/lib/docker/volumes
 +</code>
 +
 +Oui, il fallait faire une partition dédiée pour ''/var'' !
 +
 +<code bash>
 +docker system df
 +TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
 +Images          2                 1.198GB   0B (0%)
 +Containers      2                 11GB      0B (0%)
 +Local Volumes                   1.227MB   963.1kB (78%)
 +Build Cache                     0B        0B
 +
 +docker system df -v
 +[...]
 +Images space usage:
 +
 +REPOSITORY                      TAG         IMAGE ID       CREATED         SIZE      SHARED SIZE   UNIQUE SIZE   CONTAINERS
 +bbernhard/signal-cli-rest-api   0.167-dev   3a4e0da41196   13 months ago   897MB     0B            897.5MB       1
 +portainer/portainer-ce          2.21.1      9c0b5a6a7e4d   13 months ago   301MB     0B            300.8MB       1
 +
 +Containers space usage:
 +
 +CONTAINER ID   IMAGE                                     COMMAND            LOCAL VOLUMES   SIZE      CREATED         STATUS                NAMES
 +3d15115fdf6f   bbernhard/signal-cli-rest-api:0.167-dev   "/entrypoint.sh"                 11GB      5 weeks ago     Up 8 days (healthy)   signal-cli-rest-api
 +b94dc74fe700   portainer/portainer-ce:2.21.1             "/portainer"                     0B        13 months ago   Up 8 days             portainer
 +</code>
 +
 +11G c'est trop ;
 +<code bash>
 +docker stop 3d15115fdf6f
 +docker rm -f 3d15115fdf6f
 +df -h | grep -E /$
 +/dev/sda2           20G    7,9G   11G  44% /
 +
 +# et le recréer:
 +cd /bla/tools/docker/apps
 +docker compose up -d
 +</code>
  
  
informatique/logiciels/docker.1724066631.txt.gz · Last modified: 2024/08/19 11:23 by pteu