Loading search data...

Démarrer avec les conteneurs Docker

Publié le : 11 août 2019 | Mis à jour le : 27 juin 2023

logo docker

Docker est un logiciel open source qui permet d’automatiser le déploiement d’applications en les empaquetant, ainsi que ses dépendances dans des conteneurs virtuels. La force de ce concept est que ses conteneurs peuvent ensuite être déployés sur n’importe plateforme où peut être installé l’API de Docker.

Quel est l’intérêt de Docker ?

Docker permet non seulement d’exécuter des conteneurs, mais aussi de simplifier leur conception, la gestion des images…,

Le Concept

Docker s’appuie à la base sur le format de conteneur Linux standard LXC auquel il a adossé une API qui permet d’exécuter des processus de manière isolée. En effet, contrairement aux machines virtuelles classiques qui utilisent un système hôte (“guest OS”), les conteneurs Docker ne contiennent que les applications/librairies en utilisant le système d’exploitation de l’infra.

La figure ci-dessous résume bien le concept:

concept docker

Comme c’est le système hôte qui lance directement les conteneurs son exécution est aussi rapide que s’il s’exécutait directement sur celui-ci. De plus même si nous ne sommes pas sur une machine virtuelle les ressources utilisées par le conteneur sont isolés de son hôte. Un conteneur Docker, un Dockerfile, est un simple fichier texte qui définit une séquence de commandes UNIX. Ces commandes vont s’exécuter les unes après les autres permettant pour finaliser l’installation d’une application. On retrouve le principe d’héritage, car un conteneur peut en utiliser un autre pour en étendre ses fonctionnalités. Du coup les conteneurs sont très légers et peuvent être stocké sur un repository central pour être utilisé par d’autres instances docker.

Disponibilité de Docker

Docker est disponible sur les plateformes suivantes :

  • Les distributions Linux : Ubuntu, Fedora, RHEL, Centos, Gentoo, ArchLinux, openSUSE, CRUX,…
  • Les systèmes de cloud : Amazon EC2, Google Compute Engine et Rackspace.
  • Les systèmes d’exploitations Mac Os X et Windows. Sous Windows Docker s’appuie sur une mini VM Linux tournant sous VirtualBox packagé dans le produit Docker ToolBox.

Installation de Docker sur Ubuntu

Docker est disponible sur toutes les versions disponibles d’Ubuntu, et ce, depuis la version 12.04 L.T.S. Ici je ne documenterai que l’installation sur Ubuntu 18.04. Pour les autres versions, je vous renvoie sur la page du projet : docs.docker.com

sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get install docker-ce docker-ce-cli containerd.io

Pour terminer l’installation :

Pour vérifier que l’installation de Docker est terminé lançons simplement les commandes suivantes :

sudo groupadd docker
sudo usermod -aG Docker $USER

Test du premier conteneur :

docker run hello-world

Normalement cette commande va télécharger tout ce qu’il faut pour créer un conteneur.

Premières commandes

Dans un premier temps on va construire une simple image Docker en utilisant la dernière image Alpine disponible.

docker search alpine

La première image est la bonne, l’officielle.

NAME                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
alpine                                 A minimal **Docker** image based on Alpine Linux…   5692                [OK]

Pour télécharger l’image en local il suffit de faire :

docker pull alpine

Vous remarquerez qu’il récupère la dernière version disponible qu’il appelle latest. Chaque image possède un identifiant auquel peux être adjoint des tags, latest étant la dernière version stable d’alpine. Mais si dans nos fichiers de déclarations, nous indiquons latest nous ne contrôlerons plus la version utilisée pour construire notre conteneur. Pour récupérer la liste de tous les tags d’une image officielle il suffit de taper la commande suivante :

curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/alpine/tags'| jq '."results"[]["name"]'

"latest"
"edge"
"3.16.2"
"3.16"
"3.15.6"
"3.15"
"3.14.8"
"3.14"
"3.13.12"
"3.13"

Là, on voit que la dernière version disponible est la 3.10.2 donc pour la récupérer il suffit de lancer la commande suivante :

docker pull alpine:3.10.2

Pour lister les images en local :

docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
alpine                            3.10.2              961769676411        5 weeks ago         5.58MB
alpine                            `latest`              961769676411        5 weeks ago         5.58MB

Vous remarquerez que l’image ID est identique, car Docker ne duplique pas les données.

Construction d’une simple image

Pour construire une image, on utilise le format Dockerfile

vi Dockerfile

On y colle le contenu suivant :

FROM alpine:3.10.2
RUN apk update
RUN apk upgrade

Pour lancer la construction de l’image :

docker build .

ou

docker builf -f Dokerfile .
Sending build context to **Docker** daemon  2.048kB
Step 1/3 : FROM alpine:3.10.2
 ---> 961769676411
Step 2/3 : RUN apk update
 ---> Running in ff0b9c41c6e5
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
v3.10.2-80-g68e4e4a13a [http://dl-cdn.alpinelinux.org/alpine/v3.10/main]
v3.10.2-83-g64319a6606 [http://dl-cdn.alpinelinux.org/alpine/v3.10/community]
OK: 10336 distinct packages available
Removing intermediate container ff0b9c41c6e5
 ---> 497b57586909
Step 3/3 : RUN apk upgrade
 ---> Running in 874225a869dd
(1/2) Upgrading libcrypto1.1 (1.1.1c-r0 -> 1.1.1d-r0)
(2/2) Upgrading libssl1.1 (1.1.1c-r0 -> 1.1.1d-r0)
OK: 6 MiB in 14 packages
Removing intermediate container 874225a869dd
 ---> 9c5a9a6e761f
Successfully built 9c5a9a6e761f

On voit qu’il réalise les opérations demandées et que pour chaque instruction du fichier Dockerfile il indique à partir de quelle image ID il réalise la commande demandée.

  • FROM alpine : 961769676411 qui correspond à celui de l’image téléchargée précédemment.
  • RUN apk update : ff0b9c41c6e5
  • RUN apk upgrade : 874225a869dd
  • Successfully built : 9c5a9a6e761f

Info importante Docker par défaut détruit les conteneurs intermédiaires. Donc si on lance la commande Docker images, on doit obtenir ce ID dans la liste retournée :

REPOSITORY TAG IMAGE ID CREATED SIZE 9c5a9a6e761f 5 minutes ago 10.2MB

On voit que cette image n’a pas de TAG. Pour taguer une image lors de la construction il suffit d’ajouter l’option -t tag:xxx

docker build . -t test:0.1
...
docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
test                              0.1                 9c5a9a6e761f        7 minutes ago       10.2MB

Pour taguer une image existante il suffit de taper la commande suivante

docker tag 9c5a9a6e761f test:`latest`

REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
test                              0.1                 9c5a9a6e761f        9 minutes ago       10.2MB
test                              `latest`              9c5a9a6e761f        9 minutes ago       10.2MB

Comme on s’y attendait on retrouve bien le même ID pour les images 0.1 et latest.

Si vous voulez plus loin, je vous propose toute une série de billets sur le sujet :

Mots clés :

devops tutorials docker

Si vous avez apprécié cet article de blog, vous pouvez m'encourager à produire plus de contenu en m'offrant un café sur  Ko-Fi. Vous pouvez aussi passer votre prochaine commande sur amazon, sans que cela ne vous coûte plus cher, via  ce lien . Vous pouvez aussi partager le lien sur twitter ou Linkedin via les boutons ci-dessous. Je vous remercie pour votre soutien.

Commentaires: