User Tools

Site Tools


informatique:logiciels:docker

This is an old revision of the document!


Docker

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

Généralités

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.

Vérification de la version :

docker version
Client: Docker Engine - Community
 Version:           27.1.2
 API version:       1.46
 Go version:        go1.21.13
 Git commit:        d01f264
 Built:             Mon Aug 12 11:51:13 2024
 OS/Arch:           linux/amd64
 Context:           default
 
docker compose version
 Engine:
  Version:          27.1.2
  API version:      1.46 (minimum version 1.24)
  Go version:       go1.21.13
  Git commit:       f9522e5
  Built:            Mon Aug 12 11:51:13 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.20
  GitCommit:        8fc6bcff51318944179630522a095cc9dbf9f353
 runc:
  Version:          1.1.13
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Test de création d'un conteneur témoin

docker run hello-world

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)

docker run -it alpine
# -i interactif -t on rattache le terminal
 
# lancer un shell dans le conteneur alpine
docker exec -ti alpine sh

Action sur les conteneurs

# démarrer arrêter un conteneur
docker start alpine
docker stop alpine
 
# supprimer un conteneur (-f pour forcer même s'il est en fonctionnement)
docker rm (-f) <conteneur1>
 
# 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

Images

Ce sont des “pré-conteneurs” à instancier (personnaliser) et installer ; leur nommage est de type : image:version.

# lister les images
docker images
#(ou docker image ls)
 
# télécharger une image
docker pull pihole
 
# créer image à partir d'un conteneur
docker commit -m "hello image v1" <containerID> firstimage:v1.0
 
# afficher l'historique des cmds passées dans l'image
docker history <ID_image>

Registres (d'images)

Les “registry” sont des bases d'images Docker ; le “registre officiel” est le Docker Hub mais il en existe moult (LinuxServer.io par exemple).

Build

#docker build
mkdir -p mon_serveur_web && cd $_
echo "<html><body>Hello world!</body></html>" > index.html
echo -e "FROM nginx\n\
COPY index.html /usr/share/nginx/html/index.html" > Dockerfile
docker build -t mon_serveur_web
# on le lance en bindant le port 8888 du host sur le 80 du conteneur
docker run -p 8888:80 mon_serveur_web:latest
-> http://localhost:8888

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.

# lister les réseaux (loopback) créés dans docker
docker network ls

Volumes

docker volume ls
docker volume create monvolume
docker volume rm monvolume

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

# https://docs.docker.com/compose/gettingstarted/
mkdir nextcloud && cd nextcloud
docker-compose.yml <------ contient la description du service
# création de la stack
# run your services in the background with the -d flag (for "detached" mode)
docker-compose up -d
# afficher les logs
docker-compose logs -f
# arrêter le conteneur
docker-compose down
!
docker compose pull ?

Gestion des logs

# 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>)

Divers

# 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

Exemples

Lancer un pihole sur le serveur Windows ; depuis un shell WSL:

docker run -d \
--name=pihole-win \
--hostname pi.hole \
-p 80:80 \
-e WEBPASSWORD=MDP4cc3sInterfaceWeb \
-e DNSMASQ_LISTENING=local \
-e PIHOLE_DNS_=10.0.1.65 \
-e TZ=FR \
-v pihole_dnsmasq.d:/etc/dnsmasq.d \
-v pihole_pihole:/etc/pihole \
--restart=unless-stopped \
pihole/pihole:latest

MAJ le conteneur avec la dernière version de pihole:

# dl la dernière version de l'image
docker pull pihole/pihole
# arrêter le conteneur courant
docker container stop pihole-win
# supprimer le conteneur courant
docker rm -f pihole-win
! lancer le nouveau conteneur
docker run <ARGS> pihole/pihole

Documentations

informatique/logiciels/docker.1724144440.txt.gz · Last modified: 2024/08/20 09:00 by pteu