The Overhead of Docker Run [Code Snippet]
To test the overhead of running a Docker container, the author made a script that compares execution times for various docker run options vs not using Docker at all. Come check it out!
Join the DZone community and get the full member experience.Join For Free
Evolve your approach to Application Performance Monitoring by adopting five best practices that are outlined and explored in this e-book, brought to you in partnership with BMC.
We use Docker a lot. Like a lot, lot. While we love it for a lot of things, it still has a lot of room for improvement. One of those areas that could use improvement is the startup/teardown time of running a container.
To test the overhead of running a Docker container, I made a script that compares execution times for various docker run options vs not using Docker at all. The script that I’m running is a simple hello world shell script that consists of the following:
echo "Hello World!"
The base Docker image is the official Alpine Linux image plus the script above.
Server Version: 1.12.2-rc1
Running: ./hello.sh avg: 5.897752ms Running: docker run treeder/hello:sh avg: 988.098391ms Running: docker run — rm treeder/hello:sh avg: 999.637832ms Running: docker start -a reuse avg: 986.875089ms
(Note: looks like using Ubuntu as a base image is slightly faster than Alpine, in the 10–50ms range).
Server Version: 1.12.1
Running: ./hello.sh avg: 2.139666ms Running: docker run treeder/hello:sh avg: 391.171656ms Running: docker run — rm treeder/hello:sh avg: 396.385453ms Running: docker start -a reuse each: 340.793602ms
As you can see from the results above, using Docker adds nearly a full second to the execution time of our script on Mac and ~390ms on Linux (~175x slower than running the script without Docker).
Now, this may not be much of an issue if your script/application runs for a long period of time, but it is certainly an issue if you run short-lived programs.
Feel free to try running the script on your system and share the results! You can find everything you need here:https://github.com/treeder/dockers/tree/master/hello
Just clone that repo, cd into the hello directory and run:
go run time.go
Published at DZone with permission of Travis Reeder. See the original article here.
Opinions expressed by DZone contributors are their own.