2016-09-10 3 views
2

Я ищу, чтобы начать создавать надлежащие изолированные среды для веб-приложений django. Мое первое желание - использовать Docker. Кроме того, обычно рекомендуется использовать virtualenv с любым проектом python для выделения зависимостей.DevOps Простая настройка

virtualenv все еще необходим, если я изолирую проекты через изображения Docker?

ответ

2

Если ваш контейнер Docker относительно долговечен или меняются зависимости проекта, по-прежнему стоит использовать виртуальную среду Python. Помимо (относительно) выделения зависимостей кодовой базы от других проектов и базовой системы (и, в частности, проекта в данном состоянии), она позволяет определить определенную меру, определяющую состояние требований в данный момент времени.

Например, скажем, что вы делаете образ Docker для своего приложения Django сегодня и в конечном итоге используете его в течение следующих трех недель. Считаете ли вы, что ваш файл requirements.txt изменяется между ними сейчас? Можете ли вы представить себе сценарий, в котором вы публикуете горячую ссылку с изменениями окружающей среды?

По состоянию на Python 3.3, виртуальный окр является STDLIB, что означает, что очень дешево использовать, так что я бы продолжать использовать его, только в случае, если контейнер Docker не так располагаемый, как вы изначально планировали. Иными словами, даже если ваш конвейер Docker-image достаточно зрелый, и версия Python и зависимостей «предварительно испечена», это такие плохие плоды, которые явно не нужны, стоит придерживаться лучших практик.

+0

Каким образом виртуальный менеджер помогает мне в изменении зависимостей больше, чем в отсутствии? – johnharris85

+0

Обеспечивая хорошую изоляцию и декларативное управление зависимостями. Если вы сделаете новый образ Docker для каждого изменения зависимости (например, some_dependency 0.1-> 0.2 или, что более важно, с удалением пакета), и убедитесь, что путь вашего Python вашего скрипта будет следовать только по вашим пути. Но это не так, как я это делаю на практике, и virtualenv упрощает эти небольшие гарантии. Я имею в виду, можно просто пропустить Docker и использовать LXC, но мы говорим в оттенках удобства. –

+0

virtualenv - это отделить разрозненные приложения. Если каждый контейнер для докеров - вещь, в виртуальном праве нет смысла? то есть. MyDjangoApp никогда не понадобится изолированное дерево зависимостей внутри контейнера MyDjangoApp. –

0

Нет, действительно, если каждый Python/Django собирается жить в своем собственном контейнере.