Le but ici est de prendre en main docker.
Pour cela j'ai installé une Ubuntu version server sous Virtual Box.
Comme indiqué sur https://docs.docker.com/engine/install/ubuntu/, il faut installer une de ces versions de Ubuntu :
Ensuite, j'ai suivi les tutos vidéo dédiés de Xavki que l'on trouve sur sa playlist, cad https://www.youtube.com/playlist?list=PLn6POgpklwWq0iz59-px2z-qjDdZKEvWd
Donc dans une console sous Linux, installer Docker avec
sudo apt-get install docker.io
Lien vers le fichier : cliquez ici
Quand Docker est installé, cette commande donne une liste de commandes possibles
docker
Lien vers le fichier : cliquez ici
Lister les conteneurs se fait avec la commande suivante.
Le 'a' veut dire all, cad que l'on affichera tout.
docker ps -a
Lien vers le fichier : cliquez ici
Par défaut le docker hub est installé.
On peut voir les packages dispos via https://hub.docker.com
On peut commencer à jouer en installant un conteneur minimaliste nommé Alpine.
La commande pour le lancer est donnée sur le site.
Si vous listez les conteneurs, vous verrez qu'Alpine s'est lancé et qu'il s'est arrêté tout de suite car il n'avait rien à faire.
docker ps -a
Lien vers le fichier : cliquez ici
On voit que son état est Exited
Si on avait lancé le conteneur Alpine en ajoutant la commande di pour Detach Interractive, alors il aurait continué de fonctionner.
Notez qu'on peut nommer le conteneur, ici avec alpinetest, pour éviter que Docker ne choisisse un nom par défaut.
docker run -di --name alpinetest alpine:latest
Lien vers le fichier : cliquez ici
Là si on refait un docker ps, on voit qu'il est lancé et qu'il tourne
Pour s'y connecter, utiliser docker exec avec les options tid suivi du nom du conteneur et de sh pour avoir le shell et le bach
docker exec -tid alpinetest sh
Lien vers le fichier : cliquez ici
Ensuite si on execute la commande ps, on voit les process qui tournent dans ce conteneur
ps
Lien vers le fichier : cliquez ici
Pour arrêter un conteneur, utilise la commande
docker stop <nom du conteneur>
Lien vers le fichier : cliquez ici
Et pour le supprimer :
Le 'f' permet de forcer, cad qu'il sera arrêté si nécessaire.
docker rm -f <nom du conteneur>
Lien vers le fichier : cliquez ici
Autre exemple où on lance un conteneur nginx en redirigeant son port 80 sur le 8080 de notre machine locale
docker run -tid -p 8080:80 --name monnginx nginx:latest
Lien vers le fichier : cliquez ici
Un docker inspect d'un conteneur permet d'afficher toutes les infos sur ce dernier.
Exemple
docker inspect monnginx
Lien vers le fichier : cliquez ici
Par exemple on voit ici l'ip du conteneur
Une remarque sur docker inspect, c'est qu'on peut filtrer le contenu qui serait du json si j'en crois https://youtu.be/RX96EugUNDk?t=211
Pour récupérer uniquement l'ip, on pourrait pu faire
docker inspect -f "{{.NetworkSettings.IPAddress}}" monnginx
Lien vers le fichier : cliquez ici
Pour lancer un conteneur tout en présentant un volume persistant, on peut utiliser l'option -v
Le répertoire local /srv/dockerdata/nginx de notre machine permettra d'héberger les données du répertoire /usr/share/nginx/html du conteneur
docker rm -f monnginx
mkdir -p /srv/dockerdata/nginx
chmod o+rx /srv/dockerdata/nginx
docker run -tid -p 80:80 -v /srv/dockerdata/nginx/:/usr/share/nginx/html/ --name monnginx nginx:latest
Lien vers le fichier : cliquez ici
De mon côté, dans un premier temps, la commande a généré une erreur du type
docker: Error response from daemon: error while creating mount source path '/srv/dockerdata/nginx': mkdir /srv/dockerdata: read-only file system.
Je l'ai résolu en mettant à jour Docker
Voici l'erreur que j'ai eu
Notez que si vous n'avez pas la commande ps de disponible quand vous être connecté à un conteneur,
vous pouvez l'obtenir en tapant
apt-get update && apt-get install -y procps
Lien vers le fichier : cliquez ici
Maintenant, au lieu d'utiliser l'option v pour utiliser un volume persistant, il y a
docker volume
Lien vers le fichier : cliquez ici
Pour créer un volume de base nommé monvolume, taper
docker volume create monvolume
Lien vers le fichier : cliquez ici
Et pour lancer un conteneur qui l'utilise, taper
docker rm -f monnginx
docker run -tid -p 80:80 --mount source=monvolume,target=/usr/share/nginx/html --name monnginx nginx:latest
Lien vers le fichier : cliquez ici
Maintenant qu'un conteneur utilise ce volume, si on inspecte le volume
docker volume inspect monvolume
Lien vers le fichier : cliquez ici
On voit qu'il pointe localement sur
/var/snap/docker/common/var-lib-docker/volumes/monvolume/_data
Et si on se rend dans ce répertoire, on retrouve les fichiers utilisés par le conteneur
On va utiliser le conteneur alpine, nommé ici alpinetest, pour montrer qu'on peut passer une variable d'environnement en paramètre.
On utilise pour cela l'option --env
Exemple :
docker rm -f alpinetest
docker run -tid --name alpinetest --env MYVAR="pouet" alpine
docker exec -ti alpinetest sh
Lien vers le fichier : cliquez ici
Une fois connecté au conteneur, on voit avec la commande ENV que notre variable MYVAR a bien été passée
On peut aussi passer les différentes variables via un fichier.
On commence pour cela par créer un fichier nommé ici mesvars.txt
cd
nano mesvars.txt
Lien vers le fichier : cliquez ici
On y place nos variables
Puis on peut détruire et relancer le conteneur en lui disant de lire les variables contenues dans le fichier
docker rm -f alpinetest
docker run -tid --name alpinetest --env-file mesvars.txt alpine
docker exec -ti alpinetest sh
Lien vers le fichier : cliquez ici
Si vous voulez sauvegarder l'état d'un conteneur, vous pouvez.
Pour l'exemple ci-dessous on va créer un conteneur nommé myubuntu qui contient la dernière version de Ubuntu.
Ensuite on s'y connecte, on installe nano qui n'y est pas de base et on quitte le conteneur.
docker rm -f myubuntu
docker run -tid --name myubuntu ubuntu:latest
docker exec -ti myubuntu sh
apt-get update
apt-get install nano
exit
Lien vers le fichier : cliquez ici
Relever le container id du conteneur que vous venez de modifier
Sauvegardez le avec la commande docker commit.
Respectez pour cela ce formalisme :
docker commit -m "Mon commentaire" <container id> nom:version
Lien vers le fichier : cliquez ici
Exemple
On peut ensuite afficher les images qui existent avec
docker image ls
Lien vers le fichier : cliquez ici
On retrouve bien l'image qu'on vient de créer
A noter qu'avec la commande docker diff, on peut voir tout ce qui a été modifié sur un conteneur depuis son téléchargement.
Avec notre image nommée test, cela donne donc
docker diff test
Lien vers le fichier : cliquez ici
On peut maintenant lancer un conteneur en utilisant cette image.
Pour cela il faut indiquer son nom et son tag/version
Dans notre exemple cela donne
docker run -tid --name test myubuntu:V1.0
docker exec -ti test sh
Lien vers le fichier : cliquez ici
On voit qu'on s'est bien connecté sur ce conteneur généré à partir d'une image de Ubuntu que l'on avait sauvegardé, image à laquelle on avait ajouté nano, et qui est toujours présent
On peut effacer l'image qu'on vient de créer.
Pour cela il faut supprimer dans un premier temps les conteneurs qu'on a généré avec cette image, puis supprimer l'image.
A noter que dans notre cas on avait nommé le conteneur test, donc les commandes seront :
docker rm -f test
docker image rm -f myubuntu:V1.0
Lien vers le fichier : cliquez ici
On peut aussi créer une image avec docker file.
C'est un fichier de configuration qui permet de créer une image avec une séquence de commandes.
Exemple :
cd
nano dockerfile
Lien vers le fichier : cliquez ici
Y coller ce contenu.
Il indique de faire une image avec la dernière ubuntu,
dire que la personne en charge est roberto,
faire un apt-get update,
installe nano
faire un clean et effacer des répertoires.
FROM ubuntu:latest
MAINTAINER roberto
RUN apt-get update \
&& apt-get install -y nano \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
Lien vers le fichier : cliquez ici
De là on peut créer une image se basant sur le dockerfile qu'on vient de créer avec la commande docker build.
Le point à la fin symbolise le dockerfile
docker build -t image:version .
Lien vers le fichier : cliquez ici
Ce qui donne visuellement
docker image ls confirme que notre image de test est bien créée
On peut sortir l'historique de toutes les commandes qui ont permises de créer une image avec docker history
Exemple :
docker history imagetest:v1.0
Lien vers le fichier : cliquez ici
Article(s) suivant(s)
Article(s) en relation(s)