Docker ist eine Container-Dienst, die für das ausführen von apps in der eigenen Umgebung auf jedem system. Es soll Plattform-Agnostiker”, aber wenn Sie benötigen, um Daten zu speichern auf einer Festplatte, dass kann man mit Lautstärke-und bind-mounts.
Die Verwendung einer Externen Datenbank oder Objekt Speichern
Dies ist die Methode, dass die meisten Menschen empfehlen. Speichern des Status als Datei auf der Festplatte ist nicht im Einklang mit Docker ‘ s Modell, und während es getan werden kann, ist es immer am besten zu betrachten—glauben Sie wirklich brauchen?
Zum Beispiel, sagen wir, du betreibst eine web-Anwendung im Andockfenster muss zum speichern der Daten in einer Datenbank. Es macht nicht viel Sinn, führen Sie MySQL in ein Docker-container, so sollte man stattdessen bereitstellen von MySQL auf RDS oder EC2 und haben die Docker-container verbinden Sie Sie direkt. Die Docker-container ist komplett zustandslos wie es sein soll; es können gestoppt, gestartet, oder schlagen Sie mit einem Vorschlaghammer, und es kann ein neuer gedreht werden, bis an seiner Stelle, alle, ohne Daten Verlust. Mit IAM-Berechtigungen, dies erreicht werden kann, sicher ganz in Ihrer VPC.
Wenn Sie wirklich brauchen, um Dateien speichern, wie Nutzer hochgeladene Fotos und Videos, die Sie wirklich verwenden sollten, AWS Simple Storage Service (S3). Es ist viel billiger als EBS-basierten Speicher, und viel billiger im Vergleich zu EFS-Speicherung, welche Ihre primäre Wahl für ein shared-filesystem für ECS Container. Statt der Speicherung einer Datei auf der Festplatte, die Sie hochladen, direkt an der S3. Diese Methode erlaubt auch die Ausführung zusätzlicher Verarbeitung Verwendung von Lambda-Funktionen, die auf die hochgeladenen Inhalte, wie z.B. das komprimieren von Bildern oder Videos, die Sie speichern können eine Menge Bandbreite Kosten.
Einfache Lösung: Mounten Sie ein Laufwerk zu einem Container
Docker hat zwei Möglichkeiten, das zu erreichen Persistenz: volume mountet, und-bind-mounts. Bind-mounts erlauben die Befestigung einer bestimmten Position auf dem server-Dateisystem an einen Ort innerhalb des Docker-container. Dieser link kann nur gelesen werden, sondern auch Lesen/schreiben, wo die Dateien geschrieben, die von der Docker-container wird beibehalten, auf der Festplatte.
Sie können für die Bindung von einzelnen host-Verzeichnisse zu Ziel-Verzeichnisse in den Docker-container, die nützlich ist, aber die empfohlene Methode ist das erstellen einer neuen “volume” managed by Docker. Dies macht es einfacher, sichern, transfer, und teilen Sie volumes zwischen verschiedenen Instanzen von Containern.
Ein Wort der Vorsicht: Wenn Sie keinen direkten Zugriff auf den server läuft bist du Andockfenster auf, wie es der Fall mit verwalteten Installationen, wie Sie AWS Elastic Container Service (ECS) und Kubernetes, werden Sie wollen, vorsichtig zu sein mit diesem. Es ist gebunden an die server des eigenen Speicherplatz, die in der Regel kurzlebig. Sie wollen eine externe Datei speichern, wie EFS-eine echte Persistenz mit ECS (dazu später mehr).
Jedoch binden und das volume mountet nicht gut funktionieren, wenn Sie einfach mit Docker zur Ausführung einer einfachen installation einer app auf Ihrem server, oder wollen einfach nur schnelle Persistenz für Testzwecke. So oder so, die Methode der Erstellung von volumes wird die gleiche, unabhängig davon, wo Sie sind, speichern Sie Sie.
Sie können erstellen Sie ein neues volume aus der Kommandozeile mit:
Andockfenster volume erstellen nginx-config
Und dann, wenn Sie gehen, zu laufen, Ihre Docker-container verknüpfen, um das Ziel in den container mit der –mount-Flagge:
docker run-d
–name devtest
–mount source=nginx-config,target=/etc/nginx
nginx:neueste
Wenn Sie docker inspect <name>, du wirst sehen, die Lautstärke finden Sie unter der Abschnitt “Mounts”.
Wenn Sie Docker Compose, das setup ist so einfach wie gut. Fügen Sie einfach ein Volumen-Eintrag für jeden container service, den Sie haben, ordnen Sie einen volume-Namen zu einem Ort, den der Gast. Sie müssen auch eine Liste der volumes in einer top-level-volumes key für das Komponieren zur Bestimmung.
version: “3.0”
Dienstleistungen:
web:
Bild: nginx:neueste
Anschlüsse:
– “80:80”
Bände:
– nginx-config:/etc/nginx/
Bände:
nginx-config:
Dadurch wird die Lautstärke automatisch für das Komponieren. Wenn Sie möchten, verwenden Sie einen vorgefertigten Volumen von außerhalb Verfassen, geben Sie extern: true in die volume-Konfiguration:
Bände:
cms-content:
externe: true
Wenn Sie möchten, statt einfach einen bind-mount und nicht die Mühe, mit Mengen, geben Sie einfach einen Pfad durch den Namen der volume-name, und verzichten auf die Festlegung der volume-Namen.
version: “3.0”
Dienstleistungen:
web:
Bild: nginx:neueste
Anschlüsse:
– “80:80”
Bände:
– /Andockfenster/nginx-config/:/etc/nginx/
Sie können Lesen Andockfenster vollständige Dokumentation zur Verwendung von volumes mit Komponieren, wenn Ihr Anwendungsfall erfordert etwas spezifischer als diese.
Verwaltete Bereitstellungen Verwenden Sie eine Freigegebene Datei System (AWS EFS)
Wenn Sie die Bereitstellung auf AWS ECS, werden Sie nicht in der Lage, eine normale binden oder das volume mounten, weil Sie nach dem Herunterfahren des Containers, werden Sie wahrscheinlich nicht auf der selben Maschine das nächste mal, wenn Sie starten Sie es, Sieg über den Zweck der Persistenz.
Jedoch können Sie immer noch erreichen Persistenz mit anderen AWS-service—Elastische File System (EFS). EFS ist eine gemeinsame Netzwerk-Datei-system. Können Sie Sie mounten auf mehrere EC2-Servern und die Daten, auf die zugegriffen wird, synchronisiert über alle von Ihnen. Zum Beispiel könnten Sie diese verwenden, um host den statischen Inhalt und code für Ihre website, dann führen alle Ihre worker-Knoten auf ECS zu handhaben die eigentliche portion von Ihrem Inhalt. Dieser wird um die Beschränkung der nicht die Speicherung von Daten auf der Festplatte, weil das volume mount gebunden ist, um ein externes Laufwerk, dass weiterhin über ECS-Bereitstellungen.
Um dies einzurichten, benötigen Sie zum erstellen eines EFS-Dateisystems. Dies ist Recht einfach und kann getan werden, aus dem EFS-Management-Konsole, aber Sie wollen, notieren Sie sich die Laufwerk-ID, die Sie benötigen werden, um die Arbeit mit der Band.
Wenn Sie brauchen, um manuell hinzufügen oder ändern von Dateien im EFS-Volumen, können Sie Sie mounten, um jede EC2-Instanz. Sie benötigen zur Installation von amazon-efs-utils:
sudo yum install -y-amazon-efs-utils
Und dann hängen Sie es mit dem folgenden Befehl mit der ID:
sudo mount-t efs fs-12345678:/ /mnt/efs
Auf diese Weise können Sie direkt anzeigen und Bearbeiten Sie die Inhalte des EFS-Volumen, als ob es eine andere Festplatte auf Ihrem server. Werden Sie wollen, stellen Sie sicher, dass nfs-utils installiert für dies alles um richtig zu funktionieren.
Nächsten, Sie ‘ ll haben, um hook up ECS zu diesem Band. Erstellen Sie eine neue Aufgabendefinition in der ECS-Management-Konsole. Scrollen Sie nach unten und wählen Sie “Konfiguration Per JSON”. Dann ersetzen Sie die leere “Volumen” – Schlüssel mit dem folgenden JSON, indem die “Familie” – Taste, die am Ende:
“Volumen”: [
{
“name”: “efs-demo”,
“host”: null,
“dockerVolumeConfiguration”: {
“autoprovision”: true,
“labels”: null,
“scope”: “shared”,
“driver”: “local”,
“driverOpts”: {
“type”: “nfs”,
“device”: “:/”,
“o”: “addr=fs-XXXXXX.efs.us-east-1.amazonaws.com,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport”
}
}
}
],
“Familie”:”nginx”,
Ersetzen fs-XXXXXX.efs.us-east-1.amazonaws.com mit Ihrem EFS-volume real-Adresse. Sie sollten sehen, eine neue Band:
Sie können diese in Ihren container-definition als mount-Punkt. Wählen Sie “Add Container” (oder eine vorhandene Bearbeiten), und unter “Storage And Logging” wählen Sie das neu erstellte volume, und geben Sie einen Behälter Pfad.
Speichern Sie die Aufgabenstellung, und wenn Sie starten ein cluster mit dieser neuen definition, die alle die Container werden in der Lage, auf Ihre gemeinsam genutzten Dateisystem.