Docker ARG vs ENV Command Differences Explained in Detail

dockerfile, dockerfile arg vs env, arg vs env, docker command, docker arg, docker env, docker arg vs env, docker arg vs env examples, arg vs env differences

This post explains you the detailed differences between Docker ARG and Docker ENV command instructions available in dockerfile. Also refer the earlier post that explains the differences between Docker CMD and Docker ENTRYPOINT with examples.

To know more about other dockerfile instructions, refer this link Dockerfile Instructions Explained with Examples.

Docker ARG and Docker ENV command instructions are used to set environment variables. Both used for same purposes, but actually not same in functionality. So we must be aware of which instruction to be used for our requirement.
Docker ARG vs ENV Command Differences Explained in Detail

Syntax:
Example of ARG Instruction:
ARG JAVA_HOME=/opt/java
ARG app_version=2.0
Example of ENV Instruction:
ENV JAVA_HOME=/opt/java
ENV app_version=2.0
ENV JAVA_HOME=${JAVA_HOME}
These variables will be set only during the image build process if it is specified with ARG instruction, But when you specify the same variables with ENV instruction, variables will be available during the image build also after running the docker container. It is completely based on our requirement which one to be used in dockerfile.

Let's take an example to explain this better.

Assume that, we want to set variables "JAVA_HOME" and "JAVA_VERSION" with the values "/opt/java" and "2.0" respectively.

Here is a dockerfile instructions, in which we have used ARG instruction for JAVA_HOME and ENV instruction for JAVA_VERSION for setting a variables.
FROM docker.io/centos
MAINTAINER Devops Engineer
ARG JAVA_HOME=/opt/java
ENV JAVA_VERSION=2.0
Image has already built using "docker build ." command and created a image tag "learnitguide.net/variabletest" using "docker tag" command.

Testing the Containers
[ads-post]
Lets run a container with newly created image (learnitguide.net/variabletest) and check the variables set or not.
[root@docker-host ~]# docker run -d -it --name test_container1 learnitguide.net/variabletest
8f298a841fb9a205dd2ca7b946cd0150e89227edc92e4d0b7b95d314381da22a
[root@docker-host ~]# docker exec -it test_container1 /bin/bash
[root@8f298a841fb9 /]# env
HOSTNAME=8f298a841fb9
TERM=xterm
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
JAVA_VERSION=2.0
SHLVL=1
HOME=/root
_=/usr/bin/env
[root@8f298a841fb9 /]#
Above output of the container clearly shows that only "JAVA_VERSION" is set to "2.0" which was specified with ENV instruction. But "JAVA_HOME" is not set as a variable within container which was specified with ARG instruction.

So Docker ARG can be used for temporary variable assignment and Docker ENV can be used for permanent variable assignment.

Hope you have got an idea about Docker ARG and ENV command instructions.. Going forward, we will play more with docker tool. Keep practicing and have fun.

Also refer other articles,

What is Docker - Get Started from Basics - Docker Tutorial
What is Container, What is Docker on Container - Get Started
How to Install Docker on CentOS 7 / RHEL 7
Docker Images Explained with Examples - Docker Tutorial
Dockerfile Instructions Explained with Examples
How to Write Dockerfile To Build Your Own Docker Images
Docker ONBUILD Command Explained with Examples
Docker ARG vs ENV Command Differences Explained in Detail
Docker CMD & ENTRYPOINT Differences Explained in Detail

Support Us: Share with your friends and groups.

Stay connected with us on social networking sites, Thank you.
YouTube | Facebook | Twitter | Pinterest | Rss
Keywords : dockerfile, docker file, docker file arg, dockerfile env, arg vs env, docker command, docker arg, docker env, docker arg vs env, docker arg vs env examples, dockerfile arg and env differences, dockerfile arg vs env examples, difference arg vs env, writing dockerfiles, dockerfile examples, dockerfile arg examples, dockerfile env examples, dockerfile arg arguments, dockerfile env arguments, dockerfile arg explained, dockerfile env explained, docker arg command, docker arg command examples, docker env command, docker env command examples
June 28, 2018

Post a Comment

[disqus][facebook][blogger]

Contact Form

Name

Email *

Message *

Powered by Blogger.
Javascript DisablePlease Enable Javascript To See All Widget