Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 10

TP1 Introduction à Docker

Benoît Benedetti

Octobre 2015

1 Premier conteneur
Le but de cette partie est de vous faire découvrir le client Docker, et de vous
familiariser avec les commandes du client, les images, les conteneurs, savoir lire
la sortie des commandes et débugger leur utilisation Dans la suite, nous mettrons
ces connaissances à profit pour passer à une utilisation pratique de Docker
Lorsque que je vous indique la commande complète, prenez le temps de lire sa
page de manuel, et de comprendre son fonctionnement.
Lorsque la commande à taper n’est pas exactement détaillée, écrivez-là dans ce
document.
Répondez au mieux dans ce document, aux différents questions : vous enverrez
ce document rempli, à l’adresse benoit.benedetti@unice.fr, avec comme sujet de
message TP1 Docker : Nom Prénom

1.1 Interactif

1.1.0.0.1 Lancez les conteneurs suivants

docker run ubuntu cat /etc/debian_version


docker run ubuntu uname -a

Expliquez leur sortie.

1.1.0.0.2 Exécutez les commandes ps suivantes

docker ps
docker ps -a
docker ps -q
docker ps -qa
docker ps -ql

1
Expliquez leur résultat. Quels sont les noms, identifiants, etats des différents
conteneurs ?

1.1.0.0.3 utilisez la commande rm pour faire le ménage dans vos


conteneurs

1.1.0.0.4 combinez la commande rm avec la commande ps pour sup-


primer un, plusieurs ou tous les conteneurs

1.2 Images

1.2.0.1 Commande images


Utilisez la commande images pour lister les images sur votre hôte.
Quelles sont les images, leurs identifiants ? Quelles images sont des images offi-
cielles ? Pourquoi ?

1.2.0.1.1 Commande search


Utilisez la commande search pour rechercher des images de nom busybox et
alpine.
D’après les résultats des recherches, utilisez la commande pull pour récupérer
une version officielle et utilisateur d’une image alpine et/ou busybox.
Relistez vos images avec la commande images, et essayez de répondre aux ques-
tions précédentes.
Utilisez la commande history sur les différentes images : à quoi correspond la
sortie de la commande ?
Lancez des conteneurs à partir de ces images.
Utilisez la commande rmi pour supprimer les images alpine et busybox dont
nous n’aurons plus besoin. Utilisez la commande rm pour faire du ménage dans
les conteneurs.

1.3 Conteneur en arrière-plan

1.3.0.0.1 Exécutez un shell dans un conteneur :


Lancez un conteneur comme suit :

docker run -it ubuntu /bin/bash

2
Exécutez ensuite la commande suivante dans votre conteneur :

# while /bin/date ;do /bin/sleep 1 ;done

Que fait la commande précédente ?


Faites Ctrl+c suivi de Ctrl-d, puis docker ps : est-ce que le conteneur précé-
dent apparaît ?pourquoi ?
Relancez un nouveau conteneur avec la même commande :

docker run -it ubuntu /bin/bash

Et relancez la commande dans le conteneur

# while /bin/date ;do /bin/sleep 1 ;done

Faites Ctrl+p+q, puis docker ps : est-ce que le conteneur précédent appa-


raît ?pourquoi ?

1.3.0.0.2 Utilisez les commandes suivantes pour suivre l’exécution


de ce conteneur lancé en arrière plan :

docker top
docker logs
docker logs -f
exec
attach

2 Construire ses images


Dans cette partie, nous allons suivre un cas concret d’utiisation de Docker, en
construisant notre propre image Nginx. Nous commencerons manuellement par
modifier un conteneur, puis commiter manuellement les modifications en image.
Puis nous utiliserons un Dockerfile pour automatiser le processus

2.1 Construction manuelle


2.1.1 Installer nginx

2.1.1.1 Exécutez les commandes suivantes pour installer manuelle-


ment nginx dans un conteneur :

docker run --name mynginx -it ubuntu /bin/bash


apt-get install -y nginx
exit

3
2.1.1.2 Commande diff
Utilisez la commande docker diff sur votre conteneur mynginx. Expliquez son
résultat.

2.1.1.3 Committer ses modifications


Utilisez la commande commit pour générer une image à partir de notre conteneur
nginx :

docker commit mynginx mynginximg

A quoi correspond la sortie de cette commande ? Quel est le tag par défaut
de l’image générée ? Exécutez la commande docker images pour vous aider à
répondre aux 2 question précédentes.
Exécutez la commande tag suivante pour rajouter un tag à une image :

docker tag mynginximg mynginximg :0.0

Exécutez la commande images.


Quelle est la différence entre les commandes tag et commit.
Utilisez les commandes ̀tag et commit pour ajouter des tags de votre choix.

2.1.1.3.1 Utilisez la commande docker history sur ces différentes


images, et les différentes version taggées

2.1.1.3.2 Utilisez la commande rmi pour supprimer des images myn-


ginximg, sauf celles taggées latest et 0.0

2.1.1.4 Lancez un conteneur basé sur notre image :

docker run -d mynginximg nginx


docker ps

Pourquoi ça ne marche pas ?


Lancez correctement un conteneur basé sur notre image :

docker run -d mynginximg nginx -g "daemon off ;"


docker ps

4
Lisez la page d’aide la commande docker inspect.
Utilisez la commande suivante sur le conteneur précédent :

docker inspect -f "{{.NetworkSettings.IPAddress}}"

Essayez de pinger votre conteneur :

ping

Essayez un curl sur votre conteneur :

curl http ://ip

Pourquoi la commande suivante ne fonctionne pas :

curl http ://localhost :8080

Utilisez les commandes suivantes pour répondre à ces questions :

docker inspect -f "{{.NetworkSettings.Ports}}"


docker port

2.1.1.4.1 Rediriger les ports de notre conteneur :

docker run -p 443 -p 80 -d mynginximg nginx -g "daemon off ;"

Quelle différence par raport au run d’avant ? utilisez les commandes inspect,ps,
et port pour répondre à cette question.

2.1.1.4.2 Utilisez docker port pour afficher tous les ports redirigés,
ou seulement le port 80

2.1.1.4.3 Vous devriez pouvoir afficher la page de votre serveur web


désormais en utilisant localhost et le port redirigé

5
2.2 Volumes

Nous allons nous placer dans un dossier pour la suite de ce TP :

mkdir mynginx
cd mynginx

Dans ce dossier, créez un fichier html :

echo "<h1>Ma page html</h1>" > index.html

Toujours depuis ce dossier, lancez la commande suivante pour monter le dossier


courant comme répertoire html pour nginx de notre conteneur :

docker run -p 80 -v $(pwd) :/usr/share/nginx/html -d mynginximg nginx -g "daemon off ;"

Affichez votre site. Modifiez votre page.

2.3 Génération automatisée d’image avec un Dockerfile

Dans cette partie, nous allons recréer notre image nginx, mais en automatisant
les commandes depuis un Dockerfile.

2.3.1 Base

2.3.1.0.1 Créez un fichier Dockerfile avec le contenu suivant

FROM ubuntu

RUN apt-get install -y nginx

2.3.1.0.2 Générez votre image avec la commande suivante :

docker build -t mynginximg .

A quoi correspondent les id de la sortie de la commande ? Utilisez la commande


docker images pour répondre.
Analysez et expliquez la sortie de la commande suivante :

docker history mynginximg

6
2.3.2 Cache

Exécutez les commandes suivantes :

docker build -t mynginximg .


docker build --no-cache -t mynginximg .

Expliquez leurs différences.


Et n’oubliez pas d’exécuter un docker run pour tester votre image avant de
passer à la suite.

2.3.3 Ports

Complétez votre Dockerfile :

FROM ubuntu

RUN apt-get install -y nginx

EXPOSE 80 443

Lancez les commandes suivantes :

docker run -P -v $(pwd) :/usr/share/nginx/html -d mynginximg nginx -g "daemon off ;"


docker ps

Quelles différences avec le Dockefile précédent.

2.3.4 CMD

Complétez votre Dockerfile :

FROM ubuntu

RUN apt-get install -y nginx

EXPOSE 80 443

CMD ["nginx", "-g", "daemon off ;"]

Lancez les commandes suivantes :

7
docker build -t mynginximg .
docker run -P -v $(pwd) :/usr/share/nginx/html -d mynginximg
docker run -it mynginximg nginx -h
docker run -it mynginximg echo Hello

Expliquez leur résultat.

2.3.5 ENTRYPOINT

Complétez votre Dockerfile

FROM ubuntu

RUN apt-get install -y nginx

EXPOSE 80 443

ENTRYPOINT ["nginx", "-g", "daemon off ;"]

Lancez les commandes suivantes :

docker build -t mynginximg .


docker run -it mynginximg echo Hello
docker run -it mynginximg nginx -h
docker run -P -v $(pwd) :/usr/share/nginx/html -d mynginximg
docker run --entrypoint=echo -it mynginximg hello

Quelles différences entre CMD et ENTRYPOINT ?

2.3.6 ENTRYPOINT et CMD

Complétez votre Dockerfile :

FROM ubuntu

RUN apt-get install -y nginx

EXPOSE 80 443

ENTRYPOINT ["nginx"]
CMD ["-g", "daemon off ;"]

Lancez les commandes suivantes :

8
docker build -t mynginximg .
docker run -P -v $(pwd) :/usr/share/nginx/html -d mynginximg
docker run -it mynginximg -h
docker run -it mynginximg echo hello
docker run --entrypoint=echo -it mynginximg hello

Expliquez leur résultat.

3 Publier et récupérer une image

3.1 Hub

3.1.0.1 créez un compte sur le Docker Hub


Connectez-vous en ligne de commande avec docker login.

3.1.0.2 Poussez votre image sur le Hub


Retaggez votre image pour que son espace de nommage corresponde à votre
utilisateur du Hub. Utilisez la commande push pour déposer votre image sur le
hub

3.1.0.3 Récupérez une image depuis le Hub


Supprimez toutes vos images et conteneurs locaux nginx. Récupérez l’image
d’un camarade, et lancez un conteneur basé sur cette image

3.2 Registre local

En suivant les instructions officielles, lancez un conteneur exécutant un registre


local.
Puis renommez votre image avec l’espace de nom de votre registre local. Poussez
cette image vers votre registre local.
Supprimez toutes vos images et conteneurs(sauf le conteneur du registre !) locaux
nginx.
Récupérer l’image nginx depuis votre registre local et lancez un conteneur basé
sur cette image
Quelles différences par rapport au Hub ?

9
4 Pour finir
S’il vous reste du temps, essayez d’améliorer votre Dockerfile, par exemple
en évitant d’inclure les logs nginx dans votre image/conteneur (étudiez
https ://github.com/nginxinc/docker-nginx/blob/master/Dockerfile).

10

Vous aimerez peut-être aussi