Einführung
Docker spielt eine sehr wichtige Rolle sowohl als Verpackungsformat für die Anwendungen als auch als vereinheitlichende Schnittstelle und Methodik, die es dem Anwendungsteam/den Anwendungsteams ermöglicht, die Container-Images im Docker-Format zu besitzen (Hinweis:Es wird davon ausgegangen, dass alle Abhängigkeiten eingeschlossen sind). Dies hat Docker zu einem der führenden Anbieter von Microservices gemacht und Microservices-basierte Anpassung und Nutzung.
Viele der Docker- und Docker-basierten Dienstprogramme helfen uns, die Effizienz der Skalierbarkeit und Leistung zu steigern, indem sie den Anwendungsbedarf durch Dockerized verkleinern Behälter. In vielen Fällen werden Abhängigkeiten auf Systemebene auf das Nötigste reduziert, was dazu beiträgt, die Speichernutzung in MB (Megabytes) zu reduzieren.
All diese Aspekte haben dazu beigetragen, Docker zu einem der führenden containerbasierten Dienstprogramme zu machen. Docker verfügt über viele Befehlszeilenprogramme und -funktionen. Docker Daemon kann viele dieser zusätzlichen Funktionen bereitstellen, was die Docker-Konfiguration vereinfacht.
Lesen Sie auch:So installieren Sie Docker (Community Edition) unter Ubuntu 16.04/18.04 LTS
Ich hoffe, der Leser/Benutzer dieses Artikels weiß, wie man Docker-Container in einer bestimmten Linux-Umgebung ausgliedert. Davon ausgehend werden einige der folgenden Einrichtungen beschrieben,
Einige dieser Einrichtungen können für die folgenden Funktionen verwendet werden,
- Überprüfen Sie die Docker-Serverinformationen
- Docker-Images und -Updates herunterladen
- Container inspizieren
- Protokolle anzeigen und überwachen
- Verschiedene Statistiken und Details überwachen
1) So überprüfen Sie die aktuelle Docker-Version
Die Kenntnis der Docker-Version ist einer der sehr wichtigen Aspekte, da abhängig davon viele der versionsbasierten Entscheidungen getroffen werden.
[email protected]:~$ sudo docker version Client: Version: 18.09.5 API version: 1.39 Go version: go1.10.8 Git commit: e8ff056 Built: Thu Apr 11 04:43:57 2019 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.5 API version: 1.39 (minimum version 1.12) Go version: go1.10.8 Git commit: e8ff056 Built: Thu Apr 11 04:10:53 2019 OS/Arch: linux/amd64 Experimental: false [email protected]:~$
Diese obige Ausgabe stellt sowohl die Server- als auch die Client-API-Versionen als identisch bereit, und die Betriebssystem- und Architekturversion sollten ebenfalls identisch sein. Bei Abweichungen zwischen client- und serverbasierten Versionen schlägt die Client-Server-Kommunikation fehl. Man muss sich vergewissern, was die unterstützenden Versionen sind und entsprechende Entscheidungen treffen.
2) Erfassen und Analysieren von Serverinformationen
Mit docker info können wir auch die folgenden Informationen finden. Einige der nützlichen Informationen, die wir sammeln können, sind etwa, welcher Server als Backend läuft, welche Kernel-Version es ist, welches Betriebssystem und Docker-Root-Verzeichnis usw.
[email protected]:~$ sudo docker info Containers: 2 Running: 1 Paused: 0 Stopped: 1 Images: 4 Server Version: 18.09.5 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: bb71b10fd8f58240ca47fbb579b9d1028eea7c84 runc version: 2b18fe1d885ee5083ef9f0838fee39b62d653e30 init version: fec3683 Security Options: apparmor seccomp Profile: default Kernel Version: 4.15.0-20-generic Operating System: Ubuntu 18.04 LTS OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 1.947GiB Name: linuxtechi ID: VRUY:AWXX:7JWE:YWU7:X4QW:TNKE:6H26:PNRR:QFGI:XYRQ:QUXF:MTXC Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false Product License: Community Engine WARNING: No swap limit support [email protected]:~$
Alle oben genannten Informationen basieren auf der Einrichtung des Docker-Daemons, der zugrunde liegenden Betriebssystemversion und dem Dateisystemtyp. All dies kann mit dem folgenden Befehlssatz erfasst werden,
Führen Sie den folgenden Befehl aus, um den Betriebssystemnamen, seine Version und den Codenamen zu erhalten
[email protected]:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS" [email protected]:~$
oder
[email protected]:~$ cat /etc/*-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS" NAME="Ubuntu" VERSION="18.04 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04 LTS" VERSION_ID="18.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=bionic UBUNTU_CODENAME=bionic [email protected]:~$
Führen Sie den folgenden Befehl aus, um die Dateisystemdetails abzurufen:
[email protected]:~$ mount | grep "^/dev" /dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered) [email protected]:~$
3) Docker-Daemon
Der Docker-Daemon spielt eine sehr entscheidende Rolle in der gesamten Docker-Umgebung.
Ohne einen geeigneten Daemon ist das gesamte Docker-System nutzlos. Man kann den Daemon-Status mit dem folgenden Befehl überprüfen,
Hinweis :- Vorausgesetzt, die ordnungsgemäße Docker-Installation wurde durchgeführt
[email protected]:~$ sudo service docker status
Wenn der Docker-Dienst ausgeführt wird, sollte die Ausgabe des obigen Befehls in etwa so aussehen:
Falls der Docker-Dienst nicht läuft, verwenden Sie den folgenden Befehl, um ihn zu starten
[email protected]:~$ sudo systemctl start docker or [email protected]:~$ sudo service docker start [email protected]:~$
Verwenden Sie unten „docker ps ”-Befehl, um die laufenden Container aufzulisten
[email protected]:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [email protected]:~$
Um alle laufenden und gestoppten Container aufzulisten, verwenden Sie „docker ps -a ”
[email protected]:~$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 497e6733d760 ubuntu "bash" 19 minutes ago Exited (0) 2 minutes ago goofy_morse 0862fe109f96 hello-world "/hello" 19 minutes ago Exited (0) 19 minutes ago vibrant_shannon [email protected]:~$
Das Standard-Stammverzeichnis von Docker ist „/var/lib/docker“
[email protected]:~$ sudo ls -l /var/lib/docker total 48 drwx------ 2 root root 4096 Apr 14 07:00 builder drwx------ 4 root root 4096 Apr 14 07:00 buildkit drwx------ 4 root root 4096 Apr 14 07:09 containers drwx------ 3 root root 4096 Apr 14 07:00 image drwxr-x--- 3 root root 4096 Apr 14 07:00 network drwx------ 16 root root 4096 Apr 14 07:27 overlay2 drwx------ 4 root root 4096 Apr 14 07:00 plugins drwx------ 2 root root 4096 Apr 14 07:27 runtimes drwx------ 2 root root 4096 Apr 14 07:00 swarm drwx------ 2 root root 4096 Apr 14 07:27 tmp drwx------ 2 root root 4096 Apr 14 07:00 trust drwx------ 2 root root 4096 Apr 14 07:00 volumes [email protected]:~$
Wenn der Docker-Daemon nicht gestartet wird, kann er mit dem folgenden Befehl aufgerufen werden:
[email protected]:~$ sudo dockerd
Ausgabe von obigem dockerd Der Befehl sieht in etwa so aus:
Lesen Sie auch:So installieren Sie Docker unter CentOS 7
4) Docker-Container-Image herunterladen und Container untersuchen
[email protected]:~$ sudo docker pull ubuntu:latest Using default tag: latest latest: Pulling from library/ubuntu 898c46f3b1a1: Pull complete 63366dfa0a50: Pull complete 041d4cd74a92: Pull complete 6e1bee0f8701: Pull complete Digest: sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8 Status: Downloaded newer image for ubuntu:latest [email protected]:~$ latest: Pulling from library/ubuntu898c46f3b1a1: Pull complete 63366dfa0a50: Pull complete 041d4cd74a92: Pull complete6e1bee0f8701: Pull complete Digest: sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8Status: Downloaded newer image for ubuntu:latest
Das Beispiel zum Starten eines Containers wird unten gezeigt
[email protected]:~$ sudo docker run -d -t ubuntu /bin/bash 58c023f0f5689ff08b858221ca10c985936a8c9dd91d08e84213009facb64724 [email protected]:~$ [email protected]:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 58c023f0f568 ubuntu "/bin/bash" 27 seconds ago Up 26 seconds boring_dijkstra [email protected]:~$
Untersuchen wir diesen Container mit dem folgenden Befehl:
[email protected]:~$ sudo docker inspect 58c023f0f568 [ { "Id": "58c023f0f5689ff08b858221ca10c985936a8c9dd91d08e84213009facb64724", "Created": "2019-04-14T06:55:26.289022884Z", "Path": "/bin/bash", "Args": [], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 15538, "ExitCode": 0, "Error": "", "StartedAt": "2019-04-14T06:55:27.142274111Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:94e814e2efa8845d95b2112d54497fbad173e45121ce9255b93401392f538499", "ResolvConfPath": "/var/lib/docker/containers/58c023f0f5689ff08b858221ca10c985936a8c9dd91d08e84213009facb64724/resolv.conf", ………………………………………………
Hinweis:- Die vollständige Ausgabe dieses Befehls wird hier nicht angezeigt, da die Ausgabe zu groß ist
5) Gehen Sie in das laufende Container-Image
Wie man weiß, verwendete Docker ursprünglich alles, was auf dem LXC-Backend basierte, der lxc-attach-Befehl von Linux wurde für einige Zeit verwendet. Aber sobald Docker als eigenständiges Paket erstellt wurde und mit der Verwendung von „libcontainer “ als Standard-Backend wurde die Verwendung des Befehls „docker exec“ populär
Der folgende Satz von Befehlen erklärt, wie man sich über die Befehlszeile beim Container anmeldet,
:~$ sudo docker exec -t
[email protected]:~$ sudo docker exec -t 58c023f0f568 ls -a . .dockerenv boot etc lib media opt root sbin sys usr .. bin dev home lib64 mnt proc run srv tmp var [email protected]:~$ sudo docker exec -t 58c023f0f568 ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 06:55 pts/0 00:00:00 /bin/bash root 20 0 0 07:17 pts/1 00:00:00 ps -ef [email protected]:~$
Die alternative Möglichkeit, Befehle innerhalb des Containers auszuführen, besteht darin, sich zuerst mit „Docker Attach“ beim Container anzumelden ” und dann Befehle ausführen
:~$ sudo Docker Attach
[email protected]:~$ sudo docker attach 58c023f0f568 [email protected]:/#
Es gibt einige Situationen, in denen Sie einen Container starten und ein Volume daran anhängen möchten, und wenn wir den Container verlassen, sollte er automatisch gelöscht werden, das Beispiel ist unten gezeigt
[email protected]:~$ sudo docker run -it --rm -v /usr/local/bin:/target jpetazzo/nsenter bash [email protected]:/src# df -h /target/ Filesystem Size Used Avail Use% Mounted on /dev/sda1 18G 5.6G 12G 34% /target [email protected]:/src# exit exit [email protected]:~$
Überprüfen Sie nun, ob Docker automatisch entfernt wird oder nicht, wenn wir den Container verlassen, führen Sie „docker ps“
aus[email protected]:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 58c023f0f568 ubuntu "/bin/bash" About an hour ago Up About an hour boring_dijkstra [email protected]:~$
6) Docker-Überwachung
Verwenden Sie „Docker-Statistiken ”-Befehl zum Anzeigen der Ressourcenauslastung aller Container,
[email protected]:~$ sudo docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 58c023f0f568 boring_dijkstra 0.00% 1.059MiB / 1.947GiB 0.05% 4.75kB / 0B 4.74MB / 0B 1 CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 58c023f0f568 boring_dijkstra 0.00% 1.059MiB / 1.947GiB 0.05% 4.75kB / 0B 4.74MB / 0B 1 [email protected]:~$
7) Docker-Ereignisse
Oft ist die Erfassung von Docker-Ereignissen von entscheidender Bedeutung, da dies Informationen zu verschiedenen Docker-Operationen und -Ereignissen liefert, die stattfinden. Unten ist der Schnappschuss davon.
[email protected]:~$ sudo docker events 2019-04-14T09:29:07.636990738+01:00 image pull wordpress:latest (name=wordpress) 2019-04-14T09:29:46.936676431+01:00 volume create 36187e0a44d277439fea0df2446fc44987fa814c52744091929e5c81bd8134e5 (driver=local) 2019-04-14T09:29:46.998798935+01:00 container create b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058 (image=wordpress, name=friendly_heisenberg) 2019-04-14T09:29:47.000202026+01:00 container attach b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058 (image=wordpress, name=friendly_heisenberg) 2019-04-14T09:29:47.209257002+01:00 network connect 18dd93c3c6fc9ce51a98f7d2359b319db251efcae6b991157965ef727a580702 (container=b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058, name=bridge, type=bridge) 2019-04-14T09:29:47.239846902+01:00 volume mount 36187e0a44d277439fea0df2446fc44987fa814c52744091929e5c81bd8134e5 (container=b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058, destination=/var/www/html, driver=local, propagation=, read/write=true) 2019-04-14T09:29:47.942997316+01:00 container start b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058 (image=wordpress, name=friendly_heisenberg) 2019-04-14T09:29:47.944521098+01:00 container resize b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058 (height=39, image=wordpress, name=friendly_heisenberg, width=130) 2019-04-14T09:29:59.829378089+01:00 container die b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058 (exitCode=0, image=wordpress, name=friendly_heisenberg) 2019-04-14T09:30:00.147435896+01:00 network disconnect 18dd93c3c6fc9ce51a98f7d2359b319db251efcae6b991157965ef727a580702 (container=b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058, name=bridge, type=bridge) 2019-04-14T09:30:00.845336887+01:00 volume unmount 36187e0a44d277439fea0df2446fc44987fa814c52744091929e5c81bd8134e5 (container=b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058, driver=local) ………………
Schlussfolgerung
Die Kombination all dieser Befehle und Dienstprogramme ist sehr wichtig, um Docker und Container zu einer erfolgreichen Microservices-basierten Umgebung zu machen. Da viele Microservice-Architekturen diese Art von Dienstprogrammen benötigen, um sie für den täglichen Gebrauch zu debuggen, zu verstehen und mehr darüber zu erfahren, hoffe ich, dass dieser Artikel in solchen Fällen eine Rolle spielen wird.
Lesen Sie auch:So installieren und verwenden Sie docker-compose zum Bereitstellen von Containern in CentOS 7