Affectation au groupe Docker

Pour éviter de devoir préciser le mode « sudo » à chacune de vos commandes, vérifiez que le groupe « docker » existe sur votre machine :

cat /etc/group | grep docker

Si le groupe n’existe pas lancez la commande suivante :

sudo groupadd docker

Ensuite mettez votre utilisateur dans ce groupe :

sudo gpasswd -a <nom_utilisateur> docker

Il vous suffit de redémarrer docker et de rafraîchir les infos du groupe :

sudo service docker restart
newgrp docker

Téléchargement d’images

Docker.io met à votre disposition un tas d’images très variées selon vos besoins.
Vous les trouverez sur le Hub de docker.

Dans ce tutorial nous utiliserons une image Ubuntu 14.04.

Pour mettre en place une image de base, lancez la commande suivante :

docker pull ubuntu:trusty

L’image n’est pas très lourde, c’est ici l’avantage de Docker, mais la commande peut prendre plusieurs minutes selon votre connexion.

Une fois l’image de base téléchargée, lancez la commande

docker images

Vous aurez un résultat de ce type :

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu trusty a5a467fddcb8 2 days ago 187.9 MB

Comme vous pouvez le constater, la taille de notre image est faible comparée a une VM ubuntu classique.

Si vous désirez supprimer une image, vous pouvez lancer la commande suivante :

docker rmi <IMAGE_ID>

Notez que vous pouvez utiliser la touche TAB pour autocompléter l’ID !

Au lieu de renseigner l’IMAGE ID vous pouvez écrire <REPOSITORY>:<TAG>, ce qui donne avec notre exemple « ubuntu:trusty »

Le but de cet article sera d’utiliser cette image pour installer les mises à jour du système et l’enregistrer sous une nouvelle image.
Nous allons utiliser deux méthodes pour cela.

Création d’une image via shell

Nous allons lancer notre image précédemment téléchargée et accéder à son shell :

docker run -it <IMAGE_ID> bash

– Le paramètre -i permet l’accès à stdin/stdout
– Le paramètre -t permet l’accès à tty

Nous avons créé un conteneur, et il est possible d’afficher les conteneurs en cours d’exécution sur votre machine avec la commande :

docker ps

Bien sur cette commande doit être lancée sur le shell de votre machine, et non celui du conteneur ! Vous aurez un affichage de ce type :

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9ebbe6ea61aa ubuntu:trusty bash 4 minutes ago Up 4 minutes jolly_yonath

Nous pouvons désormais lancer les commandes que le souhaite dans le conteneur. Remarquez que l’utilisateur est « root », mais aucun risque pour votre système car nous sommes dans un context isolé et virtuel.

Le but de notre article et de mettre le système à jour, lancez donc la commande :

apt-get update

Une fois la mise à jour terminée, faites CTRL + D pour quitter le conteneur.
Si nous lançons la commande de tout à l’heure, docker ps vous remarquerez que la liste est vide.

Pour afficher le conteneur que l’on vient de fermer, ajoutez un paramètre :

docker ps -a

Notre conteneur précédemment quitté s’affiche :

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9ebbe6ea61aa ubuntu:trusty bash 8 minutes ago Exited (0) About a minute ago jolly_yonath

Sachez que plusieurs opérations sont disponibles sur les conteneurs, en voici une liste des plus utilisées :

docker stop <CONTAINER_ID> # Arrête le conteneur
docker start <CONTAINER_ID> # Démarrer le conteneur
docker restart <CONTAINER_ID> # Equivalent d'un stop/start
docker kill <CONTAINER_ID> # Tue le conteneur
docker rm <CONTAINER_ID> # Supprime le conteneur (lancer un stop avant)

Au lieu d’utiliser le CONTAINER_ID vous pouvez utiliser le champ NAMES, autogénéré dans notre cas. Si vous désirez mettre votre propre nom, notre commande run deviendra :
docker run -it --name test_nom ubuntu:trusty
Ce nom peut maintenant être utiliser au lieu du CONTAINER_ID, il doit être unique sinon Docker vous renverra une erreur.

Revenons à nos moutons, nous allons enregistrer nos modifications sous une nouvelle image :

docker commit <CONTAINER_ID> <NEW_IMAGE_NAME>

Je l’ai appelé « test_shell » et voici le retour que j’ai avec un docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
test_shell latest 80d3effbbe3e 8 seconds ago 209.2 MB
ubuntu trusty a5a467fddcb8 2 days ago 187.9 MB

Création d’une image via un Dockerfile

Les Dockerfile permettent de faire de façon automatisée ce que nous avons fait précédemment. Dans notre exemple, nous n’effectuons une seule commande, mais pour des images plus complexes on peut avoir beaucoup plus de choses à faire.
Nous en parlerons lors d’un prochain article, pour le moment nous allons rester sur notre simple mise à jour.

Pour ma part j’ai créé un dossier Docker dans mon espace personnel, et un dossier test pour y mettre mon fichier :

mkdir ~/Docker/test
vi ~/Docker/test/Dockerfile

Le contenu du fichier est le suivant :

# We use ubuntu image
FROM ubuntu:trusty
 
# And make updates
RUN apt-get update

Ici nous avons deux instructions :
– FROM, qui n’apparaît qu’une seule fois dans un dockerfile, et specifie l’image à utiliser.
– RUN, suivi d’une commande shell à lancer. Si vous avez plusieurs commandes à lancer. Chacun d’elle sera précedée de cette instruction.

Sauvegardez le fichier, puis rendez-vous dans le dossier qui contient votre Dockerfile, pour ma part :

cd ~/Dockerfile/test

Et lancez la commande suivante :

docker build -t test_dockerfile .

Vous allez voir Docker lancer une par une les étapes de votre Dockerfile, ici nous n’avons que deux étapes.
Une fois la construction de votre image terminée, refaites un docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
test_dockerfile latest 4d9f3e8836ab About a minute ago 209.2 MB
test_shell latest 80d3effbbe3e 20 minutes ago 209.2 MB
ubuntu trusty a5a467fddcb8 2 days ago 187.9 MB

Nos deux images ont la même tailles car elles ont le même contenu.

Transporter son image Docker

L’avantage de docker, c’est que vous pouvez utiliser les images créées sur toutes les machines possédant le logiciel.
Reprenons notre image « test_dockerfile », nous allons créer une archive pour pouvoir la transférer :

docker save -o test_dockerfile.tar test_dockerfile:latest

L’archive sera présente dans le dossier dans lequel vous vous trouvez, vous pouvez préciser un autre chemin.

Sur la machine devant récupérer l’image, lancez la commande :

docker load --input test_dockerfile.tar

En faisant un docker images il n’y a pas de REPOSITORY ni de TAG, donc on va « nommer » notre image

docker tag <IMAGE_ID> test_dockerfile:latest

Les opérations que nous avons effectuées sont plutôt simples, mais elles permettent de comprendre le fonctionnement de base de Docker.

Premiers pas avec Docker
Taggé sur :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous utilisons des cookies afin de nous assurer de vous proposer la meilleure expérience sur ce site.
Ok