Multiple ways to create docker variables with examples
This tutorial explains Setting environment variables in Docker
There are two types of setting variables
- Docker ARG directive ARG directions are used to create Variables and assign them with default values.
These are also called build variables. This will be available during the Docker build, Not available at Runtime and container.
- Docker Env directive These are environment variables and are available during docker container execution also called runtime variables
How to set environment variables in Docker build
You can create a variable using ARG
command
Here is a syntax to declare a variable
ARG VARIABLE_NAME [= VARIABLE_VALUE]
VARIABLE_VALUE is an optional value,
Here is an example that added to DockerFile
FROM ubuntu
ARG environment=development
RUN echo $environment
This variable can be set using --build-arg
during the docker image build.
docker build -t testcontainer --build-arg environment=production .
Docker builds the image using the variable passed from the command line.
If you pass a variable value from the command line, It overrides the default value. If the variable is passed from the command line, the Default value assigned consider.
What is the default scope of variables declared with Docker ARG? Variables declared with ARG have scopes. Variables are accessed from the line where it is declared to the end of the file. It is not used in other Dockerfile.
You can pass multiple variables with this command as given below
docker build -t testcontainer --build-arg environment=production -build-arg test=false .
Docker Environment variables
Environment variables are runtime variables that are used during Docker image container execution. these are also runtime variables
Declare these variables using the ENV command directive in Dockerfile
ENV VARIABLE_NAME VARIABLE_VALUE
You can pass these variables using the command line with the -e
option for docker run
docker run -e MYSQL_USERNAME=root -e MYSQL_PASSWORD=root
This approach has the following disadvantages
- complete the command shown to the user during the ps command execution
- Variables are not secure and are shown to the user with these commands
The first approach can be avoided using variables set using the below command
MYSQL_USERNAME=root MYSQL_PASSWORD=root docker run -e MYSQL_USERNAME -e MYSQL_PASSWORD
The second approach to secure environment files, move all the environment variables to secure the env file Created a config.env
file that contains all variables
MYSQL_USERNAME=root
MYSQL_PASSWORD=root
you can pass this file using the --env-file
option to the docker run command
docker run --env-file config.env
What is an ARG command in Docker?
ARG Directive is used to define the variables with default values, These are available during the docker build.
You can change or override its value using the docker build command with the argument --build-arg
docker build -t testcontainer --build-arg environment=production .
What is an ENV command in Docker?
ENV command is used to pass environment variables to Dockerfile. These are available during runtime with the docker run.
You can change or override its value using the docker run command with argument -e
docker build -t testcontainer -e environment=production .
Difference between ARG and ENV
Both are used to store the variable values during the docker build and execution process.
ARG command | ENV command |
---|---|
store the variables for Docker Build | available to pass during docker image execution |
Override default value with --build-arg using command line | Override default value with -e using command line |
It works docker build command | works with docker run command |