Wie man Docker richtig einsetzt
3. Dezember 2019Docker hat sich ausgebreitet. Es ist gut, es zu lernen (für einen Linux-Typ wird es ein Kinderspiel sein). Aber es ist auch notwendig, es zu verstehen und richtig zu benutzen. Es ist auch gut, einige fortgeschrittene Funktionen zu kennen, wenn Sie benutzerdefinierte Docker-Container erstellen oder die Leistung von Docker auf einem Mac oder Windows verbessern wollen.
Docker hat sich ausgebreitet. Es ist gut, es zu lernen (für einen Linux-Typ wird es ein Kinderspiel sein). Aber es ist auch notwendig, es zu verstehen und richtig zu benutzen. Es wird auch gut sein, einige fortgeschrittene Funktionen zu kennen, wenn du deine eigenen Docker-Container baust oder die Docker-Performance auf einem Mac oder Windows löst.
Dieser Artikel ist eine Anleitung oder ein Tutorial für den Einstieg in Docker. Er beschreibt, wie Docker funktioniert und wie man es verwendet.
Tutorials zu spezifischen Anwendungen werden später folgen.
Wer eine Anwendung in Docker zum Laufen bringen möchte und kein Interesse an einer Schulung hat, kann eine individuelle Zusammenarbeit vereinbaren.
Docker ist eine der Visualisierungstechnologien, speziell die Container-Virtualisierung. Es handelt sich um eine Virtualisierung, die sich die Fähigkeiten des Linux-Kernels zunutze macht, weshalb Docker in erster Linie für Linux konzipiert ist. Auf verschiedene Weise kann es aber auch auf Windows und Mac OS X zum Laufen gebracht werden, was auch oft geschieht.
Eine Anwendung in Docker läuft als Systemprozess, der sich den Speicher und den Systemkern teilt. Da der Kernel gemeinsam genutzt wird, muss die Anwendung nur die Funktionen nutzen, die der Kernel hat. Für die meisten gängigen Anwendungen werden jedoch keine besonderen oder neuen Funktionen benötigt.
Insbesondere verwendet Docker die folgenden Linux-Kernel-Funktionen: cgroups und Namespaces.
Wozu ist Docker gut?
Sie können Anwendungen auch ohne Docker ausführen und entwickeln. Docker ist also nicht notwendig, aber es gibt ein paar typische Anwendungen, für die eine Docker-Bereitstellung nützlich ist.
- Testing
- Befehlszeilenanwendungen - das Ergebnis ist eine vollständig funktionierende Anwendung. Es kann auch eine Anwendung sein, die mit wine läuft.
- Zustandslose Anwendungen.
- State-Anwendungen - Daten müssen separat in Volumes gespeichert werden.
- Entwicklung - Vagrant wird auch dafür verwendet, aber Docker ist am beliebtesten. (Vagrant ist ein einfacher Wrapper um die CLI-Schnittstelle von Virtualbox)
- Offener Betrieb - die Umgebung, wie Sie sie brauchen.
- HA, Skalierung - Lösung mit Orchestrierungswerkzeug z.B. Kubernetes.
- Testing, schnelle Migration auf neue Softwareversionen. Zum Beispiel ein Upgrade von PHP.
- Lösung der Anwendung.
- Migration.
- Schnellstart.
Wie ich schreibe, hat sich Docker vor allem bei Webanwendungen stark durchgesetzt.
Aber für einige Anwendungen ist es besser geeignet, zum Beispiel für Virtualbox.
Auch für den Einsatz unter Mac OS X und Windows wäre VirtualBox besser geeignet, da die nicht-native Verwendung von Docker zu Leistungsproblemen führt.
Für den erfahrenen Linux-Admin
wird es kein Problem sein, eine reproduzierbare Umgebung in VirtualBox vorzubereiten, z.B. mit
Ansible
Die Umgebung in Docker läuft isoliert, so dass die darin laufende Anwendung nicht mit anderen Anwendungen interferieren kann. Es ist auch möglich, für jede Anwendung eine eigene Umgebung zu erstellen. Es ist möglich, die Umgebung schnell zu ändern, zum Beispiel, um auf neue Versionen zu aktualisieren oder die Anwendung mit verschiedenen Versionen von Bibliotheken zu testen.
Virtualisierung
Erfahren Sie in diesem Video mehr über die Arten der Virtualisierung und die spezifischen Technologien, die Virtualisierung implementieren:
Docker-Installation
Zuerst muss man Docker installieren, wenn man eine Linux-Distribution von Mageia Version 6 oder 7 hat, ist Docker in deren Repositories. Und so lädt es den folgenden Befehl, um Docker zu installieren:
urpmi dockerUm Docker als normaler Benutzer verwalten zu können, muss man der Gruppe docker beitreten.
Docker unter Debian
Docker ist nicht in der Debian Linux Distribution enthalten. Daher müssen wir das offizielle Docker-Repository hinzufügen und können dann Docker installieren.
Zuerst fügen wir die Zertifikate des Repositorys hinzu:
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
Erstellen Sie eine Konfigurationsdatei für das Repository:
echo "deb https://download.docker.com/linux/debian $(lsb_release -cs) stable">> /etc/apt/sources.list.d/docker.list
Docker installieren:
apt-get update && apt-get install docker-ce
Mit diesem Befehl können Sie feststellen, ob Docker läuft:
systemctl status dockerQuelle - Anleitung auf Englisch: wie man docker auf debian 9 installiert und benutzt . Ich habe dies bereits auf Debian 10.s getan.
Eindrücke
Um sich mit einer neuen Technologie vertraut zu machen, muss man die grundlegenden Konzepte erklären.
Abbild
Ein Image ist das, was eine vorbereitete Umgebung ohne lokale Änderungen darstellt. Aus der Sicht eines Programmierers könnte man es eine Klasse nennen.Container
Ein Container kann mit einer Instanz eines Objekts verglichen werden. Er ist eine laufende Umgebung, die aus einem Image erstellt wird und bereits die Daten oder lokalen Änderungen enthält, die er erstellt hat.In der Virtualisierung ist die Beziehung zwischen Image und virtueller Maschine normalerweise 1:1. In Docker hingegen können Sie beliebig viele Container aus einem einzigen Image ausführen.
Docker komponieren
Mit docker-compose lässt sich definieren, wie mehrere Docker-Container laufen, wie sie eingerichtet werden sollen und wie sie verknüpft werden sollen. Die Konfiguration von docker-compose wird in eine Datei im YAML-Format geschrieben. Sie enthält Informationen darüber, welche Container von welchen Images gestartet werden sollen, welche Volumes verbunden werden sollen und wie sie über ein virtuelles Netzwerk verbunden werden sollen.
Kubernetes
Kubernetes ist ein Orchestrierungswerkzeug für Docker und andere ähnliche Technologien. Dieses Tool steuert und verwaltet Container, damit sie nach Bedarf laufen. Es schaltet sie automatisch ein und aus usw..
Docker-Schwarm
Docker swarm ist ein Orchestrierungswerkzeug von Docker, derzeit ist Kubernetes weiter verbreitet.
Befehle zur Nutzung von Docker
Mit diesem Befehl werden die Daten heruntergeladen und ein Beispiel-Docker-Image erstellt, das Sie ausprobieren können.
docker run hello-world
Auflistung der laufenden Container:
docker psSie können auch andere Informationen zu den Containern sehen, z. B. welche Ports von der lokalen Maschine auf welche im Container abgebildet werden.
Auflistung der vorhandenen Panels:
Docker-Images
In der Dockerdatei kann man eine eigene Konfiguration für die Erstellung des Images definieren.
Zum Beispiel
FROM php:7.2.18-cli-alpine3.9 RUN php -v CMD php -v
Erstelle das Image gemäß deiner
Dockerdatei
und nenne es alpine-php72:
docker build -t alpine-php72 .alpine-php72
Mit diesem Befehl wird das Image gestartet.
docker run alpine-php72Sie werden feststellen, dass beim Erstellen des Images die PHP-Version ausgegeben wird und dann, wenn das Image gestartet wird.
Sie können über die Weboberfläche nach vorgefertigten Containern suchen https://hub.docker.com/ oder von der Konsole aus mit dem Befehl:
docker search NAME
So startet man die Konsole, also den Bash-Interpreter im Container mit der ID e286a85fdcac:
docker exec -it e286a85fdcac /bin/bash
Damit wird der Container aus dem Image web gestartet und der lokale Port 8080 auf den Port 80 des Containers gemappt:
docker run -ditp 8080:80 webWas im Container auf Port 80 läuft, ist also auf localhost:8080 verfügbar.
Wir starten den Container aus dem Image docketette-web-alpine, das wir auch www nennen. und falls bereits ein Container mit diesem Namen existiert, wird dieser gelöscht und ein neuer erstellt.
docker run -it --rm --name www -p 80:80 -p 9001:9001 dockette-web-alpine
Bedeutung der Schalter
-t Allocate und pseudo-tty
-i STDIN offen halten, auch wenn nicht angeschlossen
-d trennt unser Terminal
-P gibt alle offenen Ports an zufällige Ports weiter und schließlich
--name entspricht einem Namen, den wir vergeben wollen. Jetzt können wir die Ports sehen, indem wir den Befehl docker port [CONTAINER] ausführen
Kopieren, Hinzufügen
Wenn man den COPY
-Befehl in einer Dockerdatei gibt, kopiert er die lokale Datei in das Image.
Das ist gut für das Hochladen von Konfigurations- oder anderen Dateien, die im Container benötigt werden.
Kopieren Sie die virtualhost-Konfiguration für den Apache-Webserver:
COPY site.conf /etc/apache2/sites-available/000-default.conf
Der Befehl ADD
funktioniert fast auf die gleiche Weise.
Volumina
Volumes ist eine Möglichkeit, lokale Daten in einen Container zu bekommen, damit man gleichzeitig daran arbeiten kann. Es ist also ideal für die Entwicklung, wo man Dateien lokal bearbeitet und der Container Zugriff auf sie hat, so dass man sie sofort ausführen kann.
Ein Beispiel, bei dem man die Verwendung von Volumes ausprobieren und im Container überprüfen kann, dass das, was man erstellt, an beiden Orten sichtbar ist:
docker run -v /root/container_dir:/root/host -i -t debian /bin/bash
Manuell ein Volume erstellen. Der Speicherort ist auf der Festplatte gemäß der Docker-Konfiguration.
docker volume create my-vol
Liste der verfügbaren Volumes: docker volume ls
Anzeige der Details eines bestimmten Datenträgers: docker volume inspect my-vol
Starten eines Docker-Containers mit einer Mageia 7-Distribution und Anhängen des erstellten Volumes an /srv und Ausführen der Shell im Container: docker run --mount source=my-vol,destination=/srv -it mageia7 /bin/bash
Wenn du ein Leistungsproblem löst, ist Volumen auf Mac oder Windows eine Möglichkeit, die meisten Dinge direkt im Docker zu haben.
Oder alles im Docker zu haben und auf seine Daten zuzugreifen.
Wenn Sie ein größeres Leistungsproblem haben, gibt es die Möglichkeit, eine andere Art der Virtualisierung wie Virtualbox zu wählen.
Aber Dinge rund um Entwicklung und Devops sind schon für die persönliche Beratung.
Mehr dazu Docker-Volumen.
Hinweise
Nur eine Sache gehört in einen Container.
Docker-Video erste Verwendung
Dieses Video erklärt die grundlegenden Konzepte und Befehle und zeigt Ihnen, wie Sie Docker zum ersten Mal verwenden.
Erweiterte Verwendung von Docker
Sie können Umgebungsvariablen definieren
ENV PHP_CLI_DIR=/etc/php/7.3/cli
Kopieren Sie die Datei in den laufenden Container:
docker cp foo.txt mycontainer:/foo.txt
Verknüpfen von Containern. Starten Sie einen Container mit einer Datenbank und dann einen Container mit einem Projekt, das sich mit der Datenbank verbinden soll. docker run --name somemysql -e MYSQL_ROOT_PASSWORD=pass1234 -d mysql docker run --name someproject --link somemysql:mysql -d project - MYSQL_DATABASE=dbname
Wenn Sie einige Daten einmal in die DB laden müssen, können Sie einen dieser Befehle verwenden:
cat temp.sql | pv | docker exec -i mysql.master /bin/mysql --init-command="SET autocommit=0;" cat dump.sql | docker-compose exec -Tmysql -u -p
Für die Datenbankinitialisierung erwartet der normale MariaDB-Container eine Initialisierungs-SQL-Datei in
/docker-entrypoint-initdb.d/dump.sql
So kann man z.B. mit dem Parameter v (für volume) die Verbindung der Initialisierungs-SQL-Datei zum Docker-Container nachfixieren.
-v./dump.sql:/docker-entrypoint-initdb.d/dump.sql
Die Logs für jeden Container befinden sich hier:
/var/lib/docker/containers/
Wenn der Docker-Container im Hintergrund läuft (typisch für einen Server), kann man sich so mit STDOU verbinden:
docker logs -f f6010bf5a375
Videa docker
Entwicklung einer PHP/Nette3-Webanwendung in Docker
Hier ist ein Video-Livestream, der den Einsatz von Docker in der Webanwendungsentwicklung zeigt:
Docker komponieren
In meiner Linux-Distribution (Mageia 6) konnte ich aufgrund einer Kollision docker-compose nicht installieren (vermutlich wegen der Überentwicklung von Docker),
Also habe ich docker-compose manuell heruntergeladen und in das System integriert.
Befehl zum Herunterladen, Speichern und Setzen von Berechtigungen:
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Erfahren Sie mehr über die Installation von docker-compose.
Konfiguration von docker compose
Die Konfiguration für docker-compose wird in die Datei docker-compose.yml geschrieben. Dort kann man angeben, von welchen Images welche Container gestartet werden sollen. Wie Volumes und Ports gemappt werden sollen und welche anderen Konfigurationswerte an sie übergeben werden sollen.
Diese Konfiguration legt fest, dass sich die Dockerdatei im gleichen Verzeichnis befindet. Sie gibt den Namen des Quellcontainers an und wie das Image genannt werden soll. Die Portzuordnung wird angegeben. Die Variable NETTE_DEBUG=1 ist eine Umgebungsvariable, die wir verwenden können, um eine andere Projektkonfiguration in PHP zu laden.
version: '3.6' Dienste: Web: build: ./ Abbild: linuxserveradmin container_name: linuxserveradmin Umgebung: - NETTE_DEBUG=1 volumes: - .:/srv Ports: - 8081:80
Führen Sie das, was Sie in der Datei docker-compose konfiguriert haben, in einem Rutsch mit dem Befehl aus:
docker-compose up
Löschen
Alle Docker-Container auflisten:
docker inspect -f '{{ .Mounts }}' containeridImage löschen:
docker rmi hello-worldUm alle Docker-Images zu löschen, verwenden Sie den folgenden Befehl:
docker rmi $(docker images -a -q) -fDieser Befehl löscht alle Container, Netzwerke, Images und erstellten Caches: docker system prune -a
Cache
Docker speichert Daten im Cache und verwendet diese Daten dann.
Zum Beispiel hat das Image Informationen über Pakete im Repository zwischengespeichert.
Aber wenn ein Update hereinkommt,
verschwinden die alten Pakete, und wenn Ihre Schicht auf diesen zwischengespeicherten Daten aufbaut, versucht sie, das herunterzuladen, was nicht mehr existiert.
Aus diesem Grund ist es eine gute Idee, vor jedem apt-get update-Befehl, der die Repository-Informationen aktualisiert, ein apt-get install auszuführen.
Dann schreibt man es wie folgt in das Dockerfile:
RUN apt-get -qq update && apt-get install -y ........Diese Schalter besagen, dass man den interaktiven Modus nicht verwenden soll, da Docker ihn automatisch ausführt.
Rebuild des Images ohne Verwendung des Caches:
docker-compose build --no-cache
Automatisches Starten von Containern
Deaktivieren Sie den automatischen Containerstart nach einem Neustart:
docker update --restart=no 491dfa4b274a
Einstellen des Containers, dass er automatisch startet, wenn der Computer hochfährt:
docker update --restart=yes 491dfa4b274a
Oder Sie müssen den Container mit dem Parameter
--restart always
Für die gleiche Funktionalität in der docker-compose YAML-Datei angeben:
restart: Always
Docker und BTRFS
Ich verwende das BTRFS-Dateisystem, das von Docker genutzt wird.
Auch dies ist ein Beispiel dafür, warum man Linux verwenden sollte und warum man das BTRFS-Dateisystem und andere gute moderne Technologien, die die Arbeit effizienter machen, nutzen sollte.
Die Auflistung der Schichten, die sich in BTRFS befinden, d.h. Subvolumes, zeigt der Befehl:
btrfs subvolume list /.Und siehe da, man sieht eine Reihe von Subvolumes, die Docker erstellt hat.
GUI-Anwendungen in Docker
Sie können auch GUI-Anwendungen in Docker ausführen. Hier zeige ich Ihnen den grundlegenden Weg, eine GUI-Anwendung Augen laufen zu lassen.
Erstellen Sie das folgende Dockerfile:
VON centos RUN yum install -y xeyes CMD ["/usr/bin/xeyes"]Erstellen Sie das Image:
docker build -t gui-app .Starten Sie den Image-Container und das darin befindliche Programm:
docker run --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" gui-app
Ausführen von Adobe Acrobad Reader unter Linux ohne Installation - d.h. mit Docker:
docker run --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -v $HOME:/srv mgor/acroread
Docker - Entwicklung von Webanwendungen
Wenn Sie Webanwendungen entwickeln, ist es eine gute Idee, ein Standard-Docker-Image zu haben. Ich habe ein solches Image für Sie vorbereitet. Für PHP8 habe ich vorbereitet docker image with PHP8. Es gibt auch andere von mir vorbereitete Images mit älteren PHP-Versionen, z.B. Version 5.6, 7.4 usw.
Wenn Sie Webanwendungen programmieren in den PHP-Frameworks Nette oder Symfony programmieren, habe ich ein Docker-Image mit der Konfiguration für diese Frameworks vorbereitet. Sie müssen also nur den Docker-Container starten und den Quellcode der Anwendung anhängen. Hier ist Docker-Image für Nette und hier ist Docker-Image für Symfony.
Dann muss man nur noch einedocker-compose.yml
Datei erstellen, um die Entwicklungsumgebung zu starten.
mit folgendem Inhalt/Konfiguration:
version: '3.6' services: web: image: debian-apache-php8.0-nette container_name: linuxserveradmin_web Umgebung: - NETTE_DEBUG=1 working_dir: /var/www/html Volumes: - .:/var/www/html - ./docker/development/web/msmtprc:/etc/msmtprc Ports: - 8081:80 - 8082:443Die Datei
msmtprc
enthält die Konfiguration für den Versand von E-Mails über einen externen SMTP-Server.
Und das Docker-Image ist so konfiguriert, dass die mail()-Funktion in PHP automatisch Mails über den konfigurierten externen Mailserver versendet.
Details finden Sie im Artikel
Wie man den Mailversand in PHP in Docker konfiguriert.
Schulung
Für Unternehmen, die ihre Abläufe rationalisieren wollen, kann ich Docker empfehlen. Und durch Docker-Schulung und anschließende Zusammenarbeit werden wir gemeinsam Docker in die Unternehmen bringen.
Docker Hub
Video, wie man ein Docker-Image erstellt und es auf Docker Hub hochlädt:
Für die Entwicklung von Projekten in PHP mit dem Nette Framework. oder Symfony können Sie das von mir erstellte Docker-Image verwenden, das alles enthält, was Sie brauchen: Apache, Composer, PHP mit Modulen. Hier ist Docker-Image für Symfony mit PHP7.4 und Docker-Image für Nette mit PHP7.4. Ich verwende diese Docker-Images auch auf meinem Schulungskursen zur Entwicklung von Webanwendungen.
Windows und Docker
Man kann Docker auch unter Windows betreiben, aber die Installation ist komplizierter und die Leistung ist schwächer. Es gibt mehrere Möglichkeiten, Docker unter Windows zum Laufen zu bringen:
- Docker Desktop Guide for Windows .
- Docker für Windows 10 (Docker Desktop erfordert Windows 10 Pro oder Enterprise Version 15063), das verwendet. Windows Subsystem für Linux (WSL).
- Docker für Windows 8.
Docker-Tutorials
- Docker und PHP-Mail
- Docker und Cron
- Wie man schlechte Dateifreigabeleistung mit Docker unter Windous oder macOS behebt
Links und Ressourcen
dockerDocker-Hub
Docs Docker
Andere Ressourcen
https://dckr.cz/docker-800-days-pote
vojta.kalcik.cz navody:docker
docker mariadb
Start-Container-automatisch/
proc-powered-docker/
Nette in Docker
docker nettenette ist php 7.3 - November 2019, ich selbst betreibe Nette bereits auf PHP 7.4
Artikel zu einem ähnlichen Thema
VMware vs. Proxmox: Leistungsvergleich
GitLab CI/CD: Testautomatisierung und Anwendungsbereitstellung
VPS von VMware zu Proxmox migrieren
VMware-Lizenzierungsänderung
Ausführen von Microsoft SQL Server unter Linux
Sicherung: der Proxmox Backup Server
Linux als Router und Firewall
Hochladen eines Docker-Images in die Docker-Registry
Linux: Verwaltung logischer Datenträger
Linux-Software-RAID
Ausführen einer Webanwendung hinter einem Proxy
Migration von Postfächern
Mehrstufige Docker-Erstellung
Sichern Ihrer Daten durch Einschalten des Computers
Podman
Importieren von Windows in die Proxmox-Virtualisierung
Docker und PHP-Mail
Proxmox-Virtualisierung
Docker und Cron
Lenovo ThinkPad X1 Carbon: Inbetriebnahme des LTE-Modems EM7544
Yocto-Projekt: Erstellen eines eigenen Betriebssystems für eingebettete Geräte
Vorbereiten eines Linux-Servers für die Ausführung einer Webanwendung in Python
Wie man eine schlechte Dateifreigabeleistung in Docker behebt
Installation von Linux auf einem dedizierten HPE ProLiant DL320e Server
Wie man eine Webanwendung einem Belastungstest unterzieht
Warum das JFS-Dateisystem verwenden
Booten von einer 4TB-Festplatte mit GTP unter UEFI
Btrfs-Dateisystem
Raspberry PI
WINE - Ausführen von Windous Programmen unter Linux
GNU/Linux-Betriebssystem
Newsletter
Wenn Sie daran interessiert sind, gelegentlich Neuigkeiten per E-Mail zu erhalten.
Sie können sich registrieren, indem Sie Ihre E-Mail-Adresse eingeben
News-Abonnement.
+