Docker-Compose-Tutorial: Installation und Schnellstart

Docker-Compose-Tutorial: Installation und Schnellstart

Das Tutorial basiert auf der neuesten Compose-Version 3 unter Ubuntu
Referenz: https://docs.docker.com/compose/overview/

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

Version des Compose-Dateiformats Docker-Version
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3.0 1.13.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2.0 1.10.0+
1.0 1.9.1.+

Ä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.
Deinstallieren Sie die alte Version (falls sie noch nicht installiert ist, können Sie diesen Schritt überspringen):

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

Zwei 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-Installation

sudo pip installiere Docker-Compose

5. Docker-Compose-Dateistruktur und Beispiele

Docker-Compose-Dateistruktur

docker-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-Compose

Verwenden 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 ).
Installieren Sie Python-Abhängigkeiten.
Legen Sie den Standardbefehl des Containers auf python app.py fest.

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.
Webcontainer:
* Erstellen Sie das Image mithilfe der Docker-Datei im übergeordneten Verzeichnis der aktuellen Datei docker-compose.yml (compose_test/Dockerfile).
* Ordnen Sie den freigegebenen Port 5000 im Container dem Port 5000 auf dem Host zu. Wir verwenden den Standardport 5000 des Flask-Webservers.
Redis-Container:
* Der Redis-Dienst verwendet das offizielle Redis-Image in der Version 3.0.7, das von Docker Hub heruntergeladen wurde.

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.
Die Funktion zum Mounten des physischen Hostverzeichnisses im Container kann über das Schlüsselwort „volumes“ erreicht werden (gleichzeitig wird die COPY-Anweisung in der Docker-Datei gelöscht, und der Code muss beim Erstellen des Images nicht in das Image gepackt werden. Stattdessen wird er dynamisch über Volumes gemountet, und der Container und der physische Host teilen sich das Datenvolume):

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 Dienstkonfigurationsreferenz

Eine 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.
Wenn Sie sowohl „Image“ als auch „Build“ angeben, erstellt Compose das Container-Image über das durch „Build“ angegebene Verzeichnis und der Name des erstellten Images ist der im „Image“ angegebene Image-Name und das Tag.

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.
Wenn der angegebene Wert ein relativer Pfad ist, wird er als relativ zum Speicherort der aktuellen Compose-Datei interpretiert. Dieses Verzeichnis ist auch der Kontext, der beim Erstellen des Images an den Docker-Daemon gesendet wird.

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.
Geben Sie zunächst die im Dockerfile zu verwendenden Parameter an:

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.
Sie können einen relativen Pfad auf dem Host bereitstellen, der relativ zum Verzeichnis der aktuell verwendeten Compose-Konfigurationsdatei erweitert wird. Relative Pfade sollten immer mit . oder . beginnen.

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.
Es können nur interne Ports als Parameter angegeben werden

exponieren:
 - "3000"
 - "8000"

Häfen

Portinformationen offenlegen.
Häufig verwendete einfache Formate: Die Verwendung des Formats Host:Container (HOST:CONTAINER) oder die einfache Angabe des Ports des Containers (der Host wählt den Port nach dem Zufallsprinzip aus) sind alle in Ordnung.

** 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.
Langform:

Häfen:
 - Ziel: 80
  veröffentlicht: 8080
  Protokoll: TCP
  Modus: Host

Ziel: der Port im Container
veröffentlicht: der Port des physischen Hosts
Protokoll: Portprotokoll (TCP oder UDP)
Modus: Host und Ingress, zwei allgemeine Modi. Host wird zum Veröffentlichen von Host-Ports auf jedem Knoten verwendet, Ingress wird für Ports im Swarm-Modus mit Lastausgleich verwendet.

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.
Einer Variablen mit einem Namen wird auf dem Compose-Host automatisch ein Wert zugewiesen. Dadurch kann das Durchsickern unnötiger Daten verhindert 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
Stellen Sie den PID-Modus auf Host-PID-Modus ein. Dadurch wird ein gemeinsamer PID-Adressraum zwischen dem Container und dem Host-Betriebssystem geöffnet. Mit diesem Flag gestartete Container können auf andere Container im Namespace des Bare Metal zugreifen und diese bearbeiten und umgekehrt. Das heißt, Container, bei denen diese Option aktiviert ist, können über die Prozess-ID aufeinander zugreifen und einander bedienen.

pid: "Host"

DNS
Konfigurieren Sie den DNS-Server. Kann ein einzelner Wert oder eine Liste sein.

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:
  • Tutorial zur Ein-Klick-Installation von Docker und Docker-Compose (unterstützt online und offline)
  • Docker Compose-Installationsmethoden in verschiedenen Umgebungen
  • Zwei einfachste Möglichkeiten zur Installation von Docker-Compose
  • Detailliertes Beispiel zur Installation von Docker und Docker-Compose
  • Detaillierte Schritte zur Installation und Einrichtung von Docker-compose
  • Praktische Hinweise zur Installation von Jenkins mit Docker-Compose

<<:  Zusammenfassung des Wissens zu MySQL-Sperren

>>:  Beispielcode zur Implementierung von Hintergrundtransparenz und undurchsichtigem Text mit CSS3

Artikel empfehlen

Detaillierte Erklärung der CSS-Zeilenhöhe und -Höhe

Als ich kürzlich an CSS-Schnittstellen arbeitete,...

Implementierungscode für den MySQL-Protokolltrigger

SQL-Anweisung DROP-TRIGGER WENN EXISTIERT sys_men...

Tipps zum Festlegen von HTML-Tabellenrändern

Für viele HTML-Neulinge ist die Tabelle <table...

So stellen Sie Go-Webanwendungen mit Docker bereit

Inhaltsverzeichnis Warum brauchen wir Docker? Bei...

MySQL-Daten einfügen, aktualisieren und löschen Details

Inhaltsverzeichnis 1. Einfügen 2. Aktualisierung ...

Anleitung zum Zurücksetzen des MySQL/MariaDB-Root-Passworts

Vorwort Vergessene Passwörter sind ein Problem, d...

CSS zum Erzielen eines schnellen und coolen Schüttelanimationseffekts

1. Einführung in Animate.css Animate.css ist eine...

Codeanalyse synchroner und asynchroner SetState-Probleme in React

React entstand als internes Projekt bei Facebook....

11 Möglichkeiten, Duplikate aus JS-Arrays zu entfernen

Bei der tatsächlichen Arbeit oder bei Interviews ...