Logo carnetderootxzz@carnetderoot.net"La simplicité est la sophistication suprême" - Léonard De Vinci
mardi 09 avril 2024

:: 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>