In the previous posts, already we have explained the below topics. Refer those links to understand this topic from basics.
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
Docker ONBUILD Command Explained with Examples
Docker ARG vs ENV Command Differences Explained in Detail
Docker CMD & ENTRYPOINT Differences Explained in Detail
Docker ARG vs ENV Command Differences Explained in Detail
Docker ARG vs 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.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 understand Docker ARG vs ENV Command instructions 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
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 vs ENV command instructions.. Going forward, we will play more with docker tool.
If you are interested in learning, Request you to go through the below recommended tutorial.
DevOps Full Course Tutorial for Beginners - DevOps Free Training Online
Docker Full Course Tutorial for Beginners - Docker Free Training Online
Kubernetes Full Course Tutorial for Beginners - Kubernetes Free Training Online
Ansible Full Course Tutorial for Beginners - Ansible Free Training Online
Openstack Full Course Tutorial for Beginners - Openstack Free Training Online
Stay connected with us on social networking sites, Thank you.
0 Comments