Ich habe viel Zeit damit verbracht, ein gutes Muster zu finden und zu überlegen, wie man am besten erklären kann, was mit dieser Feature-Unterstützung passiert. Mir wurde klar, dass der beste Weg, es zu erklären, folgendermaßen ist...
- Dockerfile: Sieht nur Dateien unter seinem eigenen relativen Pfad
- Kontext: Ein Ort im "Raum", wo die Dateien, die Sie teilen möchten, und Ihr Dockerfile kopiert werden
Also, mit diesen Worten, hier ist ein Beispiel für das Dockerfile, das eine Datei namens start.sh
wiederverwenden muss
Dockerfile
Es wird immer aus seinem relativen Pfad laden, wobei das aktuelle Verzeichnis selbst als lokaler Bezugspunkt für die von Ihnen angegebenen Pfade fungiert.
COPY start.sh /runtime/start.sh
Dateien
Unter Berücksichtigung dieser Idee können wir daran denken, mehrere Kopien für die Dockerfiles zu haben, die spezifische Dinge erstellen, aber sie alle benötigen Zugriff auf die start.sh
.
./all-services/
/start.sh
/service-X/Dockerfile
/service-Y/Dockerfile
/service-Z/Dockerfile
./docker-compose.yaml
Unter Berücksichtigung dieser Struktur und der oben genannten Dateien, hier ist ein docker-compose.yml
docker-compose.yaml
- In diesem Beispiel ist Ihr gemeinsames Kontextverzeichnis das Verzeichnis runtime.
- Gleicher mentaler Ansatz hier, denken Sie daran, dass alle Dateien unter diesem Verzeichnis in den sogenannten Kontext verschoben werden.
- Geben Sie einfach das Dockerfile an, das Sie in dasselbe Verzeichnis kopieren möchten. Dies können Sie mit
dockerfile
angeben.
- Das Verzeichnis, in dem Ihr Hauptinhalt liegt, ist der tatsächliche Kontext, der festgelegt werden soll.
Das docker-compose.yml
sieht wie folgt aus
version: "3.3"
services:
service-A
build:
context: ./all-service
dockerfile: ./service-A/Dockerfile
service-B
build:
context: ./all-service
dockerfile: ./service-B/Dockerfile
service-C
build:
context: ./all-service
dockerfile: ./service-C/Dockerfile
all-service
wird als Kontext festgelegt, die gemeinsame Datei start.sh
wird ebenfalls dorthin kopiert, sowie das von jedem dockerfile
spezifizierte Dockerfile.
- Jeder wird auf seine eigene Weise gebaut und teilt die Startdatei!