Wie organisieren Sie die Dockerfiles eines Projekts, wenn Sie ein Dockerfile für die Datenbank, eines für den Anwendungsserver usw. haben? Erstellen Sie eine Art Hierarchie im Quellcode? Ein großes Enterprise-Projekt kann doch nicht nur aus einem Dockerfile bestehen?
Antworten
Zu viele Anzeigen?In neueren Versionen (>=1.8.0) von Docker kannst du dies tun
docker build -f Dockerfile.db .
docker build -f Dockerfile.web .
Ein großer Vorteil.
EDIT: Aktualisiere die Versionen gemäß Raksjas Kommentar
EDIT: Kommentar von @vsevolod: Es ist möglich, in VS Code eine Syntaxhervorhebung zu erhalten, indem Sie den Dateien die Erweiterung .Dockerfile geben (anstelle des Namens) z. B. Prod.Dockerfile, Test.Dockerfile usw.
Verwenden Sie docker-compose
und mehrere Dockerfile
in separaten Verzeichnissen
Benennen Sie Ihren
Dockerfile
nicht um inDockerfile.db
oderDockerfile.web
, da dies möglicherweise nicht von Ihrem IDE unterstützt wird und Sie die Syntaxhervorhebung verlieren.
Wie Kingsley Uchnor sagte, können Sie mehrere Dockerfile
haben, eines pro Verzeichnis, das etwas darstellt, das Sie erstellen möchten.
Ich habe gerne einen docker
-Ordner, der jede Anwendung und deren Konfiguration enthält. Hier ist ein Beispiel für die Projektordner-Hierarchie für eine Webanwendung mit einer Datenbank.
docker-compose.yml
docker
web
Dockerfile
db
Dockerfile
docker-compose.yml
Beispiel:
version: '3'
services:
web:
# wird ./docker/web/Dockerfile bauen
build: ./docker/web
ports:
- "5000:5000"
volumes:
- .:/code
db:
# wird ./docker/db/Dockerfile bauen
build: ./docker/db
ports:
- "3306:3306"
redis:
# wird das vorgefertigte Redis-Image von Docker Hub verwenden:
# https://hub.docker.com/_/redis/
image: "redis:alpine"
docker-compose
Befehlszeilen-Beispiel:
# Der folgende Befehl erstellt und startet alle Container im Hintergrund
# unter Verwendung von docker-compose.yml aus dem aktuellen Verzeichnis
docker-compose up -d
# Hilfe aufrufen
docker-compose --help
Falls Sie Dateien aus übergeordneten Verzeichnis(sen) als Teil des Build-Kontexts Ihres Dockerfiles benötigen
Sie können immer noch die obige Lösung verwenden und Ihr Dockerfile
in einem Verzeichnis wie z.B. docker/web/Dockerfile
platzieren, alles was Sie brauchen, ist den Build-Kontext
in Ihrer docker-compose.yml
festzulegen, wie folgt:
version: '3'
services:
web:
build:
context: .
dockerfile: ./docker/web/Dockerfile
ports:
- "5000:5000"
volumes:
- .:/code
Die Dateihierarchie würde so aussehen:
config-on-root.ini
docker-compose.yml
docker
web
Dockerfile
some-other-config.ini
Das ./docker/web/Dockerfile
wird Zugriff auf gewünschte Dateien aus dem Kontext haben, wie folgt:
FROM alpine:latest
COPY config-on-root.ini /
COPY docker/web/some-other-config.ini /
Beachten Sie auch, dass der Build-Kontext alle Dateien des angegebenen Verzeichnisses enthalten wird. Stellen Sie sicher, dass Sie eine .dockerignore
-Datei verwenden, um das Laden unerwünschter großer Dateien oder Verzeichnisse während des Builds zu verhindern und Zeit zu sparen.
Hier sind einige schnelle Befehle von tldr docker-compose. Vergewissern Sie sich, dass Sie sich an die offizielle Dokumentation für weitere Details wenden.
Hinweis des Autors
Diese Antwort ist veraltet. Fig existiert nicht mehr und wurde durch Docker Compose ersetzt. Akzeptierte Antworten können nicht gelöscht werden.
Docker Compose unterstützt den Aufbau einer Projektstruktur. Es ist jetzt einfach, ein Dockerfile in jedem Unterverzeichnis zu unterstützen.
docker-compose.yml
project1
Dockerfile
project2
Dockerfile
Ursprüngliche Antwort
Ich erstelle einfach ein Verzeichnis, das ein Dockerfile für jedes Komponente enthält. Beispiel:
Beim Erstellen der Container einfach den Verzeichnisnamen angeben und Docker wählt das richtige Dockerfile aus.
Fügen Sie eine Abstraktionsschicht hinzu, zum Beispiel eine YAML-Datei wie in diesem Projekt https://github.com/larytet/dockerfile-generator, die so aussieht
centos7:
base: centos:centos7
packager: rpm
install:
- $build_essential_centos
- rpm-build
run:
- $get_release
env:
- $environment_vars
Ein kurzes Python-Skript/Makefile kann alle Dockerdateien aus der Konfigurationsdatei generieren.
- See previous answers
- Weitere Antworten anzeigen