In Docker, ARG and ENV are used to define environment variables. The ARG instruction defines variables that users can pass to the builder at build-time. Unlike ENV (Environment Variables), values do not persist in the final image and are not available to the container once it is running.
- Build-Time Only: Variables defined with are only accessible during the image creation process (e.g., within or commands).
- Command Line Overrides: You can pass or override values using the flag with the command.
- Default Values: You can specify a default value in the Dockerfile (e.g., ) which is used if no value is passed during the build.
- Layer Visibility: While they don't persist at runtime, values are visible in the image's history via , so they should never be used for secrets like passwords or API keys.
- Version Management: Specifying versions for base images (e.g., ) or package installations.
- Build Customization: Enabling or disabling specific features or configurations based on the build environment (e.g., dev vs. prod).
- Metadata: Storing build-specific information like build dates or commit hashes as labels.
- Stage Local: An is only available in the build stage where it is defined. In multi-stage builds
, you must re-declare the in each stage if you need to use it there. - Global Scope: An placed before the instruction is in the global scope and can be used to parameterize the command, but it must be re-declared after to be used in later instructions.