Ich weiß nicht, was ich falsch mache, aber ich kann einfach nicht docker-compose up
das neueste Image aus unserer Registrierung verwenden, ohne zuerst die alten Container vollständig aus dem System zu entfernen. Es sieht so aus, als würde Compose das zuvor gestartete Image verwenden, obwohl Docker-Compose Pull ein neueres Image abgerufen hat.
Ich habe mir angesehen, wie man Docker-Compose dazu bringt, Container immer aus frischen Bildern neu zu erstellen. Das schien meinem Problem ähnlich zu sein, aber keine der dort bereitgestellten Lösungen funktioniert für mich, da ich nach einer Lösung suche, die ich auf dem Produktionsserver verwenden kann, und dort nicht alle Container entfernen möchte, bevor ich sie starte wieder (möglicher Datenverlust?). Ich möchte nur komponieren, um die neue Version der geänderten Bilder zu erkennen, sie abzurufen und dann die Dienste mit diesen neuen Bildern neu zu starten.
Ich habe dafür ein einfaches Testprojekt erstellt, bei dem das einzige Ziel darin besteht, eine Version nr zu erhalten, die bei jedem neuen Build erhöht wird. Die Version nr wird angezeigt, wenn ich zu dem erstellten nginx-Server navigiere (dies funktioniert lokal wie erwartet).
Docker-Version: 1.11.2 Docker-Compose-Version: 1.7.1 Betriebssystem: Getestet unter CentOS 7 und OS X 10.10 mit Docker-Toolbox
Meine docker-compose.yml:
version: '2'
services:
application:
image: ourprivate.docker.reg:5000/ourcompany/buildchaintest:0.1.8-dev
volumes:
- /var/www/html
tty: true
nginx:
build: nginx
ports:
- "80:80"
volumes_from:
- application
volumes:
- ./logs/nginx/:/var/log/nginx
php:
container_name: buildchaintest_php_1
build: php-fpm
expose:
- "9000"
volumes_from:
- application
volumes:
- ./logs/php-fpm/:/var/www/logs
Auf unserem Jenkins-Server führe ich Folgendes aus, um das Image zu erstellen und zu markieren
cd $WORKSPACE && PROJECT_VERSION=$(cat VERSION)-dev
/usr/local/bin/docker-compose rm -f
/usr/local/bin/docker-compose build
docker tag ourprivate.docker.reg:5000/ourcompany/buildchaintest ourprivate.docker.reg:5000/ourcompany/buildchaintest:$PROJECT_VERSION
docker push ourprivate.docker.reg:5000/ourcompany/buildchaintest
Dies scheint das zu tun, was es sein soll, da ich jedes Mal, wenn der Build abgeschlossen ist und die Version nr gestoßen wurde, ein neues Versions-Tag in unserem Repository erhalte.
Wenn ich jetzt renne
docker-compose pull && docker-compose -f docker-compose.yml up -d
In einem Ordner auf meinem Computer, in dem der Inhalt nur die Datei docker-compose.yml und die zum Erstellen der Nginx- und PHP-Dienste erforderlichen Docker-Dateien enthält, ist die Ausgabe, die ich erhalte, nicht die neueste Versionsnummer, die in der Registrierung markiert wurde oder angezeigt wird in der docker-compose.yml (0.1.8), aber die Version davor, die 0.1.7 ist. Die Ausgabe des Pull-Befehls würde jedoch darauf hindeuten, dass eine neue Version des Bildes abgerufen wurde:
Pulling application (ourprivate.docker.reg:5000/ourcompany/buildchaintest:latest)...
latest: Pulling from ourcompany/buildchaintest
Digest: sha256:8f7a06203005ff932799fe89e7756cd21719cccb9099b7898af2399414bfe62a
Status: Downloaded newer image for docker.locotech.fi:5000/locotech/buildchaintest:0.1.8-dev
Nur wenn ich renne
docker-compose stop && docker-compose rm -f
Führen Sie dann den docker-compose up
Befehl aus, damit die neue Version wie erwartet auf dem Bildschirm angezeigt wird.
Ist das beabsichtigtes Verhalten von Docker-Compose? dh sollte ich immer eine machen, docker-compose rm -f
bevor ich up
wieder laufe , auch auf Produktionsservern? Oder mache ich hier etwas gegen den Strich, weshalb es nicht funktioniert?
Das Ziel ist es, unseren Build-Prozess zu erstellen und markierte Versionen der in einer docker-compose.yml benötigten Images zu erstellen, diese in unsere private Registrierung zu verschieben und dann für den "Release to Production-Step" einfach das Docker-Compose zu kopieren. yml zum Produktionsserver und führen Sie a docker-compose pull && docker-compose -f docker-compose.yml up -d
aus, damit das neue Image in der Produktion gestartet wird. Wenn jemand Tipps dazu hat oder auf ein Best Practices-Tutorial für diese Art von Setup verweisen kann, wäre dies ebenfalls sehr willkommen.
docker-compose up -d --force-recreate
hat nicht funktioniert?