26/02/16
Mutualisation de plusieurs serveurs virtuels depuis un serveur physique grâce à un logiciel nommé l’hyperviseur. L’hyperviseur permet d’émuler intégralement les différentes ressources matérielles d’un serveur physique :
Les VM (Virtual Machine) accèdent à des ressources matérielles selon leurs besoins (par exemple plus de puissance processeur et plus de !mémoire vive mais avec moins d’espace disque) Mes modifications de ses caractéristiques ce fait simplement et s’adapte au besoin.



La conteneurisation est de plus en plus populaire car les conteneurs sont :
Le Dockerfile permet la construction d’une image. Les commandes internes sont :
pour Builder une image avec le Dockerfile il faut lancer la commande :
# se placer au même niveau que le Dockerfile
docker build -t [image name] .
Pour lancer une instance docker il faut executer la commande :
docker run [image name]
# Avec des options supplémentaire (mode daemon, nom du process docker, partage de port, partage de volume hôte/instance)
docker run -d --name=WebMe -p 333:4444 -v /home/isen/docker/newpyth/www:/var/www pythone
# le -d indique daemon (en "arrière plan")
docker run -ti --name=WebMe -p 333:4444 -v /home/isen/docker/newpyth/www:/var/www pythone
# le -t indique le mode terminal. Affichera tous les logs
# le -i indique interactif et vous permet d'intéragire avec le process
#Pour stop une instance :
docker stop [instance name]
root@docker:/home/isen/docker/newpyth# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85ea168c3323 pythone:latest "/bin/sh -c /sbin/st..." 6 minutes ago Up 5 minutes 0.0.0.0:80-\>4444/tcp WebOne
# Stop de l'instance
root@docker:/home/isen/docker/newpyth# docker stop e55976589871
e55976589871
# ou avec le nom de l'instance
root@docker:/home/isen/docker/newpyth# docker stop WebOne
WebOne
# Suppression de l'instance
root@docker:/home/isen/docker/newpyth# docker rm e55976589871
e55976589871
# Ou avec le nom de l'instance
root@docker:/home/isen/docker/newpyth# docker rm
WebOne
root@docker:/home/isen/docker/newpyth# cat Dockerfile
FROM debian:latest
RUN apt update
COPY ./start.sh /sbin/start.sh
RUN chmod +x /sbin/start.sh
RUN apt install python -y
RUN mkdir /var/www
CMD /sbin/start.sh
root@docker:/home/isen/docker/newpyth# docker build . -t pythone
Sending build context to Docker daemon 5.632kB
Step 1/7 : FROM debian:latest
---> c4905f2a4f97
Step 2/7 : RUN apt update
---> Using cache
---> 156d9dcd3d3a
[...]
Step 7/7 : CMD /sbin/start.sh
---> Using cache
---> 864b75e537dc
Successfully built 864b75e537dc
Successfully tagged pythone:latest
root@docker:~/newpyth# docker run -d --name=WebMe -p 333:4444 \
-v $(pwd)/newpyth/www:/var/www pythone
e05ea5918438b417c7544bf5a6d3daf9c232e21927f9c7407cb4556ac002776f
root@docker:~/newpyth# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e05ea5918438 pythone "start.sh…" 7sec ago Up 5sec 333->4444/tcp WebMe
root@docker:/home/isen/docker/newpyth# cat www/index.html
<pre>
I am alive !!!
</pre>
root@docker:/home/isen/docker/newpyth# curl http://localhost:333
<pre>
I am alive !!!
</pre>
Les options peuvent être rébarbative dans le cadre d’un grand nombre d’instance.
Nous pouvons utiliser un “orchestrateur” comme docker-compose
Ce dernier à travers un fichier de configuration en yml (docker-compose.yml) permet de démarrer les instances qui y sont configurées.
Ici nous allons configuré sur la base de l’image pythone 2 instances docker sur les port 80 et 443
root@docker:/home/isen/docker/newpyth# cat docker-compose.yml
version: "3.3"
services:
WebOne:
image: pythone:latest
volumes:
- "./www:/var/www"
ports:
- "80:4444"
WebTwo:
image: pythone:latest
volumes:
- "./www:/var/www"
ports:
- "443:4444"
root@docker:/home/isen/docker/newpyth# docker-compose up -d
Starting newpyth_WebTwo_1 ... done
Starting newpyth_WebOne_1 ... done
root@docker:/home/isen/docker/newpyth# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85ea168c3323 pythone "st…" 1min ago 3sec 80->4444/tcp newpyth_WebOne_1
e55976589871 pythone "st…" 1min ago 3sec 443->4444/tcp newpyth_WebTwo_1
root@docker:/home/isen/docker/newpyth# docker-compose down
Stopping newpyth_WebTwo_1 ... done
Stopping newpyth_WebOne_1 ... done
Removing newpyth_WebTwo_1 ... done
Removing newpyth_WebOne_1 ... done
Removing network newpyth_default
root@docker:/home/isen/docker/newpyth# curl -sq http://localhost:80
<pre>
I am alive !!!
</pre>
root@docker:/home/isen/docker/newpyth# curl -sq http://localhost:443
<pre>
I am alive !!!
</pre>
docker permet de se “connecter” sur une instance avec son shell ou du moins lancer un processus autre que celui pour le quel il a été créé
root@docker:/home/isen/docker/newpyth# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85ea168c3323 pythone "st…" 1min ago 3sec 80->4444/tcp newpyth_WebOne_1
e55976589871 pythone "st…" 1min ago 3sec 443->4444/tcp newpyth_WebTwo_1
root@e55976589871:/# ps axf
PID TTY STAT TIME COMMAND
93 pts/0 Ss 0:00 bash
100 pts/0 R+ 0:00 \_ ps axf
1 ? Ss 0:00 /bin/sh -c /sbin/start.sh
8 ? S 0:00 /bin/bash /sbin/start.sh
9 ? S 0:00 \_ python -m SimpleHTTPServer 4444
Dans l’exemple precedent nous avons lancé un processus bash permettant de se “connecter” en shell sur une instance docker.
/bin/bash étant un binaire comme un autre il est tout a fait possible de lancer autre chose.
# Acune instance ne tourne acutellement sur le serveur.
root@docker:/home/isen/docker/newpyth# docker ps
CONTAINER ID IMAGE COMMAND CREATED SATUS PORTS NAMES
# Verification de la présence de l'image
root@docker:~/newpyth# docker image ls | grep pythone
pythone latest 8698631e54b9 7 years ago 15.2MB
# Lancement de l'instance pythone en mode par default
root@docker:/home/isen/docker/newpyth# docker run -d pythone
# Lancement de l'instance pythone avec un autre binaire
root@docker:/home/isen/docker/newpyth# docker run -d date
lun. 15 avril 2024 22:05:17 CEST