[Docker] Commencer avec Docker : create, exec, start, run, commit
Commencer avec Docker
Découvrez progressivement le concept de Docker et commençons à l’utiliser.
Installation de Docker
Suivez ce lien pour installer Docker sur votre système d’exploitation.
Obtenir une image Docker
Pour utiliser Docker, vous pouvez essayer de nombreuses images disponibles sur Docker Hub. Jetons un coup d’œil à l’image Python.
▲ Rechercher
python
sur Docker Hub
Ouvrez le terminal et entrez docker pull python
pour obtenir la dernière image de Python.
Si votre service nécessite une version spécifique de Python, vous pouvez installer une version spécifique en cherchant l’étiquette. Exemple :
docker pull python:3.8.13
État du conteneur Docker
Pour comprendre les commandes, il est nécessaire de savoir dans quel état se trouvent les conteneurs Docker.
Les conteneurs Docker, comme les processus ordinaires, peuvent avoir plusieurs états.
Voici une description de chaque état :
1. Created
Cet état est attribué lorsqu’un conteneur a été créé mais n’a jamais été utilisé.
Il ne consomme ni le CPU ni la mémoire du système hôte.
2. Running
Cet état signifie que le conteneur est en cours d’exécution. Cet état indique que les processus à l’intérieur du conteneur s’exécutent indépendamment de l’environnement du système hôte.
3. Restarting
Cet état signifie également que le conteneur est en cours de redémarrage.
Vous pouvez définir une action de redémarrage via l’option --restart=[RESTART_POLICY]
de la commande docker run
.
RESTART_POLICY
no
: ne pas redémarrer (default
)on-failure
: redémarrer si le conteneur ne se termine pas normalement (code 0)always
: toujours redémarrer lorsque le processus se termineunless-stopped
: redémarrer le conteneur à moins qu’il ne soit explicitement arrêté ou que Docker lui-même ne soit arrêté ou redémarré.
4. Exited
Cet état est attribué lorsque le processus interne s’est terminé. Comme dans l’état Created, il ne consomme ni CPU ni mémoire.
Les raisons courantes pour lesquelles un conteneur passe à l’état Exited sont :
- Le processus interne est terminé.
- Une exception s’est produite alors que le processus interne était en cours d’exécution.
- Terminaison intentionnelle via la commande
docker stop
. - Aucune console interactive configurée pour le conteneur exécutant
bash
.
5. Paused
Indique que tous les processus sont suspendus indéfiniment. Vous pouvez suspendre un conteneur spécifique à l’aide de la commande docker pause
.
6. Dead
Cet état apparaît lorsque vous tentez de supprimer un conteneur mais qu’une ressource spécifique est utilisée par un processus externe.
Vous ne pouvez pas redémarrer un conteneur dans cet état, vous pouvez uniquement le supprimer.
Création d’un conteneur : create
Vous pouvez créer un conteneur à l’aide de la commande create
basée sur l’image reçue.
Utilisation
La commande s’utilise comme suit :
$ docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
Options fréquemment utilisées
Si vous souhaitez voir toutes les options de la commande create
de Docker, consultez cette page.
--name [CONTAINER_NAME]
Utilisé pour nommer le conteneur à exécuter.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4a0d00c26f9 docker/getting-started "/docker-entrypoint.…" 21 seconds ago Created hello
000e821c8396 docker/getting-started "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp admiring_jemison
Pour voir tous les conteneurs créés par docker, entrez docker ps -a
.
Le nom du conteneur apparaît dans la colonne la plus à droite. Le conteneur nommé hello
a un nom de conteneur.
Un conteneur nommé aura l’image de son nom lors de la construction ultérieure.
--publish, -p [HOST_PORT]:[CONTAINER_PORT]
Cette option nécessite une compréhension de base du port forwarding.
Le port forwarding dans Docker signifie rediriger les requêtes destinées au port de l’hôte vers le port du conteneur.
Si vous configurez -p 80:8000
, les requêtes sur le port 80 de l’hôte sont redirigées vers le port 8000 du conteneur.
Le port 80 est utilisé pour Internet, donc dans une telle configuration, l’Internet ne fonctionnera pas.
--tty, -t
Active le mode TTY. Comme lorsqu’une connexion SSH réussie entraîne l’exécution automatique du terminal par défaut, cette option permet d’ouvrir un terminal et de garder le conteneur en cours d’exécution.
Le terminal requiert une entrée au clavier par défaut, il est donc généralement utilisé avec l’option -i
ci-dessus.
--interactive, -i
Active l’entrée standard (STDIN
) même si le conteneur n’est pas connecté (attach
).
--volume, -v [VOLUME_NAME]:[REMOTE_PATH]
Attaché un docker volume
au chemin d’un container
.
Pour le moment, pensez simplement que cela signifie ‘connecter le stockage’.
Cela nécessite une compréhension du Docker Volume, que nous verrons plus en détail avec une comparaison ultérieure.
--workdir, -w [WORKDIR_PATH]
Spécifie le répertoire dans lequel s’exécute le processus interne du conteneur. Le répertoire de travail configuré devient le point d’entrée initial.
--env, -e [KEY=VALUE]
Spécifie des variables d’environnement pour le conteneur. Il est généralement utilisé pour transmettre des paramètres ou des mots de passe au conteneur.
Toutes les langues offrent des fonctions permettant d’accéder à la variable d’environnement de l’OS, donc en utilisant cette option, on peut cacher les configurations de manière appropriée lors de la distribution.
Combinaison d’options
Dans le cas d’options avec un seul hyphen (-
), plusieurs options peuvent être combinées.
# Example
$ docker run --name test -it debian
Démarrer un conteneur : start
Un conteneur créé n’est pas encore en cours d’exécution. Pour exécuter un conteneur, utilisez cette commande.
Utilisation
docker start [OPTION] CONTAINER_NAME_OR_ID
Passer des commandes à un conteneur en cours d’exécution : exec
Avec exec
, vous pouvez passer des commandes à un conteneur en cours d’exécution.
Il est souvent utilisé pour lancer le terminal du conteneur en cours d’exécution.
(Cela peut être utilisé à la manière de SSH.)
Ce qui est particulier, c’est que les commandes exécutées via exec
ne perturbent pas l’exécution du processus principal.
Utilisation
La commande s’utilise comme suit :
$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Options fréquemment utilisées
Si vous souhaitez voir toutes les options de la commande exec
de Docker, consultez cette page.
--detach , -d
Cette option envoie la commande au conteneur en arrière-plan.
--interactive, -i
Active l’entrée standard (STDIN
) même si le conteneur n’est pas connecté (attach
).
--tty, -t
Active le mode TTY. Comme lorsque la connexion SSH est réussie et l’exécution d’un terminal par défaut, cette option permet de garder le terminal ouvert lors de l’exécution d’un conteneur.
Le terminal requiert une entrée au clavier par défaut, il est donc généralement utilisé avec l’option -i
ci-dessus.
--workdir, -w [WORKDIR_PATH]
Spécifie le répertoire dans lequel s’exécute le processus interne du conteneur. Le répertoire de travail configuré devient le point d’entrée initial.
--env, -e [KEY=VALUE]
Spécifie des variables d’environnement pour le conteneur. Il est souvent utilisé pour transmettre des paramètres ou mots de passe au conteneur.
Toutes les langues offrent des fonctions permettant d’accéder à la variable d’environnement de l’OS, donc en utilisant cette option, on peut cacher les configurations de manière appropriée lors de la distribution.
Combinaison d’options
Dans le cas d’options avec un seul hyphen (-
), plusieurs options peuvent être combinées.
# Example
$ docker exec -it test /bin/bash
Créer et exécuter un conteneur : run
Vous pouvez exécuter une image reçue avec la commande run
.
Plus précisément, la commande
run
crée (create
) et exécute (start
) le conteneur.
Utilisation
La commande s’utilise comme suit :
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Options fréquemment utilisées
Si vous souhaitez voir toutes les options de la commande run
de Docker, consultez cette page.
Les sections précédentes (create
, start
) traitaient des commandes de création et d’exécution et décrivaient fréquemment les options utilisées.
En principe, run
est une commande qui combine create
et start
, de sorte que toutes les options de chaque commande peuvent être utilisées.
--detach, -d
Cette option exécute le conteneur comme un processus d’arrière-plan sur le système hôte et renvoie l’ID du conteneur en cours d’exécution.
Combinaison d’options
Dans le cas d’options avec un seul hyphen (-
), plusieurs options peuvent être combinées.
# Example
$ docker run --name test -it debian
Devenir une image depuis un conteneur : commit
C’est bien d’utiliser le conteneur que vous avez configuré. Maintenant, votre service peut fonctionner de manière indépendante.
Mais vous n’avez pas encore résolu le problème décrit dans le premier chapitre.
Lorsque quelqu’un vient pour prendre le relais, il peut utiliser votre conteneur, mais fondamentalement, le conteneur n’est pas exploitable sous forme de distribution.
La commande commit
transforme un conteneur en cours d’exécution en une image.
Elle devient ainsi accessible à tous.
La commande pour transformer un conteneur en image est la suivante, et le conteneur résultant est stocké dans vos images locales.
Utilisation
De base, utilisez cette commande comme suit :
$ docker commit [OPTION] CONTAINER_NAME_OR_ID IMAGE_NAME
Ensuite, regardez vos image
pour voir que l’image nouvellement créée est là, stockée localement.
$ docker commit test test
95221529517f...
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test latest 95221529517f 3 seconds ago 118MB
Question
Bien que l’image soit stockée localement, peut-on considérer qu’elle est partagée
?
Mon image n’a pas encore été transmise à d’autres.
Des commandes comme docker export
, docker save
peuvent transformer une image ou un conteneur en format tar
à transmettre, mais utilisons une méthode plus intelligente.
Par le biais d’un repository Docker.
Repository Docker
En tant que développeur, vous avez probablement déjà entendu parler du terme repository
.
Certains l’ont peut-être vu dans l’Annotation
de Spring lors de la mise en œuvre de leur site Web avec Spring, et la plupart des développeurs l’ont probablement utilisé pour gérer les versions de leur code sur Github, Gitlab, etc.
Qu’il s’agisse d’un local qui ne concerne que vous ou d’un Remote pour le partage, un repository
désigne souvent un stockage.
Docker a créé la possibilité de partager votre propre repository, à la manière de Github.
Pour ceux qui ont déjà deviné, le nom de ce repository est en fait Docker Hub.
Créer votre propre repository
Créer votre propre repository n’est pas très différent de ce que vous savez faire sur Github.
D’abord, cliquez sur Create a Repository
sur Docker Hub
Ensuite, remplissez les spécifications de votre repository.
Vous pouvez configurer l’accès à votre repository en le définissant comme public (Public
) pour tous ou privé (Private
) pour être accessible uniquement à ceux que vous autorisez.
Une fois le repository créé, vous pouvez push
à l’aide des commandes comme indiqué ci-dessus.
Si vous avez utilisé Github, ce verbe
push
vous semble familier. En effet, c’est exactement d’où vous pensez qu’il vient.
Tag
Sur l’image, vous pouvez voir un champ de saisie pour le tag
.
Il est généralement généré au moment du commit, et il est courant d’y inscrire la version.
Au début, vous avez utilisé une telle commande docker pull python:3.8
pour récupérer une image contenant une version spécifique de Python.
La chaîne de caractères (:
) derrière représente un tag.
Utilisation
Bien que l’utilisation ait été indiquée ci-dessus, cela concerne la méthode locale.
Selon la documentation officielle de Docker, l’utilisation de commit
est la suivante :
$ docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
En effet, le nom de l’image est mappé avec le nom du repository.
Suggéré par le mot commit
, il se comprend que ce ne soit pas encore distribué.
Ce qui correspond toujours à avant.
Options disponibles
--message, -m [MESSAGE]
Similaire aux messages de commit Git normaux.
Cette option permet d’insérer un message au moment de créer le commit.
--author, -a [AUTHOR]
Écrit les détails de l’auteur de l’image.
--change, -c
Si vous générez un commit en fonction d’un conteneur généré par Dockerfile
, cette option est utilisée.
Le Dockerfile sera examiné dans le prochain chapitre.
Commande similaire : build
Pour créer une image, il existe une autre commande build
en plus de la commande commit
que nous venons de voir.
Cependant, comme elle nécessite une compréhension de Dockerfile
, nous la considérerons dans le prochain chapitre.
Partager une image créée avec son Repository : push
C’est désormais la dernière étape pour push
une image sur votre repository.
Utilisation
La commande s’utilise comme suit :
$ docker push [OPTIONS] NAME[:TAG]
Où NAME[:TAG]
correspond à [REPOSITORY[:TAG]]
utilisé pour créer commit
.
$ docker push xodud9632/test-repo:ver1
The push refers to repository [docker.io/xodud9632/test-repo]
27d8bf01e7ea: Mounted from library/debian
ver1: digest: sha256:ef143c422f108a12a93c202078d2d9e8c2966e9479b74f6662af9e32bb05ad73 size: 529
Lorsque vous l’appliquez, des messages comme ci-dessus apparaissent,
et vous pouvez confirmer que le repository a bien été mis à jour.
Erreur : repository does not exist or may require 'docker login'
Si vous recevez le message d’erreur ci-dessus, cela signifie que vous n’êtes pas connecté au Docker CLI.
$ docker login
Entrez la commande ci-dessus, puis entrez votre identifiant et mot de passe pour vous connecter. Vous constaterez que cela fonctionne correctement.
Références
- Documentation officielle Docker
- Blogs