GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

3 commandes Docker plutôt inconnues qui vous aideront dans une variété de scénarios

Si vous utilisez Docker depuis un certain temps, vous disposez probablement déjà d'un flux de travail simple et efficace adapté à vos besoins, qui inclut certaines de vos commandes Docker préférées (les sous-commandes doivent être techniquement correctes).

Par exemple, j'avais l'habitude de supprimer les conteneurs qui ne s'exécutent pas à l'aide d'une longue commande qui ressemble à ceci docker container rm $(docker container ps -qf status=exited) , cela a fonctionné, en lançant évidemment une erreur chaque fois qu'il n'y avait pas de conteneurs suspendus. Cela s'est arrêté un jour où j'ai découvert que nous avions aussi un prune sous-commande pour les conteneurs ! Alors maintenant, cette longue commande se résume à un simple docker container prune .

Le fait est que même si beaucoup d'entre nous utilisent Docker depuis un certain temps, il est possible que certaines choses aient été négligées, voire oubliées au fil du temps.

Dans cet article, je vais vous donner trois sous-commandes docker, qui pourraient être nouvelles pour vous, ou vous ne les utilisez pas beaucoup mais je pense que vous devriez.

Ces sous-commandes peuvent également inclure leurs propres sous-commandes.

1. La sous-commande système

Docker a un system commande qui vous donne certains informations au niveau du système liées à docker. Vous utilisez en fait l'une de ses sous-commandes depuis un moment maintenant. Mémoriser les docker info ? Cette commande est en fait docker system info .

Pour en savoir plus sur cette sous-commande et ce qu'elle propose, exécutez la commande --help option dessus.

➟ docker system --help

Usage:  docker system COMMAND

Manage Docker

Commands:
  df          Show docker disk usage
  events      Get real time events from the server
  info        Display system-wide information
  prune       Remove unused data

Run 'docker system COMMAND --help' for more information on a command.

Passons en revue chacune de ces sous-commandes car je pense qu'elles sont toutes très importantes.

Df du système Docker

Avez-vous déjà été dans une situation où l'espace disque de votre serveur semblait presque plein ? Pour inspecter s'il s'agit des conteneurs (en cours d'exécution/volumes), vous avez probablement utilisé le du commande directement sur la racine des données.

Data root ou data-root est l'emplacement où docker stocke toutes les données relatives à son état. Cela inclut, mais sans s'y limiter, les images (calques), les volumes, les informations liées au réseau, les plugins.

Utiliser du sur la racine des données nécessite sudo accès.

✗ du -h --max-depth=1 /var/lib/docker
du: cannot read directory '/var/lib/docker': Permission denied
4.0K    /var/lib/docker

De plus, pour savoir explicitement combien de volumes ou d'images sont alloués, vous devez exécuter la commande plusieurs fois.

➟ sudo du -h --max-depth=0 /var/lib/docker/volumes && \
    sudo du -h --max-depth=0 /var/lib/docker/image && \
    sudo du -h --max-depth=0 /var/lib/docker/

Une bien meilleure alternative est d'appeler le docker system df commande. Cela détectera automatiquement la racine des données et imprimera en conséquence toutes les informations concernant l'utilisation du disque par les conteneurs Docker, les images et les volumes.

Voici ce que montre mon système actuel (c'est une nouvelle installation)

➟ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          10        1         84.17MB   84.17MB (100%)
Containers      1         1         8.219MB   0B (0%)
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

Lavage du système Docker

Si vous avez déjà voulu supprimer (1) tous les réseaux inutilisés, (2) les images pendantes, (3) les conteneurs arrêtés, (4) tous les volumes inutilisés, il y a de fortes chances que vous utilisiez ou que vous ayez l'habitude d'utiliser quatre commandes distinctes pour atteindre le travail.

docker network prune && \
    docker image prune && \
    docker volume prune && \
    docker container prune

Si vous ne connaissiez pas auparavant le container prune comme moi, la commande devient encore plus grande. Heureusement pour nous, tout cela peut être fait en utilisant une simple commande, à savoir docker system prune --volumes .

Par défaut, docker system prune ne supprime pas les volumes, pour cela vous devez utiliser le --volumes option. Cette commande efface également le cache de construction pour vous.

Vous pouvez utiliser le -f option pour éviter l'invite (parfois) ennuyeuse. Voir l'exemple ci-dessous :

➟ docker system prune --volumes -f
Deleted Containers:
672d39c1a78969887f411ce9139e74e5b21c31fccf2bcf8c1190a9e166089ede

Deleted Networks:
Example
SSHnet
Dummy

Deleted Volumes:
dummy

Total reclaimed space: 0B

Les autres options incluent -a qui supprime toutes les images inutilisées, pas seulement celles qui pendent.

Événements système Docker

Cette commande n'est peut-être pas toujours utile, mais je pense que tout le monde devrait en être conscient.

docker system events ou docker events pour faire court vous donne des événements en temps réel directement pour le démon docker (dockerd ). Cela peut aider à surveiller certains événements comme lorsqu'une image a été supprimée, par exemple.

Voir la capture d'écran ci-dessous pour mieux comprendre.

2. La sous-commande de contexte

C'est une autre belle sous-commande que peu de gens connaissent pour autant que je sache. Un contexte pour toute exécution de commande docker est un couple de paires clé-valeur, qui inclut, mais sans s'y limiter, le point de terminaison, l'hôte, peut-être un fichier de configuration, etc.

Une fois que vous avez créé un contexte, il peut être réutilisé ultérieurement.

L'un des plus grands cas d'utilisation pratique, en particulier pour moi, a été de créer des contextes distincts pour les serveurs individuels sur lesquels Docker est en cours d'exécution. Étant donné que la plupart de mon travail tourne autour de cela, au lieu de me connecter au serveur à chaque fois, j'utilise mon client local avec le serveur remove docker sur SSH.

Comment configurer l'accès à distance au démon Docker [Guide détaillé] Vous ne voulez pas vous connecter en ssh au serveur distant, puis exécuter les commandes docker ? Vous pouvez configurer un accès docker à distance qui présente également d'autres avantages. Manuel LinuxDebdut Chakraborty

Laissez-moi vous montrer comment j'y parviens avec les contextes Docker.

J'ai d'abord un serveur déployé sur Linode, qui a docker en cours d'exécution. Si je devais accéder au démon docker distant, sans contexte, j'utiliserais une commande comme celle-ci

➟ docker --host ssh://[email protected]:7770 ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

Donc, pour accéder au démon distant, je devrais soit alias docker à docker --host ssh://[email protected]:7770 , ou utilisez une variable d'environnement DOCKER_HOST . Mais ceux-ci rendent le passage à d'autres hôtes très difficile. Une alternative plus simple consiste à simplement créer un contexte.

La commande suivante crée un contexte nommé remote , pour un point de terminaison Docker avec un hôte différent de l'hôte local.

docker context create remote --description "Remote docker server" --docker "host=ssh://[email protected]:7770"

La sortie ressemble à ceci :

➟ docker context create remote --description "Remote docker server" --docker "host=ssh://[email protected]:7770"
remote
Successfully created context "remote"

Maintenant, vous pouvez soit utiliser le -c option avec docker si vous voulez vérifier quelque chose rapidement ou pour des opérations répétées, changez le contexte pour ce nouveau.

Avec le -c choix :

➟ docker -c remote ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

Avec le contexte docker context use [CONTEXT_NAME] :

➟ docker context use remote
remote
Current context is now "remote"
~ 
➟ docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

Pour sortir du contexte, utilisez le use sous-commande avec default pour le nom du contexte :

➟ docker context use default
default
Current context is now "default"
~ 
➟ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

3. La sous-commande pause &unpause

Les grands déploiements (applications) sont désormais divisés en plusieurs composants, mieux connus sous le nom de micro-services. Lorsque vous les déployez à l'aide de quelque chose comme docker-compose, il arrive parfois qu'un composant démarre avant celui dont il dépend. C'est un problème car puisque sa dépendance (ou ses dépendances) n'a pas encore démarré, ce composant ne démarrera pas.

Vous pouvez atténuer ce problème en utilisant des politiques de redémarrage dans Docker, mais elles n'empêchent pas d'inonder le journal de tentatives infructueuses. Ce que je faisais au début, c'était simplement arrêter le conteneur/service jusqu'à ce que la dépendance ait complètement démarré.

Une meilleure façon consiste simplement à suspendre le conteneur pendant un certain temps, et une fois que le ou les services nécessaires ont été activés, vous pouvez réactiver le conteneur et tout avancera à partir de là.

Bien que les conteneurs soient rapides à lancer, il s'agit d'un moyen encore plus rapide de contrer un tel problème.

La syntaxe de pause et unpause est assez simple.

docker pause [CONTAINER_NAME|ID]
docker unpause [CONTAINER_NAME|ID]

Cela conclut cet article pour le moment. Si je trouve d'autres commandes de ce type, utiles ou intéressantes, je mettrai à jour cet article en conséquence.

Avez-vous une commande Docker qui, selon vous, aurait dû figurer sur cette liste ? Faites-le moi savoir dans les commentaires ci-dessous.


Docker
  1. 3 commandes Linux pour arrêter le système et vous pourrez le faire facilement

  2. Quelques commandes DOCKER

  3. 20 exemples de commandes OpenSSL que vous devez connaître

  4. Aide-mémoire de référence rapide des commandes Docker

  5. Devriez-vous exécuter une base de données dans Docker ?

Commandes Docker pour la gestion du cycle de vie des conteneurs (Guide définitif)

3 commandes Docker plutôt inconnues qui vous aideront dans une variété de scénarios

100 commandes Vim utiles dont vous aurez besoin chaque jour

Meilleurs systèmes de commentaires pour les sites Web que vous pouvez auto-héberger

20 principales commandes Linux dont vous aurez besoin quotidiennement

5 meilleurs jeux de guerre pour Linux qui vous rendront accro