:: Docker ::
Principes
-------------- -------------- --------------
| ---------- | | ---------- | | ---------- |
| | App1 | | | | App2 | | | | App3 | |
| ---------- | | ---------- | | ---------- |
| ---------- | | ---------- | | ---------- |
| | Deps | | | | Deps | | | | Deps | |
| ---------- | | ---------- | | ---------- |
| | | | | |
| Conteneur1 | | Conteneur2 | | Conteneur3 |
-------------- -------------- --------------
-------------------------------------------- ------------
| Images | <-----get----- | Registry |
-------------------------------------------- ------------
--------------------------------------------
| Moteur Docker |
--------------------------------------------
--------------------------------------------
| OS |
--------------------------------------------
--------------------------------------------
| Serveur |
--------------------------------------------
Installation
Nettoyage
$ sudo apt remove docker docker-engine docker.io conteneurd runc
Déclaration du dépôt Docker
$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Installation de docker
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli conteneurd.io docker-buildx-plugin docker-compose-plugin
Ajout de l'utilisateur au groupe docker
$ sudo usermod -aG docker $USER
Premiers pas
Vérifier la version
$ docker version
Client:
[...]
Server:
[...]
Infos supplémentaires
$ docker info
conteneurs: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
[...]
Test du bon fonctionnement de l'installation
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
[...]
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]
Commandes principales
Lister les conteneurs
conteneurs actifs
$ docker ps
conteneur ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3dbec964fa3a nginx:latest "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 80/tcp agitated_dubinsky
Tous les conteneurs
$ docker ps -a [--all]
conteneur ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3dbec964fa3a nginx:latest "/docker-entrypoint.…" 6 minutes ago Up 7 minutes 80/tcp agitated_dubinsky
882f5d50bdab nginx:latest "/docker-entrypoint.…" 13 minutes ago Exited (0) 12 minutes ago dreamy_yalow
[...]
Lancer un conteneur
$ docker run nginx:latest
Options
- -d : lance le conteneur en arrière-plan (detached)
- -ti : mode interactif (text interactive)
- --rm : supprime le conteneur lorsqu'il est stoppé
- --name : assigne un nom au conteneur
- --hostname : modifie le hostname du système dans le conteneur
- --dns : précise le serveur DNS à utiliser dans le conteneur
Exemple :
$ docker run -d -ti --rm --name c1 --hostname h1 --dns 192.168.0.254 debian:latest
Manipuler les conteneurs
Note : on peut utiliser soit le nom du conteneur, soit son id.
Stopper un conteneur
$ docker stop c1
Démarrer un conteneur
$ docker start c1
Supprimer un conteneur
Note : on ne peut pas supprimer un conteneur actif, il faut d'abord le stopper ou forcer sa suppression avec l'argument "--force" ou "-f"
$ docker rm c1
$ docker rm -f c1
Pour supprimer tous les conteneurs :
$ docker rm -f $(docker ps)
$ docker rm -f $(docker ps -a)
Gestion des volumes
Lister les volumes
$ docker volume ls
Créer un volume
$ docker volume create mynginx
$ docker volume ls
DRIVER VOLUME NAME
local mynginx
Consulter les métadatas
$ docker volume inspect mynginx
[
{
"CreatedAt": "2024-04-04T17:31:23+02:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/mynginx/_data",
"Name": "mynginx",
"Options": null,
"Scope": "local"
}
]
Supprimer un volume
Note : on ne peut pas supprimer un volume en cours d'utilisation
$ docker volume rm mynginx
Utiliser le volume dans un conteneur
$ docker run -d --name c1 -v mynginx:/usr/share/nginx/html/ nginx:latest
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c43d0ade1d09 nginx:latest "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 80/tcp c1
Pour vérifier, on lance un shell bash interactif dans le conteneur et on affiche le contenu du fichier index.html par défaut de nginx :
$ docker exec -ti c1 bash
root@c43d0ade1d09:/# cat /usr/share/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
[...]
</body>
</html>