DanLevy.net

Docker-Server‑Einrichtung

Datenbank‑Server mit einzelnen Befehlen starten

Hero image for Docker-Server‑Einrichtung

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?

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:

PostgreSQL icon Postgres

MongoDB icon MongoDB

MySQL icon MySQL

Elastic icon ElasticSearch

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-compose vertraut bist, möchtest du die unten stehenden Shell‑Befehle eventuell in deine docker-compose.yml‑Dateien übernehmen.

Postgres‑Server

Starte einen Container und nenne ihn pg-localhost

Terminal window
# Store db files on a local path, outside the container
mkdir -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. Siehe postgres -c 'listen_addresses=*'...)

Greife als PostgreSQL‑Benutzer auf die psql‑Eingabeaufforderung zu

Terminal window
docker exec --user postgres -it pg-localhost psql

Greife als Root auf die Shell des Containers zu

Terminal window
docker exec -it pg-localhost bash

Hinweis: 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-alpine durch postgres:12.

MongoDB Server

Terminal window
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:

Terminal window
ls -lach $HOME/.mongodb

Verbinde dich mit dem Server über das CLI‑Tool mongosh. (Falls du es nicht installiert hast, siehe unten.)

Terminal window
#> Mit Standard‑Argumenten:
mongosh

Und du solltest etwa Folgendes sehen:

Vorschau der Mongo‑Shell‑Ausgabe

Mongo‑CLI‑Tools einrichten

Mit brew & OSX
Terminal window
brew tap mongodb/brew
brew install mongodb-community-shell

MySQL‑Server

WARNUNG: ÄNDERE DAS PASSWORT IN MYSQL_ROOT_PASSWORD UNTEN.

Terminal window
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:8

ElasticSearch‑Server

Terminal window
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:27017 verhindert 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

  1. Lege eine leere Datei namens Dockerfile im Projekt‑Root an.
  2. (Optional, empfohlen) Füge eine .dockerignore hinzu, 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 NodeJS
FROM node:22
EXPOSE 3000
COPY . /app/
WORKDIR /app
RUN apt-get update && apt-get dist-upgrade -yqq
RUN ["npm", "install"]
# Überschreibbarer Befehl
CMD ["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.

Terminal window
docker build -t app-name-here .

Referenz wichtiger Docker‑Befehle

Docker‑Image bauen

Terminal window
docker build -t app-name-here .

Web‑App erstellen/ausführen mit Verbindungen zu DB‑Servern

Terminal window
docker network create app-local
docker network connect app-local mongodb
docker network connect app-local elastic
docker run -d --name webapp01 --network app-local -p 3000:3000 app-name-here

Interaktiv ausführen (nicht im Hintergrund, im Terminal)

Terminal window
docker run -it --name webapp01 --network app-local -p 3000:3000 app-name-here bash

Container‑Instanz oder Image löschen

Wichtig: Alle Daten, die nicht auf einem gemounteten Volume‑Pfad liegen, gehen verloren!!

Terminal window
# Image löschen
docker rmi -f app-name-here
docker rm -f webapp01
# jetzt das `docker run…` von oben erneut ausführen
# Beispiel: Beende deine DB‑Instanzen oben mit:
docker rm -f mongo elastic