In DevOps Letztes Updateated:
Teilen:
Cloudways bietet verwaltetes Cloud-Hosting für Unternehmen jeder Größe zum Hosten einer Website oder komplexer Webanwendungen.

Das Ausführen von Befehlen in einem Docker-Container ist einfacher als Sie denken.

Ein Docker-Container ist ein Isolated Umgebung, die usually enthält eine einzelne Anwendung mit allen erforderlichen Abhängigkeiten. Oftmals müssen wir einige Befehle innerhalb eines ausführen Andockbehälter. Es gibt verschiedene Möglichkeiten, wie wir einen Befehl in einem Container ausführen und die erforderliche Ausgabe erhalten können.

Mal sehen, wie wir das machen können.

Verwenden der interaktiven Shell

Wir können direkt auf die Shell eines Containers zugreifen und unsere Befehle wie mit einem normalen Linux-Terminal ausführen. Um eine interaktive Shell eines angehaltenen (nicht laufenden) St. zu erhaltenate)-Container können Sie Folgendes verwenden:

$ docker run -it ubuntu bash
root@c520631f652d:/#

Wie Sie sehen können, sind wir direkt in einem neuen gelandet Ubuntu Container, in dem wir unsere Befehle ausführen können. Wenn bereits ein Container ausgeführt wird, können Sie verwenden exec Befehl wie unten.

Lassen Sie uns zuerst die Container-ID herausfinden.

$ 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

Und dann in die Container-ID c2d969adde7a gelangen

$ docker exec -it c2d969adde7a bash 
root@c2d969adde7a:/#

In der obigen Ausgabe können Sie beobachten, dass wir eine gestartet haben bash Sitzung von nginx Container, der sich in laufendem St. befandate. Hier können wir jeden unterstützten Befehl ausführen und die Ausgabe erhalten.

Hinweis - Ihr Container hat möglicherweise keine Bash und wenn ja, können Sie sh verwenden.

Ex:

docker exec -it c2d969adde7a sh

Direkte Ausgabe

Oft benötigen wir nur die Ausgabe von ein oder zwei Befehlen und keine vollständige interaktive Sitzung für unsere Aufgabe. Sie können den erforderlichen Befehl in einem Container ausführen und seine Ausgabe direkt abrufen, ohne eine neue Shell-Sitzung mit zu öffnen exec Befehl ohne -it Flagge. Seine Syntax wäre:

$ docker exec <container-id or name> <command>

Hier ist ein Beispiel:

$ 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
$

Wir haben ausgeführt ps -ef | grep mysql Befehl innerhalb des Laufens MariaDB Container und bekam die Ausgabe direkt.

Dockerfile-Weg

Dies ist nicht die genaue Art und Weise, wie Sie Befehle in a ausführen können Andockbehälter obwohl es in Entwicklungssituationen oder für das anfängliche Debuggen der Bereitstellung usw. hilfreich sein kann. Wir können verwenden RUN Befehl in einer Docker-Datei. Hier ist unser Beispiel für eine Docker-Datei:

FROM nginx:latest
RUN nginx -V

Es zieht einfach das latest nginx Bild aus der Registrierung und führt dann die nginx -V Befehl zum Anzeigen der Nginx-Version, wenn Sie das Image erstellen.

$ 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
$

Beobachten Sie die Ausgabe von RUN Befehl im obigen Snippet. Das obige Snippet wird nur beim ersten Build angezeigt und aufeinanderfolgende Builds wiederholen das nicht RUN Befehlsausgabe. Um dieses Problem zu umgehen, können Sie es versuchen --no-cache Flagge:

$ docker build -t nginx-test . --no-cache

Die letzte Methode ist nicht der beste Weg, kann aber manchmal beim Debuggen usw. hilfreich sein.

Zusammenfassung

Befehl in einem Docker ausführen Container ist einfach und es gibt einige Methoden, um dies zu tun. Es ist eine reguläre Aufgabe eines Docker-Administrators, daher ist es hilfreich, diese Befehle zu kennen.

Als nächstes lernen Sie einige der beliebtesten Docker-Befehle.

Teilen:
  • Abhishek Nair
    Autor
    Abhishek ist ein SysOps Ingenieur und liebt es, über Linux, AWS und Systemadministration zu schreiben.

Danke an unsere Sponsoren

Weitere großartige Lektüre zu DevOps

Headless WordPress, wo Inhalt auf Innovation trifft
Headless WordPress: Wo Inhalt auf Innovation trifft

Im dynamischen und sich ständig weiterentwickelnden Bereich der Webentwicklung zeichnet sich Headless WordPress als robuste und einfallsreiche Methode aus. Es hat das neu erfunden process der Erstellung einer Website durch die Entkopplung der Front-End-Präsentationsschicht der Website vom Back-End-Content-Management-System. 

Treiben Sie Ihr Geschäft an

Einige der Tools und Services, die Ihrem Unternehmen helfen grow.