L'objectif de cette étape est de conteneuriser l'application afin de la rendre portable, modulaire et facilement déployable dans différents environnements. Docker permet d'encapsuler l'application et ses dépendances dans un conteneur léger, garantissant un fonctionnement identique quelle que soit la plateforme.
Docker est une plateforme de conteneurisation permettant d'exécuter des applications de manière isolée à l'aide de conteneurs. Les principaux composants sont :
Un projet Docker typique est organisé comme suit :
app/
│── Dockerfile # Définition de l'image Docker
│── docker-compose.yml # Orchestration multi-conteneurs
│── src/ # Code source de l'application
│── .dockerignore # Exclusions lors de la création de l'image
Le Dockerfile définit comment l'image de l'application est construite.
# Étape 1 : Utilisation d'une image de base légère FROM node:18-alpine # Définition du répertoire de travail WORKDIR /app # Copie des fichiers nécessaires COPY package*.json ./ # Installation des dépendances RUN npm install --production # Copie du code source COPY . . # Exposition du port d'écoute EXPOSE 3000 # Commande de lancement de l'application CMD ["node", "server.js"]
FROM python:3.9-slim WORKDIR /app COPY requirements.txt ./ RUN pip install -r requirements.txt COPY . . EXPOSE 5000 CMD ["python", "app.py"]
On génère l’image Docker avec la commande suivante :
docker build -t myapp:latest .
Une fois l’image construite, on peut exécuter un conteneur basé sur cette image :
docker run -p 3000:3000 myapp:latest
docker ps
Si l'application nécessite plusieurs services (ex. : base de données, backend, frontend), on utilise Docker Compose.
docker-compose.ymlversion: '3.8' services: app: build: . ports: - "3000:3000" depends_on: - db db: image: postgres:14 environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: mydatabase volumes: - db_data:/var/lib/postgresql/data volumes: db_data:
docker-compose up -d
docker-compose logs -f app
.dockerignoreUn fichier .dockerignore permet d’exclure certains fichiers inutiles :
node_modules
logs
.env
alpine, slim).RUN useradd -m appuser USER appuser
docker login -u myusername -p mypassword
docker tag myapp:latest myusername/myapp:latest docker push myusername/myapp:latest
Grâce à Docker, l’application devient portable, isolée et facilement déployable sur n’importe quel environnement. Elle pourra ensuite être orchestrée avec Kubernetes pour gérer sa mise à l’échelle et sa haute disponibilité.