Tools, FAQ, Tutorials:
"shell" Format vs. "exec" Format
What is the differences between "shell" format and "exec" format when writing instructions in Dockerfile for Windows images?
✍: FYIcenter.com
There are several differences between "shell" format and "exec" format
when writing instructions in Dockerfile for Windows images.
1. The "shell" format is simple to use. But it does support well if any argument has a space character, like path name with spaces in it.
2. The "exec" format can protect spaces in arguments, but it uses the JSON array syntax and it is harder to use.
3. When "shell" format is used in a RUN instruction, the specified program will actually be executed with the CMD program. For example:
RUN program arg1 arg2 # Will be executed as: # Powershell -Command program arg1 arg2
4. When "exec" format is used in a RUN instruction, the specified program will actually be executed directly. For example:
RUN ["program", "arg1", "arg2"] # Will be executed as: # program arg1 arg2
Let's watch the build history of a Dockerfile in "exec" format:
C:\fyicenter> type ExecImage FROM openjdk RUN ["PowerShell", "mkdir", "\"C:\\FYI Center\""] COPY ["Hello.java", "C:/FYI Center/Hello.java"] RUN ["javac", "C:\\FYI Center\\Hello.java"] ENTRYPOINT ["java", "-cp", "C:\\FYI Center", "Hello"] C:\fyicenter> docker build --file ExecImage --tag exec . ... C:\fyicenter> docker history exec IMAGE CREATED BY SIZE 2bffa2d267d3 powershell -Command $ErrorActionPreference =… 41kB -- Resulted from ENTRYPOINT ["java", "-cp", "C:\\FYI Center", "Hello"] a30f5dd0735a javac C:\FYI Center\Hello.java 58.7MB -- Resulted from - RUN ["javac", "C:\\FYI Center\\Hello.java"] 3937cb41e4cf powershell -Command $ErrorActionPreference =… 41.1kB -- Resulted from - COPY ["Hello.java", "C:/FYI Center/Hello.java"] d3757bcbd35f PowerShell mkdir "C:\FYI Center" 40.5MB -- Resulted from - RUN ["PowerShell", "mkdir", "\"C:\\FYI Center\""] ...
Now watch the build history of a Dockerfile in "shell" format:
C:\fyicenter> type ShellImage FROM openjdk RUN PowerShell mkdir C:\fyicenter COPY Hello.java C:/fyicenter/Hello.java RUN javac C:\fyicenter\Hello.java ENTRYPOINT java -cp C:\fyicenter Hello C:\fyicenter> docker build --file ShellImage --tag shell . ... C:\fyicenter> docker history shell IMAGE CREATED BY SIZE d818dc169bd2 powershell -Command $ErrorActionPreference =… 41kB -- Resulted from - ENTRYPOINT java -cp C:\fyicenter Hello fdf64e942a8d powershell -Command $ErrorActionPreference =… 58.9MB -- Resulted from - RUN javac C:\fyicenter\Hello.java 719d9171fefc powershell -Command $ErrorActionPreference =… 41.1kB -- Resulted from - COPY Hello.java C:/fyicenter/Hello.java ab736679b461 powershell -Command $ErrorActionPreference =… 40.5MB -- Resulted from - RUN PowerShell mkdir C:\fyicenter ...
Ok, we are able to see the differences between "shell" format and "exec" format used in Dockerfile.
⇒ Use "ENV" Instruction on Windows Image
⇐ Spaces in Path Name on Windows Images
2021-11-30, 635👍, 0💬
Popular Posts:
What's Wrong with "while ($c=fgetc($f)) {}" in PHP? If you are using "while ($c=fgetc($f)) {}" to lo...
What are "*..." and "**..." Wildcard Parameters in Function Definitions? If you want to define a fun...
How to include additional claims in Azure AD v2.0 id_tokens? If you want to include additional claim...
What is EPUB 2.0 Metadata "dc:creator" and "dc:contributor" elements? EPUB 2.0 Metadata "dc:creator"...
How to add an API to an API product for internal testing on the Publisher Portal of an Azure API Man...