Étape 1 : Désinstallation des Paquets Conflit
Assurez-vous de désinstaller les versions précédentes de Docker ou des paquets similaires pour éviter les conflits :
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
sudo apt-get remove -y $pkg
done
Étape 2 : Configuration du Dépôt Docker
Ajoutez la clé GPG officielle de Docker et configurez le dépôt Docker dans votre système Ubuntu :
# Installation des prérequis
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
# Ajout de la clé GPG Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Configuration du dépôt Docker stable
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Mise à jour de l'index des paquets apt
sudo apt-get update
Étape 3 : Installation de Docker Engine
Installez Docker Engine, CLI, containerd et Docker Compose à l'aide des commandes suivantes :
# Installation de Docker Engine
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose
Étape 4 : Vérification de l'Installation
Vérifiez que Docker Engine est installé correctement en exécutant la commande :
sudo docker run hello-world
Vous devriez voir un message confirmant le succès de l'installation.
Le daemon Docker se lie à un socket Unix au lieu d'un port TCP. Par défaut, ce socket Unix appartient à l'utilisateur root et les autres utilisateurs ne peuvent y accéder qu'en utilisant sudo. Le daemon Docker s'exécute toujours en tant qu'utilisateur root.
Pour éviter d'avoir à utiliser sudo à chaque fois que vous lancez une commande Docker, créez un groupe Unix appelé docker et ajoutez-y des utilisateurs. Lorsque le daemon Docker démarre, il crée un socket Unix accessible par les membres du groupe docker.
sudo groupadd docker
# Ceci pourrait déjà exister (depuis le programme d'installation du package)
sudo usermod -aG docker $USER
Déconnectez-vous et reconnectez-vous afin que votre appartenance au groupe soit réévaluée. Ou exécutez newgrp docker
pour activer immédiatement les modifications apportées aux groupes.
Enfin, vérifiez que vous pouvez exécuter les commandes docker sans sudo :
docker --version
docker run hello-world
Téléchargez, configurez et exécutez le conteneur MySQL à l'aide des commandes suivantes :
docker pull mysql
docker run --name="MySQL" \
--network="bridge" \
--mount='type=volume,src=db,dst=/var/lib/mysql' \
-e MYSQL_ROOT_PASSWORD="momo2" \
-e MYSQL_DATABASE="wordpress" \
-e MYSQL_USER="momo" \
-e MYSQL_PASSWORD="momo1" \
-d \
mysql:latest
--name
: Spécifie un nom convivial pour identifier le conteneur.--network
: Spécifie le mode réseau du conteneur.--mount
: Montre le stockage pour persister après l'arrêt du conteneur.-e
: Définit des variables d'environnement spécifiques au conteneur.
Pour obtenir l'adresse IP interne assignée à l'image MySQL, utilisez la commande suivante :
docker inspect -f "{{ .NetworkSettings.IPAddress }}" MySQL
Téléchargez, configurez et exécutez le conteneur WordPress à l'aide des commandes suivantes :
docker pull wordpress
docker run --name="WordPress" \
--network="bridge" \
-p 8080:80 \
--mount='type=volume,src=wordpress,dst=/var/www/html' \
-e WORDPRESS_DB_HOST=172.17.0.2 \
-e WORDPRESS_DB_USER=momo \
-e WORDPRESS_DB_PASSWORD=momo1 \
-e WORDPRESS_DB_NAME=wordpress \
-e WORDPRESS_DEBUG=1 \
-d \
wordpress
--name
: Spécifie un nom convivial pour identifier le conteneur.--network
: Spécifie le mode réseau du conteneur.-p
: Publie les ports réseau du conteneur vers les ports réseau de l'hôte.--mount
: Montre le stockage pour persister après l'arrêt du conteneur.-e
: Définit des variables d'environnement spécifiques au conteneur.
Pour accéder à votre nouveau CMS WordPress depuis votre navigateur web, rendez-vous sur http://localhost
.
Pour arrêter les conteneurs MySQL et WordPress, utilisez la commande suivante :
docker stop MySQL WordPress
Pour surveiller vos conteneurs Docker en cours d'exécution, vous pouvez utiliser la CLI Docker avec les commandes suivantes :
-
Obtenir une liste des conteneurs en cours d'exécution :
docker container ls
-
Obtenir une liste de tous les conteneurs (y compris ceux arrêtés) :
docker container ls --all
-
Obtenir des informations détaillées sur un conteneur spécifique :
docker container inspect CONTAINER_ID
-
Obtenir des statistiques d'utilisation des ressources sur les conteneurs en cours d'exécution :
docker container stats
-
Afficher les processus en cours d'exécution dans un conteneur :
docker top CONTAINER_ID
-
Obtenir le mappage des ports pour un conteneur spécifique :
docker port CONTAINER_ID
-
Mettre en pause tous les processus en cours d'exécution dans un ou plusieurs conteneurs :
docker pause CONTAINER_ID
(Pour reprendre, utilisez
docker unpause CONTAINER_ID
) -
Arrêter un ou plusieurs conteneurs :
docker stop CONTAINER_ID
-
Supprimer un conteneur arrêté :
docker rm CONTAINER_ID
-
Afficher les volumes :
docker volume ls
-
Afficher des informations sur l'ensemble du système Docker :
docker system info
-
Afficher les images Docker disponibles sur le système local :
docker images
(Pour des images spécifiques, utilisez
docker images NAME:TAG
) -
Obtenir un shell interactif sur un conteneur en cours d'exécution :
docker exec -it CONTAINER_ID /bin/bash
Bien que la création de conteneurs Docker en ligne de commande fonctionne certainement, ce n'est pas le processus le plus facile à maintenir à grande échelle, en particulier lorsque plusieurs conteneurs doivent être lancés ensemble pour atteindre un objectif plus important. Docker Compose vous permet de définir une pile d'applications qui peut déployer plusieurs conteneurs à la fois.
Commencez par installer Docker Compose :
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
docker-compose --version # Vérifiez l'installation
Créez un nouveau fichier docker-compose.yml
sur votre système et définissez la spécification pour vos services MySQL et WordPress en utilisant YAML :
version: '3.8'
services:
db:
image: mysql:latest
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: Votre-utilisateur-WordPress
MYSQL_PASSWORD: Mot-de-passe-pour-utilisateur-WordPress
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
wordpress:
image: wordpress
depends_on:
- db
restart: always
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: Votre-utilisateur-WordPress
WORDPRESS_DB_PASSWORD: Mot-de-passe-pour-utilisateur-WordPress
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress:/var/www/html
volumes:
db:
wordpress:
Assurez-vous de remplacer Votre-utilisateur-WordPress
et Mot-de-passe-pour-utilisateur-WordPress
par vos propres valeurs.
Exécutez cette pile logicielle combinée avec Docker Compose :
docker-compose up -d
- L'option
-f
peut être utilisée pour spécifier un fichier YAML différent si nécessaire. - L'option
-d
permet d'exécuter les conteneurs en mode détaché.
Vérifiez que votre pile logicielle fonctionne en accédant à WordPress dans votre navigateur à l'adresse http://localhost
.
Pour arrêter et supprimer vos conteneurs, utilisez la commande suivante :
docker-compose down
Cette commande arrêtera les conteneurs associés à votre pile logicielle et supprimera les volumes Docker créés pour eux.
En suivant ces étapes, vous pourrez déployer et gérer facilement une pile logicielle combinant MySQL et WordPress à l'aide de Docker Compose. Assurez-vous de personnaliser les paramètres en fonction de vos besoins spécifiques.
Plone est un système de gestion de contenu open source pour la création de sites web. L'architecture du site Plone comprend une application "serveur ZEO" qui sert de base de données centralisée, ainsi que plusieurs "clients ZEO" qui fonctionnent comme des serveurs web redondants en face de la base de données. Dans un environnement de production, un équilibreur de charge serait généralement utilisé en face des clients ZEO.
Créez un script Docker Compose YAML pour déployer Plone sur votre serveur en utilisant l'image fournie sur DockerHub : Plone. Votre script doit créer l'architecture suivante :
-
Un conteneur pour le serveur ZEO nommé
zeo
:- Le conteneur doit être démarré avec la commande
zeo
. - Le répertoire
/data
à l'intérieur du conteneur doit être stocké sur un volume Docker pour gérer les données du site web (un datastore centralisé géré par l'application ZEO).
- Le conteneur doit être démarré avec la commande
-
Deux conteneurs clients ZEO nommés
instance1
etinstance2
:- Chaque conteneur écoute sur le port 8080 en interne mais est mappé sur les ports 8081 et 8082 en externe pour éviter les conflits.
- Chaque conteneur dépend du conteneur
zeo
pour démarrer en premier. - Chaque conteneur doit définir la variable d'environnement
ZEO_ADDRESS
sur le serveur ZEO, port 8080, afin de fonctionner comme un client ZEO dépendant du serveur ZEO et de son magasin de données.
Suivez ces étapes :
- Récupérez l'image Plone depuis Docker Hub.
- Créez un fichier
docker-compose.yml
qui répond aux spécifications ci-dessus. Placez ce fichier dans un sous-répertoire (par exemple,site_plone
) pour éviter toute confusion avec le fichier que vous avez créé précédemment. - Exécutez
docker-compose
pour créer vos conteneurs. - Accédez à votre nouveau site web Plone sur l'instance1 à l'adresse http://localhost:8081.
- Suivez l'assistant pour créer un nouveau site Plone.
- Utilisez les informations d'identification par défaut (admin / admin) pour l'administrateur.
- Après avoir créé votre nouveau site, visualisez-le depuis l'autre instance (http://localhost:8082) pour confirmer que vous avez deux instances accédant au même magasin de données ZEO.
version: '3'
services:
zeo:
image: plone
command: zeo
volumes:
- zeo_data:/data
instance1:
image: plone
ports:
- "8081:8080"
depends_on:
- zeo
environment:
ZEO_ADDRESS: "zeo:8080"
instance2:
image: plone
ports:
- "8082:8080"
depends_on:
- zeo
environment:
ZEO_ADDRESS: "zeo:8080"
volumes:
zeo_data:
Fait par Mohamed Moustapha Niang