2016-09-01 2 views
1

Imaging folgende Szenario jeder in der Produktion stapeln:So erstellen und herunterladen Bild von Docker Behälter läuft in Docker Swarm

  • wir Elasticsearch als Docker-Container ausgeführt werden, einige Daten indizieren möchten wir Backup-Daten alle 3 Monate
  • bedeutet, dass wir Docker Bild aus dem laufenden Container erstellen und in die Registrierung hochladen müssen.

Haben keine Hinweise gefunden, wie man das in der Dokumentation macht.

Antwort

0

Sie können docker commit verwenden, um einen Container in ein Bild zu verwandeln. Aber davon würde ich in diesem Fall abraten. Es ist besser, eine Art Volumen für Ihre Daten zu verwenden und dies separat zu sichern.

+0

sind sicher, dass Sie in Schwarm verfügbar begehen? – abovesun

+0

Entschuldigung, meine Schuld - ich muss auch die Kopfzeile Ihrer Frage lesen. Ich habe wenig bis keine Erfahrung mit Swarm, aber ich denke, es ist immer noch eine gute Idee, die tatsächlichen Daten außerhalb des Containers zu halten. – Martin

1

Mit der Schwarminterpretation können Ihre einzelnen Container/Aufgaben innerhalb des Dienstes neu gestartet werden (z. B. wenn ein Knotenfehler vorliegt oder Ihre Anwendung abstürzt). Für persistente Daten würde ich ein externes Volume verwenden und dieses Volume direkt sichern. Wenn Sie dies in Schwarm tun möchten, können Sie die Container verpflichten es schafft durch den spezifischen Behälter lokalisieren und mit den Standardbefehlen zu begehen:

$ docker service create --name test-commit busybox /bin/sh -c 'while true; do ls/>/tmp/ls.`date +%T`.log; sleep 30; done' 
2vbnf5s39vs0jfc53at3ko1cg 

$ docker service ls 
ID   NAME   REPLICAS IMAGE COMMAND 
2vbnf5s39vs0 test-commit 1/1  busybox /bin/sh -c while true; do ls/>/tmp/ls.`date +%T`.log; sleep 30; done 

$ docker service ps test-commit 
ID       NAME   IMAGE NODE    DESIRED STATE CURRENT STATE   ERROR 
eu28da042s9tdwlddzk6adkan test-commit.1 busybox docker-demo Running  Running 9 seconds ago 

$ docker ps 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS     NAMES 
545e7fe6f5bd  busybox:latest  "/bin/sh -c 'while tr" 28 seconds ago  Up 26 seconds        test-commit.1.eu28da042s9tdwlddzk6adkan 

$ docker diff test-commit.1.eu28da042s9tdwlddzk6adkan 
C /tmp 
A /tmp/ls.12:02:13.log 
A /tmp/ls.12:02:43.log 

$ docker commit test-commit.1.eu28da042s9tdwlddzk6adkan 
test-commit:1 
sha256:2255b476b307b69cf20afbc7c46fae43f05c92a70f1525aa5d745c26a406dc90 

$ docker images | grep test-commit 
test-commit       1     2255b476b307  9 seconds ago  1.093 MB 
+0

nur um zu klären, indem Sie 'Docker commit' Ich muss zuerst an bestimmte Schwarm Node anmelden? Ergebnis des Commits wird ein neues Image des 'test-commit' Containers für diesen bestimmten Knoten sein? – abovesun

+0

Ja, Sie müssten dann "docker save" in einem tar oder 'docker push' auf einem Registrierungsserver speichern, um es anderweitig zu verwenden. – BMitch

+0

Dies ist ein bisschen Nachteil Ansatz für Schwarm und andere Container Orchestrierung Lösungen, ich bin nicht auf bestimmte Knoten, wenn ich 'Docker-Service erstellen erstellen - Replikate 10', aber wenn ich mich verpflichten will, muss ich spezifisch zu finden Knoten, auf denen diese 10 Replikate ausgeführt werden – abovesun