Docker-Server‑Einrichtung
Datenbank‑Server mit einzelnen Befehlen starten
Docker Server Setup
Historische Anmerkung: Dies ist ein Referenzbeispiel aus dem Jahr 2015 für die lokale Entwicklung. Es hilft, den alten Workflow zu verstehen, sollte aber nicht als aktuelle Produktions‑Empfehlung angesehen werden. Moderne Docker‑Compose‑Dateien, benutzerdefinierte Netzwerke, festgelegte Image‑Versionen, Authentifizierung, Secrets und geprüfte Update‑Automatisierung sind heute sicherere Vorgaben.
Für wen ist dieser Leitfaden gedacht?
- Hast du jemals eine Anwendung mit einer „Wegwerf‑“Datenbank testen wollen?
- Ein verdächtiger Code‑Base übernommen? Möchtest du keinen Zugriff auf deine bestehende Datenbank teilen?
- Arbeitest du mit sicherheitskritischen Kunden? Riskiere keine Kontamination! Nutze Container und kontrolliere die Datenpersistenz!
- Kannst du deine Entwicklungsumgebung nicht auf die neueste Datenbankversion aktualisieren, weil deine Altanwendungen von einer 12 Jahre alten MySQL‑Version abhängen?
Lass dich von diesen Gründen nie wieder aufhalten!
Schnellzugriff auf 1‑Zeilen‑Befehle
Dieser Artikel stellt Ein‑Zeilen‑Befehle bereit, um einige der beliebtesten Datenbanken zu starten, darunter:
Hinweis: Diese Befehle wurden als Schnelllösungen für die lokale Entwicklung geschrieben. Wenn du sie für die Produktion anpasst, füge zuerst Authentifizierung, Secrets‑Management, Backups, Netzwerk‑Policies, festgelegte Image‑Versionen und einen Upgrade‑Plan hinzu.
Fortgeschrittene Docker‑Nutzer: Wenn du mit
docker-composevertraut bist, möchtest du die unten stehenden Shell‑Befehle eventuell in deinedocker-compose.yml‑Dateien übernehmen.
Postgres‑Server
Starte einen Container und nenne ihn
pg-localhost
# Store db files on a local path, outside the containermkdir -p $HOME/.postgres-data
docker run \ --name pg-localhost \ -p 127.0.0.1:5432:5432 \ -e POSTGRES_PASSWORD=password \ --restart unless-stopped \ -it \ --shm-size=256mb \ postgres:16-alpine \ postgres -c 'listen_addresses=*' \ -c 'password_encryption=scram-sha-256' \ -c 'shared_memory_type=sysv' \ -c 'shared_buffers=256MB' \ -c 'max_connections=200'Passe die Befehlszeilenoptionen nach Bedarf an. (Die PostgreSQL‑Daemon‑Argumente folgen unmittelbar nach dem Docker‑Image‑Namen
postgres:16-alpine. Siehepostgres -c 'listen_addresses=*'...)
Greife als PostgreSQL‑Benutzer auf die
psql‑Eingabeaufforderung zu
docker exec --user postgres -it pg-localhost psqlGreife als Root auf die Shell des Containers zu
docker exec -it pg-localhost bashHinweis: Der obige Befehl verwendet die offiziellen Alpine‑Linux‑Basisimages. Es handelt sich nicht um deine übliche Debian‑Umgebung.
Um das Debian/Ubuntu‑Basisimage zu nutzen, ersetze
postgres:12-alpinedurchpostgres:12.
MongoDB Server
mkdir -p $HOME/.mongodb/data
docker run -d \ --name mongodb \ --restart on-failure:5 \ -p 127.0.0.1:27017:27017 \ -v $HOME/.mongodb:/data \ mongo:7 \ bash -c 'mongod --bind_ip 0.0.0.0'Jetzt, wo der Server läuft, prüfe, dass deine Daten in $HOME/.mongodb liegen, mit:
ls -lach $HOME/.mongodbVerbinde dich mit dem Server über das CLI‑Tool mongosh. (Falls du es nicht installiert hast, siehe unten.)
#> Mit Standard‑Argumenten:mongoshUnd du solltest etwa Folgendes sehen:

Mongo‑CLI‑Tools einrichten
Mit brew & OSX
brew tap mongodb/brewbrew install mongodb-community-shellMySQL‑Server
WARNUNG: ÄNDERE DAS PASSWORT IN
MYSQL_ROOT_PASSWORDUNTEN.
mkdir -p $HOME/.mysql
docker run -d \ -v $HOME/.mysql:/var/lib/mysql \ -p 127.0.0.1:3306:3306 \ --name mysql-$USER \ -e MYSQL_DATABASE=$USER \ -e MYSQL_ROOT_HOST='172.*.*.*' \ -e MYSQL_ROOT_PASSWORD='p@ssw0rd' \ mysql/mysql-server:8ElasticSearch‑Server
mkdir -p $HOME/.elastic
docker run -d \ --name elastic \ -p 127.0.0.1:9200:9200 \ -p 127.0.0.1:9300:9300 \ -v $HOME/.elastic:/data \ docker.elastic.co/elasticsearch/elasticsearch:8.15.5 bash -c 'elasticsearch --cluster.name elastic_cluster --node.name elastic01 --path.data /data/elastic-data --path.logs /data/elastic-logs 'Sicherheitshinweise
HINWEIS: Die Option
-p 127.0.0.1:27017:27017verhindert den Zugriff auf deine Instanz, außer vom localhost‑Netzwerk des Docker‑Servers. Um die veröffentlichten Ports zu öffnen, entferne das lokale IP‑Präfix, damit externer Zugriff möglich ist:-p 27017:27017. Stelle sicher, dass du die erforderlichen Sicherheitsvorkehrungen getroffen hast.
Empfehlung: Nutze stets ein Port‑Scanning‑Tool (wie nmap / masscan), um deine Netzwerkkonfiguration zu verifizieren (von einem separaten System in einem anderen Netzwerk).
Jetzt, da du die Befehle zum Starten deiner Datenbank‑Server hast, besteht der nächste Schritt darin, deine Anwendung als Docker‑Image zu paketieren. Teil 2 geht unten weiter:
Verpacken einer NodeJS‑Web‑App
- Lege eine leere Datei namens
Dockerfileim Projekt‑Root an. - (Optional, empfohlen) Füge eine
.dockerignorehinzu, die .gitignore‑Regeln verwendet, um große, nicht‑essenzielle Pfade auszuschließen. Standardmäßig werden alle Projektdateien einbezogen.
Erstelle ein Dockerfile im Root deines Apps
# Beispiel für NodeJSFROM node:22EXPOSE 3000COPY . /app/WORKDIR /appRUN apt-get update && apt-get dist-upgrade -yqqRUN ["npm", "install"]
# Überschreibbarer BefehlCMD ["npm", "start"]Es ist einfacher, zu zeigen, wie man das Dockerfile verwendet, und die Ergebnisse über die Konsole zu demonstrieren (siehe Befehle unten).
Im Terminal cd in dein Projektverzeichnis und führe den folgenden build‑Befehl jedes Mal aus, wenn du Änderungen bereitstellst – oder das OS bzw. die Env‑Konfiguration ändern/aktualisieren möchtest.
docker build -t app-name-here .Referenz wichtiger Docker‑Befehle
Docker‑Image bauen
docker build -t app-name-here .Web‑App erstellen/ausführen mit Verbindungen zu DB‑Servern
docker network create app-localdocker network connect app-local mongodbdocker network connect app-local elasticdocker run -d --name webapp01 --network app-local -p 3000:3000 app-name-hereInteraktiv ausführen (nicht im Hintergrund, im Terminal)
docker run -it --name webapp01 --network app-local -p 3000:3000 app-name-here bashContainer‑Instanz oder Image löschen
Wichtig: Alle Daten, die nicht auf einem gemounteten Volume‑Pfad liegen, gehen verloren!!
# Image löschendocker rmi -f app-name-heredocker rm -f webapp01# jetzt das `docker run…` von oben erneut ausführen# Beispiel: Beende deine DB‑Instanzen oben mit:docker rm -f mongo elastic