# devops / docker / dockerfile
The Recipe of Docker: Dockerfiles
A Dockerfile is like a recipe card 🍰. It tells Docker how to build an image step by step. Each line is an instruction, and Docker reads it from top to bottom to bake your final container image.
Baking the Cake
Think of building an image just like baking a cake. You can't bake it before you add the flour. Docker follows the exact same logical, sequential progression.
🧁 The Cake Recipe
Take flour → Add sugar → Mix → Bake in oven.
🐳 The Dockerfile
FROM ubuntu → RUN apt-get update → COPY code → CMD run app
Dockerfile instructions are strictly case-sensitive! Writing FROM ubuntu ✅ works perfectly, but writing from ubuntu ❌ will fail the build.
Dockerfile Instruction Dictionary
FROM ubuntu:latest LABEL version="1.0" ENV owner="shan" VOLUME ["/data"] WORKDIR /lak COPY AStc /lak ADD dumptar /lak RUN apt update && useradd -ms /bin/bash shan USER shan EXPOSE 8080 CMD ["ping", "8.8.8.8"]
What they do
- FROM
Defines the base image. Every valid Dockerfile must start with this.
- LABEL / ENV
LABELadds metadata (like version).ENVsets persistent environment variables inside the image. - WORKDIR
Sets the default directory for all subsequent commands (like cd).
- COPY / ADD
Both copy files from host to image.
ADDhas extra features like unzipping or downloading from URLs. - RUN
Executes commands during the build time (e.g., installing packages).
- CMD / ENTRYPOINT
Defines the default command to run when the container starts. (Only one CMD is allowed).
Foreground vs Background
A container must have a foreground process to keep running. If there is no foreground process holding the terminal open, the container completes its task and stops immediately.
Foreground Process
The main task. For example, running an Apache or Nginx server directly in the terminal. As long as the server runs, the container lives.
Background Process
Tasks running silently (like a cron job or background logging). If your CMD only starts background tasks, the container will instantly exit.
Building & Pushing Images
Tags are version labels for images (e.g., app:v1). Think of it like saving a file as Essay_v1.docx. If no tag is specified, Docker automatically applies the latest tag.
Build → Save the project on your laptop.
Push → Upload it to Google Drive (Docker Hub).