Ich verwende Docker-Compose , um meine Entwicklungsumgebung zu erstellen. Ich möchte ein bestimmtes Bild erstellen, weiß aber nicht, wie ich einen Namen für dieses Bild festlegen soll.
wildfly:
build: /path/to/dir/Dockerfile
container_name: wildfly_server
ports:
- 9990:9990
- 80:8080
environment:
- MYSQL_HOST=mysql_server
- MONGO_HOST=mongo_server
- ELASTIC_HOST=elasticsearch_server
volumes:
- /Volumes/CaseSensitive/development/wildfly/deployments/:/opt/jboss/wildfly/standalone/deployments/
links:
- mysql:mysql_server
- mongo:mongo_server
- elasticsearch:elasticsearch_server
Wenn ich etwas ausführe, ist docker-compose
alles in Ordnung, aber ich bekomme einen zufälligen Namen für das neue Bild. Ist es möglich, dem Build-Image einen Namen zu geben?
docker
docker-compose
orchestration
Robert
quelle
quelle
<project>_<service>
, wie<service>
in diesem Beispiel,wildfly
und das Projekt verwendet standardmäßig den Verzeichnisnamen, in dem Sie sich befinden. Sie können dies mit-p
oder derCOMPOSE_PROJECT_NAME
Umgebungsvariablen ändern . Es gibt keine Möglichkeit, einen benutzerdefinierten Bildnamen festzulegen.COMPOSE_PROJECT_NAME=x
in.env
und Ihre Container genannt werden{x}_{service}_{#}
Antworten:
Für das Docker-Compose-Dateiformat der Version 2 können Sie ein Image für einen Dienst erstellen und mit Tags versehen und dann dasselbe erstellte Image für einen anderen Dienst verwenden.
In meinem Fall möchte ich einen elastischen Suchcluster mit zwei Knoten einrichten. Beide müssen dasselbe Image verwenden, sind jedoch so konfiguriert, dass sie unterschiedlich ausgeführt werden. Ich möchte auch mein eigenes benutzerdefiniertes Elasticsearch-Image aus meiner eigenen Docker-Datei erstellen. Das habe ich also gemacht (docker-compose.yml):
Sie können sehen, dass ich in der ersten Dienstdefinition "es-master" die Option "build" verwende, um ein Image aus der Docker-Datei in ./elasticsearch zu erstellen. Ich beschrifte das Bild mit dem Namen "porter / elasticsearch" mit der Option "image". Ich verweise dann auf dieses erstellte Image in der "es-node" -Dienstdefinition mit der Option "image" und verwende auch ein "abhängiges_on", um sicherzustellen, dass der andere Container "es-master" zuerst erstellt und ausgeführt wird.
quelle
container_name:
wirklich geholfen.build
und schließenimage
sich gegenseitig aus. Ich erhalte die Meldung "Dienst xxx hat sowohl ein Image als auch einen Erstellungspfad angegeben. Ein Service kann entweder als Image erstellt werden oder ein vorhandenes Image verwenden, nicht beide."depends_on
verwendet den Namen des Dienstes in derdoker-compose
Datei, ohne dass ein Containername angegeben werden muss. Sogar das Beispiel zeigt esdepends_on: es-master
und nichtdepends_on: es_master
Wie pro Docker-compose 1.6.0 :
So
docker-compose.yml
wäre es auchDocker-Compose aktualisieren
quelle
Option 1: Hinweis auf den Standardbildnamen
Der Name des von Docker-Compose generierten Bildes hängt standardmäßig vom Ordnernamen ab. Sie können ihn jedoch mithilfe des folgenden
--project-name
Arguments überschreiben :Option 2: Angeben des Bildnamens
Sobald Docker-Compose 1.6.0 veröffentlicht ist, können Sie einen expliziten Bildnamen angeben
build:
und festlegenimage:
(siehe Antwort von arulraj.net ).Option 3: Bild aus Container erstellen
Ein dritter besteht darin, ein Bild aus dem Container zu erstellen:
quelle
--project-name
scheint nicht mehr akzeptiert zu werden. Verwenden von 1.23.2Abhängig von Ihrem Anwendungsfall können Sie ein bereits erstelltes Bild verwenden und dessen Namen in angeben
docker-compose
.Wir haben einen Produktionsanwendungsfall, in dem unser CI-Server ein benanntes Docker-Image erstellt. (
docker build -t <specific_image_name> .
). Sobald das benannte Bild angegeben ist,docker-compose
baut es immer auf dem spezifischen Bild auf. Dies ermöglicht verschiedene Möglichkeiten:1- Sie können sicherstellen, dass
docker-compose
Sie immer die neueste Version dieses bestimmten Images verwenden , wo immer Sie Ihr Image ausführen .2- Sie können mehrere benannte Bilder in Ihrer
docker-compose
Datei angeben und sie im vorherigen Erstellungsschritt automatisch verkabeln lassen.Wenn Ihr Image bereits erstellt wurde, können Sie das Image mit benennen
docker-compose
. Entfernenbuild
und angebenimage:
quelle
Nachdem Sie Ihr Image erstellt haben, gehen Sie wie folgt vor:
docker tag <image id> mynewtag:version
Danach sehen Sie, dass Ihr Bild nicht mehr benannt ist,
<none>
wenn Sie gehendocker images
.quelle
docker build -t mytag:version .