Se familiariser avec les bases de docker:
Dans tous les ateliers il faut utiliser l’utilisateur « ubuntu » et se positionner dans /home/ubuntu
su ubuntu
cd /home/ubuntu
Créez un dossier « lab01 » qui sera notre répertoire de travail pour la suite de cet atelier.
mkdir lab01 ; cd lab01
On va utiliser une application web qui compte les requêtes http et renvois le résultat. C’est une application NodeJS qui utilise le framework Express et la base de données Redis. Cette application est construite à partir des fichiers suivants:
app.js'use strict';
const bluebird = require('bluebird'),
express = require('express'),
app = express(),
redis = require("redis"),
client = redis.createClient({host: "redis"}),
PORT = 8080;
bluebird.promisifyAll(redis.RedisClient.prototype);
app.get('/', (req, res) => {
client.incrAsync('hits').then((result) => {
res.send('Hello everyone! I have processed ' + result + ' requests.\n');
})
});
app.listen(PORT);
console.log('Running on http://localhost:' + PORT);
package.json{
"name": "compose-workshop",
"version": "1.0.0",
"description": "NodeJS App",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/Inist-CNRS/compose-workshop.git"
},
"keywords": [
"docker",
"compose",
"nodejs"
],
"author": "Claude Niederlender <claude.niederlender@gmail.com>",
"license": "ISC",
"bugs": {
"url": "https://github.com/Inist-CNRS/compose-workshop/issues"
},
"homepage": "https://github.com/Inist-CNRS/compose-workshop#readme",
"dependencies": {
"bluebird": "^3.4.0",
"express": "^4.13.4",
"redis": "^2.5.3"
}
}
Créez un dossier app01 ensuite créez les deux fichiers « app.js » et « package.json » de l’application dans ce dossier.
mkdir app01 ; cd app01
Lancez un container redis à partir de l’image redis:latest.
docker run -d --name redis redis
Créez un réseau bridge network nommé « mon-net »
docker network create mon-net
Connectez le container « redis » sur ce réseau
docker network connect mon-net redis
Construisez une image pour l’application NodeJS, avec un Dockerfile.
Créez un fichier sans extension nommé « Dockerfile » dans notre dossier puis ajouter les instructions suivantes :
FROM node:14.15.0-alpine
LABEL maintainer="UIC Training <training@useitcloud.fr>"
# Create the directory /usr/src/my-app
RUN ...
# Change the current directory to /usr/src/my-app
WORKDIR ...
# Copy the file app.js to the current directory
COPY ...
# Copy the file package.json to to the current directory
COPY ...
# Execute the command: npm install
RUN ...
EXPOSE 8080
CMD ["node", "app.js"]
Nous pouvons construire notre image en utilisant la commande suivante:
docker build -t mesapps/app01 .
Une fois cette exécution terminée, vérifiez si l’image a bien été créée avec cette commande:
docker images
Nous allons lancer un conteneur à base de cette image avec la commande suivante:
docker run -d --name app01 --network mon-net -p 8080:8080 mesapps/app01
Pour vérifier le bon fonctionnement de ce déploiement connectez-vous à l’adresse suivante:
http://[LABENVIRONMENTIP]:8080
Le résultat est illustré par cette image.

Listez les containers avec la commande doker ps
Pour accéder au conteneur de l’application app01, utilisez la commande suivante:
docker container exec -it app01 /bin/sh
Nettoyez les ressources avec les commandes suivantes:
docker rm -vf redis
docker rm -vf app01
docker network rm mon-net
Pour ce défi on va redéployer l’application NodeJS en utilisant un fichier docker-compose.yml. Il faut suivre les étapes suivantes:
version: '3'
services:
web:
###
# Insert here instructions for the web NodeJS application
###
redis:
###
# Insert here instructions for redis
###
docker compose up -d
http://[LABENVIRONMENTIP]:8080docker compose stop
docker compose rm
Dans cette partie vous allez déployer un site web wordpress basé sur 3 services qui sont:
Pour la persistance des données de la base (/var/lib/mysql) utilisez un volume. Cherchez les images avec « docker search »
docker search wordpress
Consultez les images sur dockerhub afin de compléter le fichier « docker-compose.yml » suivant:
version: '3'
services:
db:
image: mariadb:10
volumes:
##
# Ajoutez un volume pour MariaDB data (répertoire /var/lib/mysql)
##
restart: always
environment:
##
# Ajoutez les variables d'environnement pour accés à la base MariaDB
##
dbadmin:
image: phpmyadmin/phpmyadmin
ports:
- "8080:80"
environment:
##
# Ajoutez les variables d'environnement pour MariaDB+PHPMyAdmin
##
depends_on:
##
# Ajouter les dépendances
##
wordpress:
image: wordpress:latest
depends_on:
##
# Ajouter les dépendances
##
ports:
- "8000:80"
restart: always
environment:
##
# Ajoutez les variables d'environnement pour accés à la base MariaDB
##
Lancez l’application avec la commande suivante:
docker compose up -d
Vérifiez que le déploiement est réussi en se connectant à l’adresse suivante :
http://[LABENVIRONMENTIP]:8081
Configurez votre cms wordpress Procédez au nettoyage du déploiement avec les commandes suivantes:
docker compose stop
docker compose rm
Relancez à nouveau le déploiement
docker compose up -d
Vérifiez que le déploiement est réussi en se connectant à l’adresse suivante :
http://[LABENVIRONMENTIP]:8081
Qu’est-ce que vous constatez ?
Nettoyage
docker compose stop
docker compose rm