# Dockerfile ## What is a Dockerfile? Docker builds images automatically by reading the instructions from a Dockerfile which is a text file that contains all commands, in order, needed to build a given image. A Dockerfile adheres to a specific format and set of instructions which you can find at [Dockerfile reference](https://docs.docker.com/engine/reference/builder/). A Docker image consists of read-only layers each of which represents a Dockerfile instruction. The layers are stacked and each one is a delta of the changes from the previous layer. ```Go # syntax=docker/dockerfile:1 FROM ubuntu:22.04 COPY . /app RUN make /app CMD python /app/app.py ``` In the example above, each instruction creates one layer: * FROM creates a layer from the ubuntu:22.04 Docker image. * COPY adds files from your Docker client's current directory. * RUN builds your application with make. * CMD specifies what command to run within the container. # BuildKits BuildKit supports loading frontends dynamically from container images. To use an external Dockerfile frontend, the first line of your Dockerfile needs to set the syntax directive pointing to the specific image you want to use: ``` # syntax=docker/dockerfile:1 ``` # New feature in 1.4 Here-Documents ```GO RUN <