Cours Docker 4
Cours Docker 4
Cours Docker 4
des applications
Institut F2i
Jaber
Octobre-Novembre 2022
Programme
• Installation
• Docker proxy
• Premier conteneur
• Image personalisée
• Création d’image
• Dockerfile
1
Programme
• Volumes
• Ressources
• Private Registry
• Docker-compose
• Docker-machine
• Docker Swarm
• Docker Network
2
Les Technologies de Virtualisation
3
Les Technologies de Virtualisation
4
Les Technologies de Virtualisation
VMware Server
5
Les Technologies de Virtualisation
VirtualBox
6
Les Technologies de Virtualisation
Hyperviseur
7
Les Technologies de Virtualisation
8
Les Technologies de Virtualisation
Citrix Xen
Microsoft Hyper-V
10
Les Technologies de Virtualisation
Émulation
11
Les Technologies de Virtualisation
http://bochs.sourceforge.net/
http://wiki.qemu.org/
12
Les Technologies de Virtualisation
Bochs
Qemu
Kvm
User-Mode Linux
16
Les Technologies de Virtualisation
À Noyau Partagé
17
Les Technologies de Virtualisation
19
Les Technologies de Virtualisation
20
Les Technologies de Virtualisation
OpenVZ
21
Introduction à Docker
Présentation de Docker
22
Introduction à Docker
La plateforme Docker
La plateforme Docker
Docker Engine
25
Introduction à Docker
26
Introduction à Docker
27
Introduction à Docker
Qu’est-ce-qu’un conteneur ?
28
Introduction à Docker
29
Introduction à Docker
Plateforme applicative
30
Introduction à Docker
Docker Engine
32
Introduction à Docker
33
Introduction à Docker
34
Introduction à Docker
35
Introduction à Docker
36
Introduction à Docker
37
Introduction à Docker
Les conteneurs
39
Introduction à Docker
40
Introduction à Docker
Normes & standards de conteneur
https://containerd.io/
42
Introduction à Docker
43
Introduction à Docker
Une plateforme moderne pour toutes les
applications
45
Introduction à Docker
Les Besoins
46
Introduction à Docker
Les Besoins
47
Introduction à Docker
L’architecture Docker
48
Introduction à Docker
49
Introduction à Docker
Le démon Docker
50
Introduction à Docker
Le client Docker
docker run
52
Introduction à Docker
docker pull
docker run
docker push
53
Introduction à Docker
Docker Store
https://hub.docker.com/
54
Introduction à Docker
Les objets Docker
• Documentation en ligne
https://docs.docker.com/get-docker/
56
Installation de Docker
• Debian Jessie/Wheezy
uname -r
uname -m
lsb release -a
getconf LONG BIT
57
Installation de Docker
59
Démarrage d’un Conteneur
60
Démarrage d’un Conteneur
62
Démarrage d’un Conteneur
63
Démarrage d’un Conteneur
1 FROM scratch
2 COPY hello /
3 CMD ["/hello"]
Lancement du processus
Lancement du processus
Lancement du processus
68
Arrêt d’un Conteneur
69
Les Conteneurs
72
Les Conteneurs
74
Lancement d’un Conteneur In-
teractif
75
Lancement d’un Conteneur In-
teractif
76
Lancement d’un Conteneur In-
teractif
78
Lancement d’un Conteneur In-
teractif
79
Lancement d’un Conteneur In-
teractif
81
Manipulation des Conteneurs
82
Manipulation des Conteneurs
83
Manipulation des Conteneurs
Exposition de fichiers
85
Création d’Images avec Docker
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
• Les procédures :
86
Création d’Images avec Docker
87
Création d’Images avec Docker
# mongo
...
> use testdb
switched to db testdb
> db.utilisateurs.insert( { nom : "test", prenom : "reussi" } )
WriteResult({ "nInserted" : 1 })
> db.utilisateurs.find()
{ " id" : ObjectId("589758a1ad9a417fe7052d08"), "nom" : "test",
> db.utilisateurs.drop()
true
> exit
# exit
88
Création d’Images avec Docker
Persistance de l’image
sudo docker ps -a
sudo docker commit nom conteneur doclab/mongodb
sudo docker images
89
Création d’Images avec Docker
90
Création d’Images avec Docker
92
Création d’Images avec Docker
# exit
$ sudo docker commit mongo doclab/mongodb
$ sudo docker rm -f mongo
$ sudo docker run -it --name mongo doclab/mongodb
# ps
93
Création d’Images avec Docker
95
Création d’Images avec Docker
Résultat
96
Création d’Images avec Docker
Résultat
98
Utilisation d’un Dockerfile
99
Utilisation d’un Dockerfile
• Bien que, dans le cas d’une image officielle,
le fichier Dockerfile serve au producteur pour
réaliser l’image et montrer publiquement la façon
dont celle-ci a été réalisée.
101
Anatomie d’un Dockerfile
• FROM Les fichiers Dockerfile commencent
toujours par la commande FROM, qui permet de
définir une image de base par-dessus laquelle
la nouvelle image sera construite. Dans ce cas,
il s’agit d’une Debian, version Wheezy.
FROM debian:wheezy
102
Anatomie d’un Dockerfile
103
• VOLUME Dans le cas d’un serveur de base
de données comme Mongodb, il est important
que les fichiers de données soient détachés du
conteneur de base de données lui-même.
104
Anatomie d’un Dockerfile
106
Un exemple de Dockerfile
107
Un exemple de Dockerfile
while true;
do
echo $1 \($(date +%H:%M:%S)\);
sleep "$RYTHMEPERCUSSION";
done
Dockerfile
FROM ubuntu:latest
MAINTAINER Openepo "doclab@openepo.net"
COPY percussion.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENV RYTHMEPERCUSSION 2
ENTRYPOINT ["/entrypoint.sh"]
CMD ["percussion"]
108
Construction d’une Image
. ./percussion.sh bonjour
RYTHMEPERCUSSION non définie
echo $?
1
RYTHMEPERCUSSION=2 . ./percussion.sh
(12:24:57)
(12:24:59)
(12:25:01)
(12:25:03)
(12:25:05)
(12:25:07)
(12:25:09)
^C
109
Construction d’une Image
Génération de l’image
• Lancement du conteneur
Génération de l’image
111
Construction d’une Image
Génération de l’image
112
Construction d’une Image
114
Construction d’une Image
115
Construction d’une Image
Commande additionnelle
116
Construction d’une Image
Notion de contexte
Processus de démarrage
118
Construction d’une Image
Processus de démarrage
FROM ubuntu:latest
MAINTAINER Openepo "doclab@openepo.net"
COPY percussion.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENV RYTHMEPERCUSSION 2
CMD ["/entrypoint.sh", "percussion"]
119
Construction d’une Image
Processus de démarrage
120
Construction d’une Image
Processus de démarrage
http://www.json.org/
http://json.org/example.html
121
Construction d’une Image
Processus de démarrage
122
Construction d’une Image
Processus de démarrage
Processus de démarrage
Processus de démarrage
125
Construction d’une Image
Processus de démarrage
while true;
do
echo $1 \($(date +%H:%M:%S)\);
sleep "$RYTHMEPERCUSSION";
done
Commandes diverses
128
Principe & Architecture
129
Principe & Architecture
Le format de conteneur
130
Principe & Architecture
Présentation de Docker
131
Principe & Architecture
132
Principe & Architecture
133
Principe & Architecture
- volumes ;
134
Principe & Architecture
135
Principe & Architecture
Choix de montage
136
Principe & Architecture
Choix de montage
• Présentation de AUFS
• Plates-formes supportées
138
Principe & Architecture
Le stockage de données
• Présentation de AUFS
• Plates-formes supportées
https://hub.docker.com/ /registry/
141
Installation d’un Registre Privé
142
Installation d’un Registre Privé
{"name":"percussion","tags":["latest"]}
Démarrage du registre
ping doclabregistre
sudo docker run -d --name registre -p 5000:5000 registry:2.0
...
sudo docker ps
Démarrage du registre
http://doclabregistre:5000/v2/percussion/tags/list
147
Installation d’un Registre Privé
148
Installation d’un Registre Privé
149
Installation d’un Registre Privé
150
Installation d’un Registre Privé
Gestion de la persistance
151
Installation d’un Registre Privé
Gestion de la persistance
152
Installation d’un Registre Privé
Gestion de la persistance
153
Installation d’un Registre Privé
Gestion de la persistance
cd /home/doclabregistre/contenu
tree -d
154
Installation d’un Registre Privé
Gestion de la persistance
Présentation de Compose
156
Administration
157
Administration
158
Administration
159
Administration
160
Administration
161
Administration
Cas d’utilisation
docker-compose up
162
Administration
Cas d’utilisation
163
Administration
Cas d’utilisation
docker-compose up -d
./run tests
docker-compose down
164
Administration
Cas d’utilisation
165
Administration
https://docs.docker.com/compose/install/#install-compose
Vérification de l’installation
docker-compose --version
166
Administration
Configuration
Définir les dépendances de l’application.
mkdir composetest
cd composetest
167
Administration
Docker Compose : le fichier app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host=’redis’, port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr(’hits’)
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route(’/’)
def hello():
count = get_hit_count()
return
’Hello World! I have been seen {} times.\n’.format(count)
if __name__ == ‘‘__main__’’:
app.run(host=’’0.0.0.0’’, debug=True)
168
Administration
flask
redis
169
Administration
Création de Dockerfile
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
170
Administration
171
Administration
version: ’3’
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
172
Administration
Le fichier docker-compose.yml
173
Administration
docker-compos up
174
Administration
curl http://0.0.0.0:5000/
curl http://localhost:5000/
175
Administration
docker image ls
docker inspect ID
176
Administration
docker-compose down
177
Administration
version: ’3’
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"
docker-compose up
179
Administration
docker-compose up -d
docker-compose ps
docker-compose run web env
docker-compose stop
docker-compose down
180
Compose et WordPress
Définir le projet
version: ’3.3’
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data: {}
182
Compose et WordPress
Construire le projet
docker-compos up -d
183
Compose et WordPress
Afficher WordPress
Arrêt
docker-compose down
186
Administration
Docker Swarm
190
Administration
Docker Swarm
192.168.1.103 dockerm
192.168.1.107 dockerc1
192.168.1.108 dockerc2
193
Docker Swarm
194
Docker Swarm
docker node ls
docker service ls
docker service ps web
curl http://dockerm:8081
197
Docker Swarm
docker service ls
docker service ps
Docker inspect
199
Administration
Obtenir l’adresse MAC d’une instance
200
Administration
201
Administration
202