Manipuler Docker
Manipuler Docker
Manipuler Docker
Manipuler Docker
Introduction
Ce tutoriel vous guidera dans la création d’une image d’application pour un site web
statique qui utilise le cadre Express et Bootstrap. Vous construirez ensuite un conteneur
en utilisant cette image, la pousserez vers Docker Hub, et l’utiliserez pour construire un
autre conteneur, en montrant comment vous pouvez recréer et mettre à l’échelle votre
application.
Pour une version plus détaillée de ce tutoriel, avec des explications plus détaillées de
chaque étape, veuillez vous référer à Comment créer une application Node.js avec
Docker.
Conditions préalables
Tout d’abord, créez un répertoire pour votre projet dans le répertoire personnel de votre
utilisateur non root :
1. md node_project
1. cd node_project
2.
Copy
{
"name": "nodejs-image-demo",
"version": "1.0.0",
"description": "nodejs image demo",
"author": "Sammy the Shark <[email protected]>",
"license": "MIT",
"main": "app.js",
"scripts": {
"start": "node app.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"nodejs",
"bootstrap",
"express"
],
"dependencies": {
"express": "^4.16.4"
}
}
1. npm install
2.
Nous allons créer un site web qui offre aux utilisateurs des informations sur les requins.
Créer index.js dans le répertoire principal du projet pour définir les routes du projet.
Ajoutez le contenu suivant au fichier pour créer l’application Express et les objets du
Routeur, définissez le répertoire de base, le port et l’hôte comme variables, définissez
les routes et montez le logiciel médiateur du routeur avec les actifs statiques de
l’application :
// Constants
const PORT = 8080;
const HOST = '0.0.0.0';
router.use(function (req,res,next) {
console.log("/" + req.method);
next();
});
router.get("/",function(req,res){
res.sendFile(path + "index.html");
});
router.get("/sharks",function(req,res){
res.sendFile(path + "sharks.html");
});
app.use(express.static(path));
app.use("/", router);
app.listen(8080, function () {
console.log('Example app listening on port 8080!')
})
1. md views
<!DOCTYPE html>
<html lang="en">
<head>
<title>Tout sur les Requins</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link href="css/styles.css" rel="stylesheet">
<link href='https://fonts.googleapis.com/css?family=Merriweather:400,700'
rel='stylesheet' type='text/css'>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></scrip
t>
</head>
<nav class="navbar navbar-inverse navbar-static-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-
toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-
expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Tout sur les Requins</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav mr-auto">
<li><a href="/">Acceuil</a></li>
<li class="active"><a href="/sharks">Requins</a></li>
</ul>
</div>
</div>
</nav>
<div class="jumbotron text-center">
<h1>Requin Info</h1>
</div>
<div class="container">
<div class="row">
<div class="col-md-6">
<p>
<div class="caption">Certains requins sont connus pour être dangereux
pour les humains, mais beaucoup d’autres ne le sont pas. Le requin-scie, par
exemple, n’est pas considéré comme une menace pour les humains.</div>
<img
src="https://assets.digitalocean.com/articles/docker_node_image/sawshark.jpg"
alt="Sawshark">
</p>
</div>
<div class="col-md-6">
<p>
<div class="caption">D’autres requins sont connus pour être amicaux
et accueillants !</div>
<img
src="https://assets.digitalocean.com/articles/docker_node_image/sammy.png"
alt="Sammy the Shark">
</p>
</div>
</div>
</div>
</body>
</html>
Enfin, créez la feuille de style CSS personnalisée que vous avez liée
dans index.html et sharks.html en créant d’abord un dossier css dans le
répertoire des vues :
1. md views/css
Creez puis ouvrez la feuille de style et ajoutez le code suivant, qui définira la couleur et
la police de caractères souhaitées pour nos pages :
.navbar {
margin-bottom: 0;
}
body {
background: #020A1B;
color: #ffffff;
font-family: 'Merriweather', sans-serif;
}
h1, h2 {
font-weight: bold;
}
p {
font-size: 16px;
color: #ffffff;
}
.jumbotron {
background: #0048CD;
color: white;
text-align: center;
}
.jumbotron p {
color: white;
font-size: 26px;
}
.btn-primary {
color: #fff;
border-color: white;
margin-bottom: 5px;
}
div.caption {
float : left;
clear: both;
}
}
Lancez l’application :
1. npm start
2.
Dans votre navigateur, accédez à http://localhost:8080 . Vous verrez la page
d’accueil suivante :
Cliquez sur le bouton Requin Info. Vous verrez le page d’information suivante :
FROM node:10-alpine
WORKDIR /home/node/app
COPY package*.json ./
USER node
COPY --chown=node:node . .
EXPOSE 8080
1. docker images
2.
Output
REPOSITORY TAG
IMAGE ID CREATED SIZE
your_dockerhub_username/nodejs-image-demo latest
1c723fb2ef12 8 seconds ago 895MB
node 10
f09e7c96b6de 17 hours ago 893MB
1. docker ps
2.
Output
CONTAINER ID IMAGE
COMMAND CREATED STATUS PORTS
NAMES
e50ad27074a7 your_dockerhub_username/nodejs-image-demo
"npm start" 8 seconds ago Up 7 seconds
0.0.0.0:80->8080/tcp nodejs-image-demo
Votre conteneur étant en fonctionnement, vous pouvez maintenant visiter votre
application en naviguant sur votre navigateur vers http:// localhost. Vous verrez
une fois encore la page d’accueil de votre application :
Maintenant que vous avez créé une image pour votre application, vous pouvez la
pousser vers Docker Hub en vue d’une utilisation ultérieure.
Étape 4 (facultatif) - Utilisation d’un répertoire pour travailler avec des images
La première étape pour pousser l’image est de se connecter à votre compte Docker Hub
:
Si vous le souhaitez, vous pouvez tester l’utilité du registre d’images en détruisant votre
conteneur d’application et votre image actuels et en les reconstruisant.
1. docker ps
2.
Output
CONTAINER ID IMAGE
COMMAND CREATED STATUS PORTS
NAMES
e50ad27074a7 your_dockerhub_username/nodejs-image-demo
"npm start" 3 minutes ago Up 3 minutes
0.0.0.0:80->8080/tcp nodejs-image-demo
En utilisant le CONTAINER ID listé dans votre sortie, arrêtez le conteneur d’application
en cours d’exécution. Veillez à remplacer l’ID surligné ci-dessous par votre
propre CONTAINER ID :
1. docker stop e50ad27074a7
2.
Listez toutes vos images portant le drapeau -a :
1. docker images -a
2.
Vous verrez le résultat suivant avec le nom de votre
image your_dockerhub_username/nodejs-image-demo, ainsi que l’image
du nœud et les autres images de votre construction :
Output
REPOSITORY TAG
IMAGE ID CREATED SIZE
your_dockerhub_username/nodejs-image-demo latest
1c723fb2ef12 7 minutes ago 895MB
<none> <none>
e039d1b9a6a0 7 minutes ago 895MB
<none> <none>
dfa98908c5d1 7 minutes ago 895MB
<none> <none>
b9a714435a86 7 minutes ago 895MB
<none> <none>
51de3ed7e944 7 minutes ago 895MB
<none> <none>
5228d6c3b480 7 minutes ago 895MB
<none> <none>
833b622e5492 8 minutes ago 893MB
<none> <none>
5c47cc4725f1 8 minutes ago 893MB
<none> <none>
5386324d89fb 8 minutes ago 893MB
<none> <none>
631661025e2d 8 minutes ago 893MB
node 10
f09e7c96b6de 17 hours ago 893MB
Retirez le conteneur arrêté et toutes les images, y compris les images inutilisées ou en
suspens, à l’aide de la commande suivante :
Toutes vos images et tous vos conteneurs ayant été supprimés, vous pouvez
maintenant extraire l’image de l’application à partir du Docker Hub :
1. docker images
2.
Output
REPOSITORY TAG
IMAGE ID CREATED SIZE
your_dockerhub_username/nodejs-image-demo latest
1c723fb2ef12 11 minutes ago 895MB
1. docker ps
2.
Output
CONTAINER ID IMAGE
COMMAND CREATED STATUS PORTS
NAMES
f6bc2f50dff6 your_dockerhub_username/nodejs-image-demo
"npm start" 4 seconds ago Up 3 seconds
0.0.0.0:80->8080/tcp nodejs-image-demo
Consultez http://localhost une fois de plus pour examiner votre application en
cours.