Wenn Sie neu bei Docker sind, fragen Sie sich vielleicht, wie Sie einen Docker-Container ausführen. Lassen Sie mich Ihnen das schnell zeigen.
Sie können einen Container mit dem folgenden Befehl erstellen und ausführen:
docker run -it -d --name container_name image_name bash
Und wenn Sie dann den Container betreten möchten (um Befehle innerhalb des Containers interaktiv auszuführen), können Sie den docker exec-Befehl verwenden:
docker exec -it container_ID_or_name /bin/bash
Hier ist ein Beispiel, in dem ich einen neuen Container mit Ubuntu als Basis-Image erstelle und dann den laufenden Ubuntu-Container betrete und den Befehl ls ausführe:
[email protected]:~$ docker run -it -d --name my_container ubuntu bash
7e77640bca686108ad415318278a1fa148e1c84d3b180276e19ec2b970ba9b67
[email protected]:~$ docker exec -it my_container bash
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/#
Hat verloren? Mach dir keine Sorgen. Ich werde im Detail erklären, was die beiden obigen Befehle tun und was das -it
ist Option im Docker-Befehl run and exec.
Wie man einen Docker-Container ausführt
Wenn Sie einen Docker-Container mit einem bestimmten Image und einem bestimmten Befehl ausführen möchten, können Sie dies folgendermaßen tun:
docker run -it -d --name container_name image_name bash
Der obige Befehl erstellt einen neuen Container mit dem angegebenen Namen aus dem angegebenen Docker-Image. Der Containername ist optional.
- Die Option -i bedeutet, dass es sich um einen interaktiven Modus handelt (Sie können Befehle eingeben)
- Die Option -t gibt Ihnen ein Terminal (damit Sie es verwenden können, als ob Sie ssh zum Betreten des Containers verwendet hätten).
- Die Option -d (Daemon-Modus) lässt den Container im Hintergrund laufen.
- Bash ist der Befehl, den es ausführt.
Der Grund für die Ausführung von bash als Befehl hier ist, dass der Container nicht sofort anhält.
[email protected]:~$ docker run -it -d ubuntu bash
82766613e7bc0ae98887bb1c776fa0de7f3c4771db9ac7ffc5db5c2c68ab497b
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82766613e7bc ubuntu "bash" 4 seconds ago Up 3 seconds determined_blackburn
Im obigen Beispiel habe ich den Container nicht benannt, also wurde er nach dem Zufallsprinzip „determinated_blackburn.
“ genanntUnd wie Sie sehen können, führt der Container den Bash-Befehl im Hintergrund aus.
Docker Run vs. Start vs. Create:Unterschied erklärtFür einen Docker-Anfänger könnten Begriffe wie Docker-Start, Docker-Run und Docker-Erstellung verwirrend sein. Dieser Artikel erklärt den Unterschied anhand von Beispielen. Linux-HandbuchAbhishek PrakashWas passiert, wenn Sie es nicht als Daemon ausführen (Option -d) im Hintergrund?
Wenn Sie die Option -d nicht verwenden, erstellt docker run einen neuen Container und Sie haben ein Terminal im interaktiven Modus, auf dem die Bash-Shell ausgeführt wird.
Wie Sie im Beispiel unten sehen können, wird der Container erstellt und ich befinde mich automatisch im Container (Bash-Shell).
Das Problem dabei ist, dass der Container stoppt, wenn Sie den Container verlassen.
[email protected]:~$ docker run -it ubuntu bash
[email protected]:/# echo this is a new container
this is a new container
[email protected]:/# exit
exit
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82766613e7bc ubuntu "bash" 2 minutes ago Up 2 minutes determined_blackburn
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6098c44f2407 ubuntu "bash" 27 seconds ago Exited (0) 8 seconds ago bold_benz
82766613e7bc ubuntu "bash" 2 minutes ago Up 2 minutes determined_blackburn
Was passiert, wenn du nur die Option -i (interaktiv) verwendest?
Angenommen, Sie verwenden nur die Option -i. In diesem Fall sehen Sie eine interaktive Eingabeaufforderung, aber wenn Sie die interaktive Eingabeaufforderung verlassen (mit Strg+D oder dem Exit-Befehl), verlassen Sie den Container und der Container wird angehalten.
[email protected]:~$ docker run -i ubuntu bash
echo "this is interactive"
this is interactive
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6b79a9f7789 ubuntu "bash" 27 seconds ago Exited (0) 9 seconds ago loving_galileo
Was passiert, wenn du nur die Option -t (terminal/tty) verwendest?
Das ist eine knifflige Situation, denn in diesem Fall haben Sie ein Pseudo-Terminal (wenn Sie die Option -t verwenden), aber Sie haben nicht die STDIN. Mit anderen Worten, Sie können nichts eingeben und keinen Befehl innerhalb des Containers ausführen, wie Sie es zuvor getan haben:
[email protected]:~$ docker run -t ubuntu bash
[email protected]:/# echo hello
^C^C
[email protected]:/# echo "hi"
^C^C
[email protected]:/# exit
^C^C
[email protected]:/#
Im obigen Fall musste ich den Container von einem anderen Terminal aus stoppen.
So beenden Sie einen Docker-Container Dieser schnelle kleine Docker-Tipp zeigt, wie Sie einen Docker-Container beenden. Linux-HandbuchAbhishek PrakashWie man einen bestehenden Container ausführt
Der Befehl docker run erstellt einen neuen Container aus dem angegebenen Image. Aber was passiert, wenn Sie bereits einen Container haben?
Wenn Sie einen vorhandenen Container ausführen möchten, müssen Sie zuerst den Container starten und können dann die Option exec wie folgt verwenden:
docker start existing_container_ID_or_name
docker exec -it existing_container_ID_or_name /bin/bash
Dieses Beispiel wird für Ihr Verständnis besser sein:
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6b79a9f7789 ubuntu "bash" 7 minutes ago Exited (0) 7 minutes ago loving_galileo
[email protected]:~$ docker start b6b79a9f7789
b6b79a9f7789
[email protected]:~$ docker exec -it b6b79a9f7789 bash
[email protected]:/# echo "inside existing container"
inside existing container
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/# exit
exit
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6b79a9f7789 ubuntu "bash" 8 minutes ago Up 43 seconds loving_galileo
Warum immer Bash verwenden?
In allen obigen Beispielen habe ich bash oder /bin/bash als Befehl verwendet, der mit dem Container ausgeführt wird. Ich habe es verwendet, weil es eine Shell gibt und wenn Sie den Container ausführen, können Sie dank der Shell reguläre Befehle innerhalb des Containers ausführen, als ob Sie sich in einem normalen Linux-System befinden.
Sie können den Container bitten, jeden Befehl auszuführen, aber denken Sie daran, dass der Container existiert, sobald der Befehl abgeschlossen ist.
Wie Sie im folgenden Beispiel sehen können, gibt es diesmal keine interaktive Terminalsitzung. Sie befinden sich nicht mehr im Container, da der echo-Befehl fast sofort beendet wird.
[email protected]:~$ docker exec -it b6b79a9f7789 echo hello
hello
[email protected]:~$
Sie können tatsächlich auch andere Befehle ausführen und den Container anschließend betreten.
Im folgenden Beispiel habe ich einen neuen Container erstellt, der den nginx-Server auf Port 80 ausführt. Da ich ihn als Daemon mit der Option -d ausführe, läuft der nginx-Container weiter.
Und dann verwende ich den Befehl docker exec, um eine interaktive Bash-Shell zu erhalten, und betrete so den nginx-Container (der im Grunde ein mit nginx vorkonfiguriertes Linux ist).
[email protected]:~$ docker container run -it -d -p 8000:80 nginx
262ca5b17bf8aac5afbfdf66af6383be164cd8488f8cd64c06ee466b4d7462e9
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
262ca5b17bf8 nginx "nginx -g 'daemon of…" 9 seconds ago Up 8 seconds 0.0.0.0:8000->80/tcp zen_kilby
b6b79a9f7789 ubuntu "bash" 20 minutes ago Up 12 minutes loving_galileo
[email protected]:~$ docker exec -it 262ca5b17bf8 bash
[email protected]:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[email protected]:/#
Ich hoffe, Sie haben ein besseres Verständnis dafür, wie Docker-Container ausgeführt werden und warum bestimmte Optionen verwendet werden.
Wenn Sie Fragen oder Vorschläge haben, lassen Sie es mich im Kommentarbereich wissen.