Compare commits

..

4 commits

Author SHA1 Message Date
Frank Engel
a074365c5e Folien aktualisiert: ex12a Slide kompakter 2026-08-05 12:43:41 +02:00
Frank Engel
4d12b4c116 Folien aktualisiert: ex12a Slide ergänzt 2026-08-05 12:38:11 +02:00
Frank Engel
cd0dd94d4c Merge branch 'ex12a-containerfile-steps' 2026-08-05 12:37:43 +02:00
Frank Engel
dd1d905371 ex12a: Containerfile Schritt für Schritt aufbauen
hello.sh, Containerfile (Referenz) und commands.txt
mit allen 6 Schritten inkl. Layer-Bonus.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-05 12:35:36 +02:00
4 changed files with 92 additions and 0 deletions

Binary file not shown.

View file

@ -0,0 +1,12 @@
FROM debian:12
RUN apt-get update && apt-get install -y curl
WORKDIR /app
COPY hello.sh .
RUN chmod +x hello.sh
ENV NAME=Trainee
CMD ["./hello.sh"]

View file

@ -0,0 +1,75 @@
# Exercise 12a — Build a Containerfile step by step
#
# Start with an empty Containerfile and add one instruction at a time.
# After each step: podman build -t myapp:latest .
# Then inspect the result before moving on.
cd listings/exercises/ex12a-containerfile-steps/
# -----------------------------------------------------------------------
# Step 1 — Base image
# -----------------------------------------------------------------------
# Containerfile:
# FROM debian:12
podman build -t myapp:latest .
podman images myapp:latest # ~121 MB
# -----------------------------------------------------------------------
# Step 2 — Install software (creates a new layer)
# -----------------------------------------------------------------------
# Add to Containerfile:
# RUN apt-get update && apt-get install -y curl
podman build -t myapp:latest .
podman images myapp:latest # ~159 MB — layer is visible
# -----------------------------------------------------------------------
# Step 3 — Working directory
# -----------------------------------------------------------------------
# Add to Containerfile:
# WORKDIR /app
podman build -t myapp:latest .
podman run --rm myapp:latest pwd # prints /app
# -----------------------------------------------------------------------
# Step 4 — Copy your script into the image
# -----------------------------------------------------------------------
# Add to Containerfile:
# COPY hello.sh .
# RUN chmod +x hello.sh
podman build -t myapp:latest .
podman run --rm myapp:latest ls -la # hello.sh is there
# -----------------------------------------------------------------------
# Step 5 — Environment variable
# -----------------------------------------------------------------------
# Add to Containerfile:
# ENV NAME=Trainee
podman build -t myapp:latest .
podman run --rm myapp:latest env | grep NAME
# -----------------------------------------------------------------------
# Step 6 — Start command
# -----------------------------------------------------------------------
# Add to Containerfile:
# CMD ["./hello.sh"]
podman build -t myapp:latest .
podman run --rm myapp:latest # uses ENV NAME=Trainee
podman run --rm -e NAME=Frank myapp:latest # override at runtime
# -----------------------------------------------------------------------
# Bonus: layers — chained vs. separate RUN
# -----------------------------------------------------------------------
# Two separate RUN = two layers:
# RUN apt-get update
# RUN apt-get install -y curl
#
# One chained RUN = one layer:
# RUN apt-get update && apt-get install -y curl
podman inspect myapp:latest --format '{{len .RootFS.Layers}} layers'

View file

@ -0,0 +1,5 @@
#!/bin/bash
echo "Hello, ${NAME:-World}!"
echo "Hostname: $(hostname)"
echo "Date: $(date)"
curl --version | head -1