Docker

Docker est une plateforme de virtualisation légère permettant de créer, déployer et exécuter des applications dans des conteneurs. Un conteneur regroupe tout le nécessaire pour exécuter une application : code, bibliothèques, dépendances et configurations. Contrairement aux machines virtuelles, les conteneurs partagent le noyau du système hôte, ce qui les rend plus légers et plus rapides.

Images

Construire une image (via Dockerfile)

docker build -t <nom-image> .

Voir les images disponibles

docker images

Effacer une image

docker rmi -f <nom-image>

Lancer une image dans un containeur

# exemple pour une app flask:
docker run -d -p 80:5000 <nom-image>   

Containers

Voir les conteneurs en cours

docker ps

Arrêter un conteneur

docker stop <nom-container>

Effacer un conteneur

docker rm <nom-container>

Remise à zéro des containers, des images et des volumes

sudo docker system prune -a --volumes

Créer des containeurs

docker pull nom_du_package:tag(version)
exemple: docker pull nginx:1.22-alpine

ou directement :

docker run -d -p 8080:80 nginx:1.22-alpine

-d (option) pour "detached"
-p (port)

Dockerfile

Un Dockerfile est un fichier texte qui contient les instructions nécessaires pour construire une image Docker. Il décrit les étapes de création de l'environnement d'exécution d'une application, comme la base d'image à utiliser, les dépendances à installer et les commandes à exécuter. Une fois le Dockerfile rédigé, la commande docker build permet de générer l'image correspondante.

"Dockerfile" doit être à la racine du projet,
- exemple de Dockerfile pour une application node js :

FROM node:19-alpine

COPY package.json /app/
COPY src /app/

WORKDIR /app

RUN npm install

CMD ["node", "server.js"]
  • Build des images docker :
docker build -t my-app:1.0 .

-t : titre:tag
. : path

Voir les containers en cours

docker ps --all

Explorer un container

docker exec -it <id_ou_nom_du_container> bash

Dockerfile exemple

FROM node:12-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]

Ensuite, lancer le build

> docker build -t myApp

Exemple de container avec volume de données hors container

docker run --nama myMongo -v /my/workdir/data:/data/db -d mongo:

Docker compose

Docker Compose est un outil qui facilite la gestion de configurations multi-conteneurs. Grâce à un fichier docker-compose.yml, il permet de définir et d'orchestrer plusieurs services Docker, leurs réseaux et volumes associés. La commande docker-compose up permet de lancer l'ensemble des services définis, simplifiant ainsi le déploiement d'applications complexes.

(isolation réseau : les containers peuvent se voir entre eux)

Gérer l’application :

docker-compose up
docker-compose down

Exemple de Docker compose :

services:
    db:
        build: aci-demo/db
        images: gtardif/sentences-db
    service1:
        container_name: words
        image: gtardif/sentence-api
        ports:
        - "8080:8080"
    web:
        image: nginx
        volumes:
        - ./static:/usr/share/nginx/html
    ports:
        - "80:80"