# Prérequis
apt update
apt install -y apt-transport-https ca-certificates curl software-properties-common
# Ajouter la clé GPG Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# Ajouter le dépôt
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# Installer Docker
apt update
apt install -y docker-ce docker-ce-cli containerd.io
# Installer le repo Docker
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# Installer Docker
dnf install docker-ce docker-ce-cli containerd.io
# /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"default-address-pools": [
{
"base": "172.17.0.0/16",
"size": 24
}
],
"storage-driver": "overlay2",
"dns": ["8.8.8.8", "8.8.4.4"]
}
# Démarrer Docker
systemctl start docker
systemctl enable docker
# Vérifier le statut
systemctl status docker
# Redémarrer après configuration
systemctl restart docker
# Lancer un conteneur
docker run nginx
docker run -d nginx # Mode détaché
docker run -it ubuntu bash # Mode interactif
# Gestion conteneurs
docker ps # Conteneurs actifs
docker ps -a # Tous les conteneurs
docker start container_id
docker stop container_id
docker restart container_id
docker rm container_id # Supprimer conteneur
docker rm -f container_id # Forcer suppression
docker run \
-d \ # Mode détaché
--name webapp \ # Nom du conteneur
-p 80:80 \ # Port mapping
-v data:/data \ # Volume
-e MYSQL_ROOT_PASSWORD=secret \ # Variable environnement
--network app-network \ # Réseau
nginx:latest # Image
# Images
docker images # Lister images
docker pull nginx # Télécharger image
docker rmi nginx # Supprimer image
docker build -t app:1.0 . # Construire image
# Nettoyage
docker system prune # Nettoyer ressources
docker system prune -a # Tout nettoyer
FROM nginx:alpine
WORKDIR /app
COPY . .
RUN apk add --no-cache python3
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
# Logs
docker logs container_id
docker logs -f container_id # Suivre logs
# Stats
docker stats # Ressources temps réel
docker top container_id # Processus conteneur
# Inspection
docker inspect container_id # Détails configuration
# Lister réseaux
docker network ls
# Types disponibles
- bridge (défaut)
- host
- none
- overlay (swarm)
# Créer réseau
docker network create app-network
# Options avancées
docker network create \
--driver bridge \
--subnet 172.18.0.0/16 \
--gateway 172.18.0.1 \
custom-network
# Connecter/Déconnecter
docker network connect app-network container_id
docker network disconnect app-network container_id
# Exposition ports
docker run -p 80:80 # Port unique
docker run -p 80:80 -p 443:443 # Multiple ports
docker run -P # Tous les ports
# DNS personnalisé
docker run --dns 8.8.8.8 nginx
# Hosts personnalisés
docker run --add-host host.docker:192.168.1.10 nginx
# Création volume
docker volume create data_volume
# Utilisation
docker run -v data_volume:/data nginx
# Gestion
docker volume ls
docker volume inspect data_volume
docker volume rm data_volume
# Monter répertoire local
docker run -v /host/path:/container/path nginx
# Mode readonly
docker run -v /host/path:/container/path:ro nginx
# Backup volume
docker run --rm -v data_volume:/data -v $(pwd):/backup \
alpine tar czf /backup/data.tar.gz /data
# Restore volume
docker run --rm -v data_volume:/data -v $(pwd):/backup \
alpine tar xzf /backup/data.tar.gz -C /
version: '3.8'
services:
webapp:
build: ./webapp
ports:
- "3000:3000"
environment:
NODE_ENV: production
volumes:
- data:/app/data
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
volumes:
- db_data:/var/lib/postgresql/data
volumes:
data:
db_data:
secrets:
db_password:
file: ./db_password.txt
# Démarrer services
docker-compose up -d
# Arrêter services
docker-compose down
# Logs
docker-compose logs -f
# Scaling
docker-compose up -d --scale webapp=3
# Multi-stage build
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
Sécurité
Performance
Maintenance
# Conteneur ne démarre pas
docker logs container_id
docker inspect container_id
# Problèmes réseau
docker network inspect network_name
docker exec container_id ping host
# Problèmes volumes
docker volume inspect volume_name
#!/bin/bash
# Monitoring Docker
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
# Nettoyage automatique
docker system prune -af --volumes