Docker · 11 min read · Feb 05, 2026

Gérer les conteneurs Linux avec Docker sur Ubuntu - Page 2

4.2 Construction d’images avec un Dockerfile

Le Dockerfile utilise un DSL de base avec des instructions pour construire des images Docker. Nous utilisons ensuite la commande docker build pour construire une nouvelle image à partir des instructions dans le Dockerfile. L’équipe de Docker, Inc., a également publié un tutoriel Dockerfile pour vous aider à apprendre à construire des Dockerfiles ici.

Maintenant, je vais créer un fichier docker simple qui peut être amélioré selon les besoins de l’utilisateur. D’abord, créez un répertoire, supposons dir=kishore :

mkdir kishore  
cd kishore

Maintenant, créez un Dockerfile comme suit :

vi Dockerfile  

& entrez le contenu comme suit :

| FROM ubuntu:12.04 MAINTAINER Srijan Kishore <[email protected]> RUN apt-get -qq update RUN apt-get -qqy install apache2 |

Maintenant, pour ouvrir le conteneur personnalisé, utilisez :

sudo docker build -t="srijan/custom1" .

Cela donnera le résultat suivant :

srijan@vboxtest:~/kishore$ sudo docker build -t="srijan/custom1" .
[sudo] password for srijan: 
Sending build context to Docker daemon  2.56 kB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu:12.04
Pulling repository ubuntu
ea7d6801c538: Download complete 
511136ea3c5a: Download complete 
65b7e9ccb809: Download complete 
f8dd6bd14f58: Download complete 
a343823119db: Download complete 
 ---> ea7d6801c538
Step 1 : MAINTAINER Srijan Kishore <[email protected]>
 ---> Running in a6135f405eb4
 ---> be97c22efa82
Removing intermediate container a6135f405eb4
Step 2 : RUN apt-get -qq update
 ---> Running in b5681cd85ba8
 ---> cbc3a95de894
Removing intermediate container b5681cd85ba8
Step 3 : RUN apt-get -qqy install apache2
 ---> Running in 5765c09b530f
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package libsqlite3-0.
(Reading database ... 7551 files and directories currently installed.)
Unpacking libsqlite3-0 (from .../libsqlite3-0_3.7.9-2ubuntu1.1_amd64.deb) ...
Selecting previously unselected package libroken18-heimdal.
Unpacking libroken18-heimdal (from .../libroken18-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libasn1-8-heimdal.
Unpacking libasn1-8-heimdal (from .../libasn1-8-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libgpg-error0.
Unpacking libgpg-error0 (from .../libgpg-error0_1.10-2ubuntu1_amd64.deb) ...
Selecting previously unselected package libgcrypt11.
Unpacking libgcrypt11 (from .../libgcrypt11_1.5.0-3ubuntu0.2_amd64.deb) ...
Selecting previously unselected package libgdbm3.
Unpacking libgdbm3 (from .../libgdbm3_1.8.3-10_amd64.deb) ...
Selecting previously unselected package libp11-kit0.
Unpacking libp11-kit0 (from .../libp11-kit0_0.12-2ubuntu1_amd64.deb) ...
Selecting previously unselected package libtasn1-3.
Unpacking libtasn1-3 (from .../libtasn1-3_2.10-1ubuntu1.1_amd64.deb) ...
Selecting previously unselected package libgnutls26.
Unpacking libgnutls26 (from .../libgnutls26_2.12.14-5ubuntu3.8_amd64.deb) ...
Selecting previously unselected package libhcrypto4-heimdal.
Unpacking libhcrypto4-heimdal (from .../libhcrypto4-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libheimbase1-heimdal.
Unpacking libheimbase1-heimdal (from .../libheimbase1-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libwind0-heimdal.
Unpacking libwind0-heimdal (from .../libwind0-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libhx509-5-heimdal.
Unpacking libhx509-5-heimdal (from .../libhx509-5-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libkrb5-26-heimdal.
Unpacking libkrb5-26-heimdal (from .../libkrb5-26-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libheimntlm0-heimdal.
Unpacking libheimntlm0-heimdal (from .../libheimntlm0-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libgssapi3-heimdal.
Unpacking libgssapi3-heimdal (from .../libgssapi3-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libsasl2-2.
Unpacking libsasl2-2 (from .../libsasl2-2_2.1.25.dfsg1-3ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libldap-2.4-2.
Unpacking libldap-2.4-2 (from .../libldap-2.4-2_2.4.28-1.1ubuntu4.4_amd64.deb) ...
Selecting previously unselected package libcap2.
Unpacking libcap2 (from .../libcap2_1%3a2.22-1ubuntu3_amd64.deb) ...
Selecting previously unselected package libexpat1.
Unpacking libexpat1 (from .../libexpat1_2.0.1-7.2ubuntu1.1_amd64.deb) ...
Selecting previously unselected package libmagic1.
Unpacking libmagic1 (from .../libmagic1_5.09-2ubuntu0.3_amd64.deb) ...
Selecting previously unselected package file.
Unpacking file (from .../file_5.09-2ubuntu0.3_amd64.deb) ...
Selecting previously unselected package mime-support.
Unpacking mime-support (from .../mime-support_3.51-1ubuntu1_all.deb) ...
Selecting previously unselected package netbase.
Unpacking netbase (from .../netbase_4.47ubuntu1_all.deb) ...
Selecting previously unselected package libsasl2-modules.
Unpacking libsasl2-modules (from .../libsasl2-modules_2.1.25.dfsg1-3ubuntu0.1_amd64.deb) ...
Selecting previously unselected package openssl.
Unpacking openssl (from .../openssl_1.0.1-4ubuntu5.16_amd64.deb) ...
Selecting previously unselected package libapr1.
Unpacking libapr1 (from .../libapr1_1.4.6-1_amd64.deb) ...
Selecting previously unselected package libaprutil1.
Unpacking libaprutil1 (from .../libaprutil1_1.3.12+dfsg-3_amd64.deb) ...
Selecting previously unselected package libaprutil1-dbd-sqlite3.
Unpacking libaprutil1-dbd-sqlite3 (from .../libaprutil1-dbd-sqlite3_1.3.12+dfsg-3_amd64.deb) ...
Selecting previously unselected package libaprutil1-ldap.
Unpacking libaprutil1-ldap (from .../libaprutil1-ldap_1.3.12+dfsg-3_amd64.deb) ...
Selecting previously unselected package apache2.2-bin.
Unpacking apache2.2-bin (from .../apache2.2-bin_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package apache2-utils.
Unpacking apache2-utils (from .../apache2-utils_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package libswitch-perl.
Unpacking libswitch-perl (from .../libswitch-perl_2.16-2_all.deb) ...
Selecting previously unselected package libclass-isa-perl.
Unpacking libclass-isa-perl (from .../libclass-isa-perl_0.36-3_all.deb) ...
Selecting previously unselected package perl-modules.
Unpacking perl-modules (from .../perl-modules_5.14.2-6ubuntu2.4_all.deb) ...
Selecting previously unselected package perl.
Unpacking perl (from .../perl_5.14.2-6ubuntu2.4_amd64.deb) ...
Selecting previously unselected package apache2.2-common.
Unpacking apache2.2-common (from .../apache2.2-common_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package apache2-mpm-worker.
Unpacking apache2-mpm-worker (from .../apache2-mpm-worker_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package apache2.
Unpacking apache2 (from .../apache2_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package ssl-cert.
Unpacking ssl-cert (from .../ssl-cert_1.0.28ubuntu0.1_all.deb) ...
Setting up libsqlite3-0 (3.7.9-2ubuntu1.1) ...
Setting up libroken18-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libasn1-8-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libgpg-error0 (1.10-2ubuntu1) ...
Setting up libgcrypt11 (1.5.0-3ubuntu0.2) ...
Setting up libgdbm3 (1.8.3-10) ...
Setting up libp11-kit0 (0.12-2ubuntu1) ...
Setting up libtasn1-3 (2.10-1ubuntu1.1) ...
Setting up libgnutls26 (2.12.14-5ubuntu3.8) ...
Setting up libhcrypto4-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libheimbase1-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libwind0-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libhx509-5-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libkrb5-26-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libheimntlm0-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libgssapi3-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libsasl2-2 (2.1.25.dfsg1-3ubuntu0.1) ...
Setting up libldap-2.4-2 (2.4.28-1.1ubuntu4.4) ...
Setting up libcap2 (1:2.22-1ubuntu3) ...
Setting up libexpat1 (2.0.1-7.2ubuntu1.1) ...
Setting up libmagic1 (5.09-2ubuntu0.3) ...
Setting up file (5.09-2ubuntu0.3) ...
Setting up mime-support (3.51-1ubuntu1) ...
update-alternatives: using /usr/bin/see to provide /usr/bin/view (view) in auto mode.
Setting up netbase (4.47ubuntu1) ...
Setting up libsasl2-modules (2.1.25.dfsg1-3ubuntu0.1) ...
Setting up openssl (1.0.1-4ubuntu5.16) ...
Setting up libapr1 (1.4.6-1) ...
Setting up libaprutil1 (1.3.12+dfsg-3) ...
Setting up libaprutil1-dbd-sqlite3 (1.3.12+dfsg-3) ...
Setting up libaprutil1-ldap (1.3.12+dfsg-3) ...
Setting up apache2.2-bin (2.2.22-1ubuntu1.6) ...
Setting up apache2-utils (2.2.22-1ubuntu1.6) ...
Setting up libclass-isa-perl (0.36-3) ...
Setting up ssl-cert (1.0.28ubuntu0.1) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype
Setting up libswitch-perl (2.16-2) ...
Setting up perl-modules (5.14.2-6ubuntu2.4) ...
Setting up perl (5.14.2-6ubuntu2.4) ...
update-alternatives: using /usr/bin/prename to provide /usr/bin/rename (rename) in auto mode.
Setting up apache2.2-common (2.2.22-1ubuntu1.6) ...
Enabling site default.
Enabling module alias.
Enabling module autoindex.
Enabling module dir.
Enabling module env.
Enabling module mime.
Enabling module negotiation.
Enabling module setenvif.
Enabling module status.
Enabling module auth_basic.
Enabling module deflate.
Enabling module authz_default.
Enabling module authz_user.
Enabling module authz_groupfile.
Enabling module authn_file.
Enabling module authz_host.
Enabling module reqtimeout.
Setting up apache2-mpm-worker (2.2.22-1ubuntu1.6) ...
invoke-rc.d: policy-rc.d denied execution of start.
Setting up apache2 (2.2.22-1ubuntu1.6) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
 ---> 634855a43331
Removing intermediate container 5765c09b530f
Successfully built 634855a43331
srijan@vboxtest:~/kishore$

Maintenant, examinons notre nouvelle image. Nous pouvons le faire en utilisant la commande docker images.

docker images srijan/custom1
srijan@vboxtest:~/kishore$ docker images srijan/custom1
REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
srijan/custom1      latest              634855a43331        About a minute ago   277.4 MB
srijan@vboxtest:~/kishore$

Ici, vous trouverez que les images auront par défaut apache2 installé. Vérifions-le comme suit :

docker run -t -i srijan/apache2:webserver /bin/bash

Maintenant, vous serez dans le nouveau conteneur avec apache2 pré-installé avec 12.04ubuntu.

5 Changement de nom d’hôte

Supposons que vous souhaitiez changer le nom d’hôte ou que vous souhaitiez un nom d’hôte personnalisé, par exemple dans mon cas server1.example.com.

J’utiliserai

docker run -h 'server1.example.com' -t -i srijan/custom1 /bin/bash

Cela donnera le conteneur d’image comme

srijan@vboxtest:~/kishore$ docker run -h 'server1.example.com' -t -i srijan/custom1 /bin/bash
root@server1:/# hostname -f
server1.example.com
root@server1:/#

6 Commandes utiles pour docker

  • pull (pull est utilisé pour tirer une image ou un dépôt du registre)
    ex.
docker run -i -t ubuntu /bin/bash
  • commit (commit est utilisé pour sauvegarder le conteneur)
    ex.
docker commit 73527b8b4261 srijan/apache2 8ce0ea7a1528
  • cp (Copier des fichiers/dossiers du système de fichiers d’un conteneur vers le chemin hôte. Les chemins sont relatifs à la racine du système de fichiers.)
    ex.
docker cp CONTAINER:PATH HOSTPATH

où CONTAINER est le conteneur & copier des fichiers/dossiers du PATH vers le HOSTPATH

  • start et stop un conteneur :
docker start 4386fb97867d
docker stop 4386fb97867d

où 4386fb97867d est votre numéro de conteneur

  • export (Exporter le contenu d’un système de fichiers sous forme d’archive tar vers STDOUT)
docker export 4386fb97867d > latest.tar
  • import (Créer une image de système de fichiers vide et importer le contenu du tarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz) à l’intérieur, puis éventuellement le taguer.)
docker import http://example.com/exampleimage.tgz

Importer à partir d’un fichier local :
Importer dans docker via pipe et stdin.

cat exampleimage.tgz | sudo docker import - exampleimagelocal:new

Importer à partir d’un répertoire local :

sudo tar -c . | sudo docker import - exampleimagedir

  • history (Afficher l’historique d’une image)
docker history [OPTIONS] IMAGE
sudo docker history  ea7d6801c538
  • images (Cela affichera les images)
docker images [OPTIONS] [NAME]

Cela suit certaines options comme

-a, –all=false Afficher toutes les images (par défaut, filtrer les couches d’images intermédiaires)
-f, –filter=[]: Fournir des valeurs de filtre (c’est-à-dire ‘dangling=true’)
–no-trunc=false Ne pas tronquer la sortie
-q, –quiet=false Afficher uniquement les ID numériques

  • info (Afficher des informations système globales)
srijan@VE130214:~$ sudo docker info
srijan@vboxtest:~$ sudo docker info
Containers: 20
Images: 65
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 105
Execution Driver: native-0.2
Kernel Version: 3.13.0-30-generic
WARNING: No swap limit support
  • inspect (Retourner des informations de bas niveau sur un conteneur/image)
docker inspect CONTAINER|IMAGE [CONTAINER|IMAGE...]
  • kill (Tuer un conteneur en cours d’exécution/envoyer SIGKILL, ou signal spécifié)
docker kill [OPTIONS] CONTAINER [CONTAINER...]
  • login (S’inscrire ou se connecter à un serveur de registre docker, si aucun serveur n’est spécifié “ https://index.docker.io/v1/ “ est le défaut.)
docker login localhost:8080  

Cela se connectera à un registre auto-hébergé.

  • logs (Récupérer les journaux d’un conteneur)
docker logs CONTAINER
  • ps (Lister les conteneurs)
docker ps [OPTIONS]

Il a des options comme :

-a, –all=false Afficher tous les conteneurs. Seuls les conteneurs en cours d’exécution sont affichés par défaut.
–before=”” Afficher uniquement le conteneur créé avant l’ID ou le nom, y compris ceux qui ne sont pas en cours d’exécution.
-l, –latest=false Afficher uniquement le dernier conteneur créé, y compris ceux qui ne sont pas en cours d’exécution.
-n=-1 Afficher les n derniers conteneurs créés, y compris ceux qui ne sont pas en cours d’exécution.
–no-trunc=false Ne pas tronquer la sortie
-q, –quiet=false Afficher uniquement les ID numériques
-s, –size=false Afficher les tailles
–since=”” Afficher uniquement les conteneurs créés depuis l’ID ou le nom, y compris ceux qui ne sont pas en cours d’exécution.

  • push (Pousser une image ou un dépôt vers le registre)
docker push NAME[:TAG]
  • restart (Cela redémarrera un conteneur en cours d’exécution)
docker restart [OPTIONS] CONTAINER [CONTAINER...]
  • rm (Cela supprimera un ou plusieurs conteneurs)
docker rm [OPTIONS] CONTAINER [CONTAINER...]
  • rmi (Cela supprimera une ou plusieurs images)
docker rmi IMAGE [IMAGE...]
  • run (Exécuter une commande dans un nouveau conteneur)
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Il a les options suivantes :

-a, –attach=[] Attacher à stdin, stdout ou stderr.
-c, –cpu-shares=0 Parts de CPU (poids relatif)
–cidfile=”” Écrire l’ID du conteneur dans le fichier
-d, –detach=false Mode détaché : Exécuter le conteneur en arrière-plan, imprimer le nouvel ID de conteneur
–dns=[] Définir des serveurs dns personnalisés
–dns-search=[] Définir des domaines de recherche dns personnalisés
-e, –env=[] Définir des variables d’environnement
–entrypoint=”” Écraser le point d’entrée par défaut de l’image
–env-file=[] Lire un fichier délimité par des lignes de variables ENV
–expose=[] Exposer un port du conteneur sans le publier sur votre hôte
-h, –hostname=”” Nom d’hôte du conteneur
-i, –interactive=false Garder stdin ouvert même s’il n’est pas attaché
–link=[] Ajouter un lien à un autre conteneur (nom:alias)
–lxc-conf=[] (exécuteur lxc uniquement) Ajouter des options lxc personnalisées –lxc-conf=”lxc.cgroup.cpuset.cpus = 0,1”
-m, –memory=”” Limite de mémoire (format : , où l’unité = b, k, m ou g)
–name=”” Attribuer un nom au conteneur
–net=”bridge” Définir le mode réseau pour le conteneur
‘bridge’: crée une nouvelle pile réseau pour le conteneur sur le pont docker
‘none’: pas de mise en réseau pour ce conteneur
‘container:’: réutilise une autre pile réseau de conteneur
‘host’: utilise la pile réseau de l’hôte à l’intérieur du conteneur
-p, –publish=[] Publier le port d’un conteneur sur l’hôte
format : ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort
(utilisez ‘docker port’ pour voir le mappage réel)
-P, –publish-all=false Publier tous les ports exposés sur les interfaces hôtes
–privileged=false Donner des privilèges étendus à ce conteneur
–rm=false Supprimer automatiquement le conteneur lorsqu’il sort (incompatible avec -d)
–sig-proxy=true Proxifier tous les signaux reçus au processus (même en mode non-tty)
-t, –tty=false Allouer un pseudo-tty
-u, –user=”” Nom d’utilisateur ou UID
-v, –volume=[] Monter un volume (par exemple, depuis l’hôte : -v /host:/container, depuis docker : -v /container)
–volumes-from=[] Monter des volumes depuis le(s) conteneur(s) spécifié(s)
-w, –workdir=”” Répertoire de travail à l’intérieur du conteneur

  • save (Sauvegarder une image dans une archive tar (diffusée vers stdout par défaut)
docker save IMAGE
  • search (Rechercher dans l’index docker des images)
docker search TERM
  • tag (Taguer une image dans un dépôt)
docker tag [OPTIONS] IMAGE [REGISTRYHOST/][USERNAME/]NAME[:TAG]
  • top (Rechercher les processus en cours d’exécution d’un conteneur)
docker top CONTAINER [ps OPTIONS]
  • version (Afficher les informations de version de docker.)
sudo docker version
srijan@vboxtest:~$ sudo docker version
[sudo] password for srijan: 
Client version: 1.0.1
Client API version: 1.12
Go version (client): go1.2.1
Git commit (client): 990021a
Server version: 1.0.1
Server API version: 1.12
Go version (server): go1.2.1
Git commit (server): 990021a

6 Résumé

J’ai essayé de vous familiariser davantage avec docker, j’espère que ce guide vous aidera à comprendre docker et à l’utiliser dans vos environnements de test/production.

Pour plus d’infos, référez-vous à http://www.docker.com/

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.