Представьте себе, что каждый раз, когда вы хотели задать вопрос или ответить на вопрос о переполнении стека, вам нужно было загрузить исходный код для Chrome и перекомпилировать его из исходного кода. Это очевидно занимает много времени; и иногда в сети или на удаленном сервере происходит сбой, и загрузка источника завершается неудачно; и на самом деле это не Chrome, это ваша личная вилка, поэтому вам нужно либо повторно вводить пароль GitHub каждый раз, когда вы его запускаете, либо сохранять этот пароль где-нибудь. Таким образом, вы этого не делаете, вы компилируете приложение один раз, а затем запускаете скомпилированный двоичный файл.
Docker выглядит так: изображение - это автономный объект, который содержит приложение, его язык выполнения, и все его зависимости. Вы можете просто docker run
запустить его, и он запустится без необходимости извлекать код или связываться с удаленным сервером.
Недостатком этого является то, что вам нужно перестраивать образ всякий раз, когда вы меняете код. В любом случае это довольно обычная процедура для различных распространенных языковых сред (C, C ++, Java, Go, Rust, Javascript через Typescript или Webpack), и это шаг вашей системы непрерывной интеграции (автоматической сборки) можно сделать довольно просто. Обычной практикой является создание нового образа при каждом коммите в вашей системе исходного кода и развертывание только встроенного автономного образа.
Стоит также отметить, что Docker - это относительно новая технология, и нет Требование использовать его. Если у вас есть рабочий процесс, основанный на использовании такого инструмента, как Ansible или Chef, для развертывания языковой среды выполнения в производственных системах, используется интерпретированный язык, который не требует этапа сборки (Python, Ruby, обычный Javascript) и напрямую извлекает исходный код из системы управления версиями, вы можете использовать его, если он работает.