Grundlagen von Cloud und Containern

FROM python:slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]

Welche Kombination gibt für das obige Dockerfile richtig an, welcher Befehl beim Bauen des Images mit docker build und welcher beim Starten eines Containers mit docker run ausgeführt wird?

  1. ABeim build: pip install; beim run: python app.py
  2. BBeim build: pip install und python app.py; beim run: python app.py
  3. CBeim build: nichts; beim run: pip install und python app.py
Antwort und Erläuterung anzeigen

Antwort: A. Beim build: pip install; beim run: python app.py

RUN führt einen Befehl beim Bauen des Images aus und speichert das Ergebnis (hier die installierten Bibliotheken) als neue Schicht im Image. CMD legt nur als Teil der Image-Konfiguration den Standardbefehl fest, der beim Start eines Containers ausgeführt wird; beim Build wird er nicht ausgeführt. Die Bibliotheken werden daher einmal beim Build installiert, und python app.py läuft bei jedem Start eines Containers. Steht in docker run hinter dem Imagenamen ein Befehl, ersetzt er den Inhalt von CMD.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen von Cloud und Containern

  1. Das aus dem obigen Dockerfile gebaute Image pinger wird mit docker run pinger example.com gestartet. Welcher Befehl wird im Container ausgeführt?
  2. Aus dem Image nginx, einem Webserver, der auf Port 80 lauscht, wird mit dem obigen Befehl ein Container gestartet. Die IP-Adresse des Hosts sei 192.0.2.10, und es gebe keine Einschränkungen etwa durch eine Firewall. Mit welcher URL erreicht man diesen Webserver vom Browser eines anderen PCs im selben Netzwerk?
  3. Das obige Dockerfile (B) ist aus Dockerfile (A) entstanden, in dem RUN npm ci nach COPY . . stand, indem die Reihenfolge so geändert wurde, dass zuerst nur die Abhängigkeitsdateien kopiert werden. npm ci dauert 120 Sekunden, npm run build 30 Sekunden und COPY . . 2 Sekunden; die Zeit der übrigen Anweisungen ist vernachlässigbar. Das Image wird 20-mal am Tag neu gebaut, wobei sich jeweils nur der Quellcode unter src ändert (package.json und package-lock.json bleiben unverändert). Um wie viel ist die gesamte Build-Zeit pro Tag bei B kürzer als bei A, wenn der Cache des vorherigen Builds genutzt werden kann?
  4. Welche Beschreibung von benannten Volumes und Bind-Mounts, mit denen in Docker die von einem Container geschriebenen Daten erhalten bleiben, ist richtig?
  5. Ein Image wird mit der Angabe registry.example.com/team/web:1.4 geholt (pull). Welche Kombination gibt die Bedeutung der einzelnen Teile dieser Angabe richtig an?