Compare commits
4 commits
fix-ex12-c
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a074365c5e | ||
|
|
4d12b4c116 | ||
|
|
cd0dd94d4c | ||
|
|
dd1d905371 |
4 changed files with 92 additions and 0 deletions
Binary file not shown.
12
listings/exercises/ex12a-containerfile-steps/Containerfile
Normal file
12
listings/exercises/ex12a-containerfile-steps/Containerfile
Normal 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"]
|
||||||
75
listings/exercises/ex12a-containerfile-steps/commands.txt
Normal file
75
listings/exercises/ex12a-containerfile-steps/commands.txt
Normal 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'
|
||||||
5
listings/exercises/ex12a-containerfile-steps/hello.sh
Normal file
5
listings/exercises/ex12a-containerfile-steps/hello.sh
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/bash
|
||||||
|
echo "Hello, ${NAME:-World}!"
|
||||||
|
echo "Hostname: $(hostname)"
|
||||||
|
echo "Date: $(date)"
|
||||||
|
curl --version | head -1
|
||||||
Loading…
Add table
Reference in a new issue