
Comment exécuter des commandes dans le conteneur Docker?


L'exécution de commandes dans un conteneur Docker est plus facile que vous ne le pensez.
Un conteneur docker est un environnement isolé qui contient généralement une seule application avec toutes les dépendances requises. Plusieurs fois, nous devons exécuter des commandes dans un conteneur docker. Il existe plusieurs façons d'exécuter une commande à l'intérieur d'un conteneur et d'obtenir la sortie requise.
Voyons comment nous pouvons le faire.
Using Interactive Shell
Nous pouvons accéder directement au shell d'un conteneur et exécuter nos commandes comme avec un terminal Linux normal. Pour obtenir un shell interactif d'un conteneur arrêté (pas en état d'exécution), vous pouvez utiliser:
$ docker run -it ubuntu bash
[email protected]:/#
Comme vous pouvez le voir, nous avons atterri directement dans un nouveau Ubuntu
conteneur où nous pouvons exécuter nos commandes. Si un conteneur est déjà en cours d'exécution, vous pouvez utiliser exec
commande comme ci-dessous.
Tout d'abord, découvrons l'ID du conteneur.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c2d969adde7a nginx "/docker-entrypoint.…" 2 hours ago Up 2 hours 127.0.0.1:80->80/tcp nginx
0960560bc24b mariadb "docker-entrypoint.s…" 2 hours ago Up 2 hours 127.0.0.1:3306->3306/tcp mariadb
Et puis entrez dans l'ID de conteneur c2d969adde7a
$ docker exec -it c2d969adde7a bash
[email protected]:/#
Dans la sortie ci-dessus, vous pouvez observer que nous avons commencé un bash
session de nginx
conteneur qui était en état de marche. Ici, nous pouvons exécuter n'importe quelle commande prise en charge et obtenir la sortie.
Notes - votre conteneur peut ne pas avoir de bash et si c'est le cas, vous pouvez utiliser sh.
Ex:
docker exec -it c2d969adde7a sh
Direct Output
Souvent, nous avons juste besoin de la sortie d'une ou deux commandes et n'avons pas besoin d'une session interactive complète pour notre tâche. Vous pouvez exécuter la commande requise dans un conteneur et obtenir sa sortie directement sans ouvrir une nouvelle session shell en utilisant exec
commande sans -it
drapeau. Sa syntaxe serait:
$ docker exec <container-id or name> <command>
Voici un exemple :
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c2d969adde7a nginx "/docker-entrypoint.…" 2 hours ago Up 2 hours 127.0.0.1:80->80/tcp nginx
0960560bc24b mariadb "docker-entrypoint.s…" 2 hours ago Up 2 hours 127.0.0.1:3306->3306/tcp mariadb
$ docker exec 0960560bc24b ps -ef | grep mysql
mysql 1 0 0 13:35 ? 00:00:02 mysqld
$
Nous avons exécuté ps -ef | grep mysql
commande à l'intérieur de la course MariaDB conteneur et obtenu la sortie directement.
Dockerfile Way
Ce n'est pas exactement la façon dont vous pouvez exécuter des commandes à l'intérieur d'un conteneur docker bien que cela puisse être utile dans des situations de développement ou pour le débogage du déploiement initial, etc. Nous pouvons utiliser RUN
commande dans un Dockerfile. Voici notre exemple de Dockerfile:
FROM nginx:latest
RUN nginx -V
Il tire simplement la dernière nginx
image du registre, puis exécute le nginx -V
commande pour afficher la version de Nginx lorsque vous créez l'image.
$ docker build -t nginx-test .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM nginx:latest
---> 7ce4f91ef623
Step 2/2 : RUN nginx -V
---> Running in 43918bbbeaa5
nginx version: nginx/1.19.9
built by gcc 8.3.0 (Debian 8.3.0-6)
built with OpenSSL 1.1.1d 10 Sep 2019
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.19.9/debian/debuild-base/nginx-1.19.9=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'
Removing intermediate container 43918bbbeaa5
---> d682277f2e50
Successfully built d682277f2e50
Successfully tagged nginx-test:latest
$
Observez la sortie de RUN
commande dans l'extrait de code ci-dessus. L'extrait de code ci-dessus ne sera affiché que sur la première version et les versions consécutives ne répéteront pas le RUN
sortie de commande. Pour contourner ce problème, vous pouvez essayer --no-cache
drapeau:
$ docker build -t nginx-test . --no-cache
La dernière méthode n'est pas la meilleure mais peut être parfois utile pour le débogage, etc.
Résumé
Exécution de la commande dans un docker récipient est simple et il existe quelques méthodes pour le faire. C'est une tâche régulière d'un administrateur Docker, il est donc utile de connaître ces commandes.
Ensuite, découvrez quelques-uns des Commandes Docker.
- Taggé dans:
- DevOps
Plus de bonnes lectures sur Sysadmin
-
-
Meilleures solutions de gestion des accès à privilèges (PAM) en 2022Lakshman Sharma le 6 août 2022
-
La surveillance de la bande passante réseau est facile avec ces 6 outilsAshlin Jenifa le 31 juillet 2022
-
9 meilleurs outils de gestion des correctifs alternatifs Microsoft WSUS pour les PMESatish Shethi le 13 juillet 2022
-
10 méthodes de connectivité réseau populaires à connaîtreAmrita Pathak le 1 juillet 2022
-
Un bref guide sur Windows Management Instrumentation (WMI)Satish Shethi le 28 juin 2022
Inscrivez-vous à la newsletter Geekflare
Chaque semaine, nous partageons des articles et des outils tendance dans notre newsletter. Plus de 10,000 XNUMX personnes aiment lire, et vous allez adorer aussi.