C09-docker - COURS LINUX - MTN

Guillaume ASTIER

26/02/16

La virtualisation

Le fonctionnement de la virtualisation

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.



Les avantages de virtualisation

Les inconvénients de la virtualisation

Container

Isolation



Avantages docker / virtu

Les avantages de conteneurisation

La conteneurisation est de plus en plus populaire car les conteneurs sont :

fichier / cmd Docker

Dockerfile

Le Dockerfile permet la construction d’une image. Les commandes internes sont :


Build

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] .

Run

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]

list les instances en cours

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

Ex python web Dockerfile

    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

Ex python web build

    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

Ex python web run

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

Ex python web : Vérification du service

    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>

docker compose

docker-compose.yml

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.

ex python web docker-compose.yml

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"

Ex python web : docker-compose run

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

Ex python web : docker-compose stop

    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

Ex python web : Verification

    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 connexion sur instance

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

docker lancement de processus

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