Докер - виртуализация приложения. Приведу пример.
Вы разрабатываете некое веб-приложение на java, и вам его нужно тестировать под java7, java8 и под tomcat 7, tomcat 8.
Вы можете купить 4 компьютера, поставить на них 4 варианта, протестировать. Затем все поставить заново для следующего теста. Неудобно, долго, дорого.
На помощь приходит виртуальная машина - вы можете купить 1 компьютер, на нем завести 4 виртуалки, каждую из них настроить, сохранить образы. После тестирования просто восстанавливаете исходное состояние из образов.
Гораздо дешевле, чем раньше. Но каждая виртуальная машина требует процессоры, память, кучу места на диске под операционку. А ведь отличается по сути всего 2 компонента.
На помощь приходит докер. Один комп, одна операционная система. 4 докер контейнера с нужной версией java и томкат. После тестирования контейнер можно удалить и развернуть заранее подготовленный.
Дешевле и быстрее, чем все вышеперечисленное. Потому что операционка одна, нет лишних расходов на CPU и память. Ужиматься дальше практически некуда.
Конечно у докера есть свои ограничения по применению, но грубо говоря, у вас внутри одной операционки, могут независимо работать несколько приложений, которые при штатной установке разворачиваются таким образом, что не могли бы работать одновременно. А вот два докер-контейнера, внутри которых эти две версии приложения изолируются и не мешают друг другу за небольшими исключениями (например tcp порт).
Виртуализация приложений через докер позволяет избежать dll-hell, изоляция дисковой системы и окружения.
P.S. Пример очень простой и надуманный, так как конкретно java и tomcat можно и без докера просто запустить несколько разных версий на разных портах, но суть вы должны уловить. Докер - виртуализация на уровне файловой системы, самая дешевая виртуализация.