Rakesh Jain
Rakesh Jain

@devops_tech

24 Tweets 28 reads Jul 30, 2023
Mastering Docker File 🐳
A thread explaining everything about a Docker File 👇
📌 Welcome to a thread on mastering Dockerfile! 🚀 In this thread, I'll explain each parameter with an example of a Dockerfile.
Dockerfiles are key to building Docker images, so let's dive in! #Docker #Dockerfile #Containerization
1️⃣ FROM: This sets the base image for your Docker image. It's like the starting point for your container. For example:
FROM ubuntu:20.04
This uses the official Ubuntu 20.04 image as the base.
2️⃣ RUN: Executes commands during the build process. Used to install packages or run any necessary setup tasks. For instance:
RUN apt-get update && apt-get install -y python3
This installs Python 3 in the image.
3️⃣ COPY: Copies files from the host to the container's filesystem. Great for adding application code. Example:
COPY app.py /app/
This copies the 'app.py' file from the host to '/app/' in the container.
4️⃣ WORKDIR: Sets the working directory within the container. Subsequent commands will run from this location. Example:
WORKDIR /app
This sets '/app' as the working directory.
5️⃣ EXPOSE: Specifies the port on which the container will listen. It does not publish the port to the host. Example:
EXPOSE 8080
This exposes port 8080 within the container.
6️⃣ CMD: Defines the default command to run when the container starts. It's often the main process of the app. Example:
CMD ["python3", "app.py"]
This runs 'python3 app.py' when the container starts.
7️⃣ ENV: Sets environment variables within the container. Useful for configuring the application. Example:
ENV DEBUG=True
This sets the 'DEBUG' environment variable to 'True'.
8️⃣ ARG: Defines build-time arguments. They can be passed using the --build-arg flag during image build. Example:
ARG VERSION=latest
This sets the 'VERSION' argument with a default value of 'latest'.
9️⃣ ENTRYPOINT: Similar to CMD, but provides an entry point for d container. The CMD will be arguments to this entry point. Example:
ENTRYPOINT ["python3"]
CMD ["app.py"]
This sets 'python3' as the entry point & 'app.py' as the default argument.
Bonus Time 💰😍
1️⃣ ADD: Similar to COPY, but with added features. It can handle URLs and automatically unpack archives. Example:
ADD https://example[dot]com/app.tar.gz /app/
This fetches 'app.tar.gz' from the web and unpacks it into '/app/'.
2️⃣ VOLUME: Creates a mount point for external volumes. Used to share data between the host and container. Example:
VOLUME /data
This creates a volume named '/data' where data can be persisted outside the container.
3️⃣ USER: Specifies the user to use when running the container. Helps improve security by avoiding running as root. Example:
USER appuser
This sets the user to 'appuser' in the container.
4️⃣ LABEL: Adds metadata to the image in key-value format. Useful for versioning and documenting the image. Example:
LABEL version="1.0" maintainer="John Doe"
This adds version and maintainer labels to the image.
5️⃣ ARG: Similar to ENV, but used during build time only. It doesn't persist in the final image. Example:
ARG BUILD_ENV=production
This sets the 'BUILD_ENV' argument with a default value of 'production'.
6️⃣ ONBUILD: Triggers instructions to be executed when this image is used as a base for another image. Example:
ONBUILD COPY . /app
This copies the current directory's content into '/app' when this image is used as a base.
7️⃣ STOPSIGNAL: Sets the system call signal that will be sent to the container to stop it gracefully. Example:
STOPSIGNAL SIGINT
This sets the SIGINT signal as the stop signal.
8️⃣ HEALTHCHECK: Defines a command to check the container's health. Helps monitor the app's status. Example:
HEALTHCHECK CMD curl -f http://localhost/ || exit 1
This checks if 'http://localhost/' is reachable, failing if it's not.
9️⃣ SHELL: Overrides the default shell used by RUN, CMD, and ENTRYPOINT. Example:
SHELL ["/bin/bash", "-c"]
This sets '/bin/bash -c' as the shell for subsequent commands.
🔟 .dockerignore: Not a parameter, but a crucial file. Works like .gitignore to exclude files from the image. Example:
*.log
node_modules/
This ignores log files and the 'node_modules' directory during the build.
🎉 You're now equipped with more Dockerfile knowledge! These parameters offer greater flexibility and control over your Docker images. Happy containerizing! 🚀 #Docker #Containerization #DevOps #Linux #Automation #Development
Retweet the thread if you find it useful. Thanks!

Loading suggestions...