Eradicator в Docker ты создаёшь контейнер который работает как баржа. Тоесть, есть Докер(баржа) и контейнеры(код). Докер помогает решать проблемы с зависимостью системы и устанавливает правильные версии либ под систему.
venv окружение это отдельная среда чтоб ты не скачивал либы в global. Условно тебе нужен pyQT исключительно для этого проекта, поэтому ты ставишь venv, в который потом грузишь либы специально под этот проект.
В общем venv решает проблему либ между разными проектами, чтоб у тебя не было конфликтов разных версий либ и прочее.
А Docker нужен чтоб легко устанавливать и разворачивать проекты на свою локальную машину. Он оптимизирует процесс доставки и сам решает проблемы зависимостей.