Das Tutorial basiert auf der neuesten Compose-Version 3 unter Ubuntu 1. Einführung in Compose Docker Compose ist ein Docker-Tool zum Definieren und Ausführen komplexer Anwendungen. Eine Anwendung, die einen Docker-Container verwendet, besteht normalerweise aus mehreren Containern. Mit Docker Compose müssen Sie zum Starten von Containern keine Shell-Skripte mehr verwenden. Compose verwaltet mehrere Docker-Container über eine Konfigurationsdatei. In der Konfigurationsdatei werden alle Container über Dienste definiert. Anschließend wird das Docker-Compose-Skript verwendet, um die Anwendung, die Dienste in der Anwendung und die Container aller abhängigen Dienste zu starten, zu stoppen und neu zu starten. Es eignet sich sehr gut für Szenarien, in denen mehrere Container für die Entwicklung kombiniert werden. 2. Compose- und Docker-Kompatibilität
Änderungen der Docker-Version: Ab Version 1.13.x ist Docker in Enterprise Edition EE und Community Edition CE unterteilt. Die Versionsnummern werden ebenfalls geändert, um sie entsprechend der Zeitleiste zu veröffentlichen. Beispielsweise ist 17.03 März 2017. Das Software-Repository der Linux-Distribution von Docker wurde vom vorherigen https://apt.dockerproject.org und https://yum.dockerproject.org zum aktuellen https://download.docker.com geändert und die Paketnamen wurden in docker-ce und docker-ee geändert. 3. Docker installieren Die Docker Community Edition heißt docker-ce. Die alte Version des Docker-Pakets heißt Docker oder Docker-Engine. Wenn Sie die alte Version von Docker installiert haben, müssen Sie diese zuerst deinstallieren und dann die neue Version von Docker installieren. Docker entwickelt sich sehr schnell und Updates für Apt-Repositories hinken oft hinterher. Daher besteht die von der offiziellen Docker-Website empfohlene Installationsmethode darin, das Docker-Installationsskript herunterzuladen. $ sudo apt-get entfernen docker docker-engine docker.io Installieren Sie das neueste Docker: $ curl -fsSL get.docker.com -o get-docker.sh $ sudo sh get-docker.sh Die Shell fordert Sie auf, das Sudo-Passwort einzugeben und dann mit der Ausführung des neuesten Docker-Prozesses zu beginnen oder $ curl -sSL https://get.docker.com/ | sh Bestätigen Sie, dass Docker erfolgreich ist und das neueste Docker-Paket verwendet wird: $ sudo docker run hallo-welt 4. Installieren Sie Docker-ComposeZwei aktuelle Docker-Installationsmethoden 1. Laden Sie die Docker-Compose-Binärdatei von GitHub herunter und installieren Sie sie Laden Sie die neueste Version der Docker-Compose-Datei herunter sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose Wenn der GitHub-Zugriff zu langsam ist, können Sie Daocloud zum Herunterladen verwenden sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose Ausführbare Berechtigungen hinzufügen sudo chmod +x /usr/local/bin/docker-compose Ergebnisse der Testinstallation $ docker-compose --version Docker-Compose-Version 1.16.1, Build 1719ceb 2.pip-Installationsudo pip installiere Docker-Compose 5. Docker-Compose-Dateistruktur und Beispiele Docker-Compose-Dateistrukturdocker-compose.yml: Version: "3" Leistungen: Redis: Bild: redis:alpine Häfen: - "6379" Netzwerke: -Frontend einsetzen: Replikate: 2 Konfiguration aktualisieren: Parallelität: 2 Verzögerung: 10s Neustartrichtlinie: Bedingung: bei Fehler db: Bild: postgres:9.4 Bände: -db-data:/var/lib/postgresql/data Netzwerke: - Backend einsetzen: Platzierung: Einschränkungen: [node.role == manager] Abstimmung: Bild: dockersamples/examplevotingapp_vote:before Häfen: 5000:80 Netzwerke: -Frontend hängt ab von: - Redis einsetzen: Replikate: 2 Konfiguration aktualisieren: Parallelität: 2 Neustartrichtlinie: Bedingung: bei Fehler Ergebnis: Bild: dockersamples/examplevotingapp_result:before Häfen: 5001:80 Netzwerke: - Backend hängt ab von: -db einsetzen: Replikate: 1 Konfiguration aktualisieren: Parallelität: 2 Verzögerung: 10s Neustartrichtlinie: Bedingung: bei Fehler Arbeitnehmer: Bild: dockersamples/examplevotingapp_worker Netzwerke: -Frontend - Backend einsetzen: Modus: repliziert Replikate: 1 Beschriftungen: [APP=VOTING] Neustartrichtlinie: Bedingung: bei Fehler Verzögerung: 10s Max_Versuche: 3 Fenster: 120s Platzierung: Einschränkungen: [node.role == manager] Visualisierer: Bild: Dockersamples/Visualizer:Stable Häfen: - „8080:8080“ Stoppfrist: 1 Min. 30 Sek. Bände: – „/var/run/docker.sock:/var/run/docker.sock“ einsetzen: Platzierung: Einschränkungen: [node.role == manager] Netzwerke: Frontend: Backend: Bände: DB-Daten: Anwendungsbeispiele für Docker-ComposeVerwenden Sie Docker-Compose, um eine Webanwendung basierend auf dem Python-Flask-Framework zu erstellen, das in Docker ausgeführt wird. Hinweis: Stellen Sie sicher, dass Sie Docker Engine und Docker Compose installiert haben. Sie müssen weder Python noch Redis installieren, da beide vom Docker-Image bereitgestellt werden. Schritt 1: Definieren Sie die Python-Anwendung 1. Erstellen Sie ein Projektverzeichnis $ mkdir compose_test $ cd komponieren_test $ mkdir src # Quellcode-Ordner $ mkdir docker # Docker-Konfigurationsordner Die Verzeichnisstruktur ist wie folgt: └── Test verfassen ├── Docker │ └── docker-compose.yml ├── Docker-Datei └── Quelle ├── app.py └── Anforderungen.txt 2. Erstellen Sie eine Python-Flask-Anwendungsdatei compose_test/src/app.py im Verzeichnis compose_test/src/. aus Flasche importieren Flasche von Redis importieren Redis App = Flask(__name__) redis = Redis(Host='redis', Port=6379) @app.route('/') def hallo(): Anzahl = redis.incr('Treffer') return 'Hallo Welt! Ich wurde {} Mal gesehen.\n'.format(Anzahl) wenn __name__ == "__main__": app.run(Host="0.0.0.0", Debug=True) 3. Erstellen Sie eine Python-Anforderungsdatei compose_test/src/requirements.txt Flasche Redis Schritt 2: Erstellen Sie eine Docker-Datei für den Container Ein Container, eine Dockerfile-Datei. Erstellen Sie die Dockerfile-Datei im Verzeichnis compose_test/: VON python:3.7 KOPIEREN src/ /opt/src ARBEITSVERZEICHNIS /opt/src Führen Sie den Befehl „pip install -r requirements.txt“ aus. CMD ["python", "app.py"] Das Dockerfile teilt Docker die folgenden Informationen mit: Erstellen Sie ein Container-Image ausgehend vom Python 3.6-Image. Kopieren Sie das src-Verzeichnis (d. h. compose_test/src) in das /opt/src-Verzeichnis des Containers. Legen Sie das Arbeitsverzeichnis des Containers auf /opt/src fest (das Standardverzeichnis nach dem Aufrufen des Containers über docker exec -it your_docker_container_id_or_name bash ). Schritt 3: Definieren Sie das Docker-Compose-Skript Erstellen Sie eine Datei docker-compose.yml im Verzeichnis compose_test/docker/ und definieren Sie den Dienst darin. Der Inhalt ist wie folgt: Version: '3' Leistungen: Webseite: bauen: ../ Häfen: - "5000:5000" Redis: Bild: "redis:3.0.7" Diese Compose-Datei definiert zwei Dienste, nämlich die Web- und Redis-Container. Schritt 4: Erstellen und Ausführen Ihrer Anwendung mit Compose Führen Sie die Datei docker-compose.yml im Verzeichnis compose_test/docker/ aus: $ Docker-Compose nach oben # Wenn Sie es im Hintergrund ausführen möchten: $ docker-compose up -d # Wenn Sie nicht den Standarddateinamen docker-compose.yml verwenden: $ docker-compose -f server.yml up -d Geben Sie dann http://0.0.0.0:5000/ in Ihren Browser ein, um die laufende Anwendung anzuzeigen. Schritt 5: Bearbeiten Sie die Compose-Datei, um eine Dateibindungshalterung hinzuzufügen Der obige Code wird zur Build-Zeit statisch in den Container kopiert, d. h. der Quellcode im physischen Host wird über den Befehl COPY src /opt/src in der Dockerfile-Datei in den Container kopiert, sodass sich spätere Änderungen am Code im src-Verzeichnis des physischen Hosts nicht im Container widerspiegeln. Version: '3' Leistungen: Webseite: bauen: ../ Häfen: - "5000:5000" Bände: - ../src:/opt/src Redis: Bild: "redis:3.0.7" Durch das Einbinden des Projektverzeichnisses auf dem Host (compose_test/src) in das Verzeichnis /opt/src im Container über Volumes können Sie den Code im laufenden Betrieb ändern, ohne das Image neu erstellen zu müssen. Schritt 6: Anwendung neu erstellen und ausführen Erstellen Sie die Anwendung mit der aktualisierten Compose-Datei und führen Sie sie dann aus. $ docker-compose up -d 6. Erstellen Sie eine allgemeine DienstkonfigurationsreferenzEine Compose-Datei ist eine YAML-Datei, die Dienste, Netzwerke und Volumes definiert. Der Standarddateiname der Compose-Datei ist docker-compose.yml. **Tipp: Sie können für diese Datei entweder die Erweiterung .yml oder .yaml verwenden. Sie funktionieren alle. Wie bei „docker run“ werden standardmäßig die im Dockerfile angegebenen Optionen (z. B. CMD, EXPOSE, VOLUME, ENV) berücksichtigt und Sie müssen sie in docker-compose.yml nicht erneut angeben. Sie können Umgebungsvariablen auch in Konfigurationswerten mit der Bash-ähnlichen ${VARIABLE}-Syntax verwenden, weitere Informationen finden Sie unter Variablensubstitution. Dieser Abschnitt enthält alle Konfigurationsoptionen, die von Dienstdefinitionen in Version 3 unterstützt werden. bauen Build kann einen Pfad angeben, der den Build-Kontext enthält: Version: '2' Leistungen: Webanwendung: Build: ./Dir Oder als Objekt mit dem Kontextpfad und den angegebenen Dockerfile- und Args-Werten: Version: '2' Leistungen: Webanwendung: bauen: Kontext: ./dir Dockerfile: Dockerfile-Alternative Argumente: Build-Nr.: 1 Der Webanwendungsdienst erstellt das Container-Image mithilfe der Dockerfile-Alternative-Datei im Verzeichnis ./dir. Build: ./Dir Bild: Webapp:Tag Dadurch wird aus ./dir ein Image mit dem Namen „webapp“ erstellt und mit dem Tag versehen. Kontext Der Pfad zum Verzeichnis, das die Docker-Datei enthält, oder die URL eines Git-Repositorys. Docker-Datei Alternative Docker-Datei. Compose verwendet zum Erstellen die Fallback-Datei. Außerdem muss der Build-Pfad angegeben werden. Argumente Fügen Sie Parameter zum Erstellen des Images hinzu. Auf Umgebungsvariablen kann nur während des Erstellungsprozesses zugegriffen werden. ARG Build-Nr. ARG-Passwort RUN echo "Build-Nummer: $buildno" Führen Sie script-requiring-password.sh "$password" aus. Geben Sie dann die Argumente unter dem Schlüssel „args“ an. Sie können eine Zuordnung oder eine Liste übergeben: bauen: Kontext: . Argumente: Build-Nr.: 1 Passwort: geheim bauen: Kontext: . Argumente: -buildno=1 - Passwort=geheim ** HINWEIS: YAML-Boolesche Werte (true, false, yes, no, on, off) müssen in Anführungszeichen eingeschlossen werden, damit der Parser sie als Zeichenfolgen interpretieren kann. Bild Gibt das Image an, mit dem der Container gestartet werden soll. Dies kann ein Image-Repository/Tag oder eine Image-ID (oder der erste Teil der ID) sein. Bild: Redis Bild: Ubuntu:14.04 Bild: tutum/influxdb Bild: example-registry.com:4000/postgresql Bild: a4bc65fd Wenn das Image nicht existiert, versucht Compose, es aus einem offiziellen Image-Register abzurufen, sofern Sie auch einen Build angeben. In diesem Fall wird es mit den angegebenen Build-Optionen erstellt und mit dem im Image angegebenen Namen und Tag versehen. Containername Geben Sie anstelle des generierten Standardnamens einen benutzerdefinierten Containernamen an. Containername: mein Webcontainer Da Docker-Containernamen eindeutig sein müssen, können Sie Ihren Dienst nicht auf mehrere Container skalieren, wenn Sie einen benutzerdefinierten Namen angeben. Bände Einstellungen für den Bereitstellungspfad des Volumes. Sie können den Hostpfad festlegen (HOST:CONTAINER) oder den Zugriffsmodus hinzufügen (HOST:CONTAINER:ro). Die Standardberechtigung zum Mounten eines Datenvolumens ist Lesen/Schreiben (rw), die durch ro als schreibgeschützt angegeben werden kann. Bände: # Geben Sie einfach einen Pfad an und lassen Sie die Engine ein Volume erstellen - /var/lib/mysql # Absolute Pfadzuordnung angeben - /opt/data:/var/lib/mysql # Relativer Pfad zur aktuellen Compose-Datei - ./cache:/tmp/cache #Relativer Pfad des Home-Verzeichnisses des Benutzers - ~/configs:/etc/configs/:ro # Benanntes Volume - datavolume:/var/lib/mysql Wenn Sie jedoch gemountete Volumes für mehrere Dienste wiederverwenden möchten, benennen Sie die gemounteten Volumes mit dem Volumes-Schlüsselwort der obersten Ebene. Dies ist jedoch nicht zwingend erforderlich. Das folgende Beispiel bietet auch die Funktion der Wiederverwendung gemounteter Volumes, wird jedoch nicht empfohlen. Version: "3" Leistungen: web1: Erstellen: ./web/ Bände: - ../code:/opt/web/code web2: Erstellen: ./web/ Bände: - ../code:/opt/web/code ** Hinweis: Das Definieren eines Mount-Volumes über die Volumes der obersten Ebene und das Referenzieren davon aus der Volume-Liste jedes Dienstes ersetzt volumes_from in früheren Versionen des Compose-Dateiformats. Version: "3" Leistungen: db: Bild: db Bände: - Datenvolumen:/var/lib/db Sicherung: Bild: Backup-Service Bände: - Datenvolumen:/var/lib/backup/data Bände: Datenvolumen: Befehl Überschreibt den Standardbefehl, der beim Starten des Containers ausgeführt wird. Befehl: bundle exec thin -p 3000 Der Befehl kann auch eine Liste ähnlich einem Dockerfile sein: Befehl: ["bundle", "exec", "thin", "-p", "3000"] Links Link zu einem Container in einem anderen Dienst. Bitte geben Sie sowohl den Dienstnamen als auch den Linkalias (SERVICE:ALIAS) oder nur den Dienstnamen an. Webseite: Links: -db -db:Datenbank - Redis Im aktuellen Webdienstcontainer können Sie über die verknüpfte Datenbank des DB-Dienstalias auf die Datenbankanwendung im DB-Container zugreifen. Wenn kein Alias angegeben ist, können Sie direkt über den Dienstnamen darauf zugreifen. Für die Verknüpfung ist es nicht erforderlich, dass die Kommunikation zwischen Diensten aktiviert ist. Standardmäßig kann jeder Dienst jeden anderen Dienst über den Namen dieses Dienstes erreichen. (Tatsächlich wird die Kommunikation zwischen Containern durch Festlegen der Domänennamenauflösung von /etc/hosts erreicht. Daher können Sie den Dienstalias verwenden, um eine Verknüpfung mit den Diensten anderer Container herzustellen, genau wie Sie localhost in der Anwendung verwenden, vorausgesetzt, dass mehrere Dienstcontainer in einem Netzwerk geroutet und verbunden werden können.) Links können auch eine ähnliche Rolle wie depends_on spielen, d. h. sie können die Abhängigkeiten zwischen Diensten definieren und so die Reihenfolge bestimmen, in der Dienste gestartet werden. externe_links Verlinken Sie Container außerhalb von docker-compose.yml, auch Container, die nicht von Compose verwaltet werden. Das Parameterformat ähnelt Links. externe_links: - redis_1 - project_db_1:mysql - project_db_1:postgresql exponieren Der Port wird zwar angezeigt, ist aber nicht dem Hostcomputer zugeordnet und ist nur für den verbundenen Dienst zugänglich. exponieren: - "3000" - "8000" Häfen Portinformationen offenlegen. ** Hinweis: Beim Zuordnen von Ports im Format HOST:CONTAINER erhalten Sie möglicherweise falsche Ergebnisse, wenn der von Ihnen verwendete Container-Port kleiner als 60 ist, da YAML das Zahlenformat xx:yy als Sexagesimalwert analysiert. Es wird daher empfohlen, das Zeichenfolgenformat zu verwenden. Einfache Kurzform: Häfen: - "3000" - "3000-3005" - "8000:8000" - „9090-9091:8080-8081“ - „49100:22“ – „127.0.0.1:8001:8001“ – „127.0.0.1:5000-5010:5000-5010“ - „6060:6060/udp“ Die Langformsyntax der Ports in v3.2 ermöglicht die Konfiguration zusätzlicher Felder, die nicht in der Kurzform ausgedrückt werden können. Häfen: - Ziel: 80 veröffentlicht: 8080 Protokoll: TCP Modus: Host Ziel: der Port im Container Neustart „Nein“ ist die Standardneustartrichtlinie, die den Container unter keinen Umständen neu startet. Wenn „immer“ angegeben ist, wird der Container immer neu gestartet. Bei einem Fehler wird der Container neu gestartet, wenn der Exitcode einen Fehler anzeigt. Neustart: "nein" Neustart: immer Neustart: bei Fehler Neustart: sofern nicht gestoppt Umfeld Umgebungsvariablen hinzufügen. Sie können entweder ein Array oder ein Wörterbuch verwenden. Alle Booleschen Werte (true, false, yes, no) müssen in Anführungszeichen gesetzt werden, um sicherzustellen, dass sie vom YML-Parser nicht in „True“ oder „False“ umgewandelt werden. Umfeld: RACK_ENV: Entwicklung ANZEIGEN: 'wahr' SESSION_SECRET: Umfeld: - RACK_ENV=Entwicklung - SHOW=true -SESSION_SECRET ** Hinweis: Wenn Ihr Dienst die Build-Option angibt, funktionieren Umgebungsvariablen, die während des Build-Prozesses über die Umgebung definiert wurden, nicht. Die Unteroption „Build Args“ wird zum Definieren von Umgebungsvariablen zur Build-Zeit verwendet. pid pid: "Host" DNS DNS: 8.8.8.8 DNS: - 8.8.8.8 - 9.9.9.9 Dies ist das Ende dieses Artikels über die Installation und den Schnellstart des Docker-Compose-Tutorials. Weitere Informationen zur Installation und Verwendung von Docker-Compose finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Zusammenfassung des Wissens zu MySQL-Sperren
>>: Beispielcode zur Implementierung von Hintergrundtransparenz und undurchsichtigem Text mit CSS3
Als ich kürzlich an CSS-Schnittstellen arbeitete,...
SQL-Anweisung DROP-TRIGGER WENN EXISTIERT sys_men...
Für viele HTML-Neulinge ist die Tabelle <table...
Inhaltsverzeichnis Warum brauchen wir Docker? Bei...
Inhaltsverzeichnis 1. Einfügen 2. Aktualisierung ...
Vorwort Vergessene Passwörter sind ein Problem, d...
1. Einführung in Animate.css Animate.css ist eine...
Wenn Sie einige Microsoft-Dokumente mit LibreOffi...
Frage: In einigen Browsern, wie zum Beispiel im K...
Die Verwendung der MySQL Master-Slave-Replikation...
React entstand als internes Projekt bei Facebook....
Bei der tatsächlichen Arbeit oder bei Interviews ...
Inhaltsverzeichnis 1. Schematische Darstellung de...
Da das Problem ziemlich plötzlich auftrat und das...
Vorne geschrieben Kürzlich berichtete mir ein Les...