Commandes Docker

Créer un conteneur

docker run <nom de l'image>

Lister les conteneurs

Lister les conteneurs en cours d'exécution.

docker ps

Lister tous les conteneurs.

docker ps -a

Au lieu de docker ps, vous pouvez également utiliser docker container ls.

Lister les images

Deux méthodes (attention au "s" dans image(s))

docker image ls
docker images

Supprimer un conteneur

docker rm <id du conteneur>

Possibilité de n'indiquer que les premiers caractères ou bien de chaîner les ID s'il faut supprimer plusieurs conteneurs.

Il est également envisageable d'utiliser une autre commande pour le même résultat.

docker container rm <id du conteneur>

Supprimer une image

docker image rm <id de l'image>

Lancer un conteneur dans Docker

La commande ci-dessous permet de lancer un conteneur, modifier son contenu et l'effacer automatiquement lorsque l'utilisateur le quitte.

docker run -it --rm <nom de l'image>

La même chose qu'au-dessus, mais cette fois-ci le conteneur ne doit pas s'effacer automatiquement.

docker run -it <nom de l'image>

ℹ️ La seule différence entre les deux est le --rm.

Redémarrer un conteneur

docker start <id>

Arrêter un conteneur

docker stop <id>

Entrer et interagir dans un conteneur qui est déjà démarré

docker exec -it <id> bash

Redémarrer et interagir avec un conteneur en une ligne de commande

docker start -ai <id>

Copier un dossier et son contenu d'un conteneur dans un dossier de l'hôte

docker cp <id du conteneur>:/<dossier du conteneur>/. <dossier de l'hôte>

Copier un dossier et son contenu de l'hôte dans un dossier d'un conteneur

docker cp <dossier de l'hôte> <id du conteneur>:/<dossier du conteneur>/.

Volumes mappés

Lier un dossier dans la machine locale avec un dossier dans le conteneur.

docker run -it --rm -v <dossier local>:<dossier conteneur> <image>

Volumes managés

Créer un volume managé

docker volume create <nom du volume>

Lister les volumes managés

docker volume ls

Supprimer un volume managé

docker volume rm <nom du volume>

Lier un volume managé

docker run --rm -it -v <nom du volume>:<dossier du conteneur> <image>

Information du volume managé

docker volume inspect <nom du volume>
[
    {
        "CreatedAt": "2021-08-18T09:34:16Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/super_volume/_data",
        "Name": "super_volume",
        "Options": {},
        "Scope": "local"
    }
]

Réseau : mapper des ports

Par exemple avec le conteneur nginx, ...

docker run --rm -p <port local>:<port conteneur> <image>

Réseau : Commandes bash pour tester les réseaux

Réseau : Installer ping et ip

apt-get update && apt-get install -y iputils-ping iproute2

Ou alors vous pouvez utiliser l'image celtak/ubuntu-ping-ip dont les programmes ping et ip sont déjà installé.

Réseau : Afficher les adresses IP

ip -c a

Réseau : Lister les réseaux disponibles

docker network ls

Réseau : Isoler un conteneur

docker run --rm -it --network=none <image>

Réseau : Créer un réseau bridge

docker network create --driver=bridge <nom du réseau>

Réseau : Créer un conteneur et le connecter en même temps

docker run -it --rm --network=<nom du réseau> --name=<nom du conteneur> <image>

Réseau : Créer et ensuite connecter

Réseau : Créer le conteneur

docker run --rm -it --name=<nom du conteneur> <image>

Réseau : Connecter le conteneur au réseau

docker network connect <nom du réseau> <nom du conteneur>

Réseau : Liste des conteneurs dans un réseau Docker (et d'autres informations)

docker network inspect <nom du réseau>

Réseau : Déconnecter les conteneurs du réseau

docker disconnect <nom du réseau> <conteneur>

Réseau : Supprimer des réseaux

docker network rm <nom du réseau> <nom du réseau> ...

Dockerfile : Exemple Dockerfile

FROM celtak/ubuntu-ping-ip
RUN apt-get update
RUN apt-get install -y nodejs

Dans cet exemple, nous utilisons comme base l'image celtak/ubuntu-ping-ip pour créer notre image personnalisée. Nous ajoutons ensuite nodesjs (Node.js).

Dockerfile : Construire une image

docker build -t <image> .

Il faut se placer dans le dossier qui contient le Dockerfile ou à défaut, remplacer . par le chemin du fichier.

Dockerfile : Ajouter l'image au Dockerhub

docker tag <image> <repository>
docker push <repository>

Docker compose : docker-compose.yml simple

version: '3'

services:
  <nom du service>:
    image: <image de base>
    container_name: <nom du conteneur>

Docker compose : Lancer le docker-compose.yml

docker-compose up

Lancer en arrière-plan.

docker-compose up -d

Docker compose : Interagir avec le conteneur

version: '3'

services:
  <nom du service>:
    image: <image de base>
    container_name: <nom du conteneur>
    stdin_open: true
    tty: true

Ensuite utiliser la commande suivante.

docker exec -it <id du conteneur> bash

Docker compose : Arrêter les conteneurs

docker-compose stop

Docker compose : Supprimer les conteneurs

docker-compose rm

Docker compose : Volume mappé

version: '3'

services:
  <nom du service>:
    image: <image de base>
    container_name: <nom du conteneur>
    stdin_open: true
    tty: true
    volumes:
      - <nom du dossier en local>:<nom du dossier dans le conteneur>

Docker compose : Volume managé

version: '3'

services:
  <nom du service>:
    image: <image de base>
    container_name: <nom du conteneur>
    stdin_open: true
    tty: true
    volumes:
      - <nom du volume>:<nom du dossier dans le conteneur>

volumes:
  <nom du volume>:

Docker compose : Réseau

Tous les conteneurs du docker-compose.yml sont automatiquement connecté à un réseau.

Docker compose : Réseau personnalisé

version: '3'

services:
  <nom du service 1>:
    image: <image de base>
    container_name: <nom du conteneur 1>
    stdin_open: true
    tty: true
    networks:
      - <nom du réseau>

  <nom du service 2>:
    image: <image de base>
    container_name: <nom du conteneur 2>
    stdin_open: true
    tty: true
    networks:
      - <nom du réseau>

networks:
  <nom du réseau>:
    driver: <type du réseau (pilote)>