2016-01-01 2 views
6

Я начал изучать Docker сегодня, и я был в состоянии создать свой первый собственный образ с Python стека на основе ubuntu:14.04 через пару часов, экспериментируя с обоими Dockerfile сборки и путем изменения существующего изображения и сохранения его с помощью команды commit.Правильный рабочий процесс для веб-разработки с Докер

Dockerfile My является следующее:

FROM ubuntu:14.04 
MAINTAINER Davide Zanotti <***@gmail.com> 
ENV DEBIAN_FRONTEND noninteractive 
RUN apt-get update && apt-get install -y \ 
     software-properties-common \ 
     build-essential \ 
     automake \ 
     checkinstall \ 
     git \ 
    && add-apt-repository -y ppa:fkrull/deadsnakes && apt-get update && apt-get install -y python3.5 \ 
    && cd /usr/bin && ln -s python3.5 python \ 
    && apt-get clean && rm -rf /var/lib/apt/lists/* 

До сих пор так хорошо, но теперь я задаюсь вопросом, который должен быть правильный рабочий процесс для веб-разработки с использованием Docker!

Я попробовал пример приложения, построенный Docker с использованием Настой (docker hub, git source), но у меня есть несколько проблем по этому поводу ... приложение поставляется непосредственно в Докер контейнера и ИМО не (по крайней мере, во время разработки!), потому что каждый раз, когда я редактирую код приложения, мне нужно перестроить весь контейнер (правильно?).

То, что я хотел бы получить, - это базовый контейнер с конкретной установкой python и всеми сторонними библиотеками, которые нужны моему приложению (например, драйверам баз данных и т. Д.), И в этом контейнере мое приложение динамически вводится (в идеале через git после развертывания, но, возможно, альтернативным способом при локальном развитии, чтобы ускорить работу).

Итак, как правильно подойти (или ... как вы) к разработке веб-страниц, используя Docker? (Я не нашел ничего полезного в этой теме в официальной документации, а онлайн-статьи выглядят слишком основательно. ИМО ... Мне бы хотелось услышать примеры реальных людей от людей, которые фактически, используя Docker для своих приложений! : P)

+0

Я удалил его, потому что я идиот, и я просто перевернули пользователя/пароль, в конфигурационном файле ... моя установка была права, и теперь его отлично работает ... просто манекен: D – daveoncode

ответ

2

Я собираюсь предложить вам несколько вещей, касающихся вашего вопроса.

В вашем случае, вы можете использовать два варианта:

  1. Да, вы должны восстановить весь контейнер. Чтобы быть более правильным, вам придется перестроить изображение, которое используется для запуска контейнера. Но Docker позволяет вам постепенно наращивать изображение, используя слои, которые похожи на кусочки, лежащие один на один. Это позволяет использовать меньшее количество дискового пространства, и эта операция займет меньше времени (поскольку к изображению добавляются только НОВЫЕ изменения).

Pros: Ваше изображение будет полностью доставить товар - вы можете приготовить и использовать его везде - все, что нужно в комплекте внутри.

Против: Да, вам придется перестроить контейнер. В случае активного процесса разработки, который может быть не таким удобным и гибким для вас.

  1. Вы можете монтировать общие каталоги с вашего хост-компьютера.Я могу порекомендовать вам прочитать это guide, но я также кратко расскажу вам, как это работает - ваши локальные каталоги (например, с вашим кодом) будут «видимыми» внутри вашего контейнера. Приложение, которое должно использовать этот код, будет работать с ним, как с «локальным» кодом, поэтому вам не придется перестраивать контейнер после каждого изменения кода.

Плюсы: Да, это ускоряет процесс разработки - вы можете проверить свой код непосредственно в контейнере.

Против: Это не переносное, судоходное и универсальное решение. Если вы собираетесь использовать этот контейнер на нескольких хостах (например, у вас есть поток с Dev -> Staging -> производственными средами), у вас не будет возможности просто использовать один и тот же вложенный контейнер на этих хостах - вам также придется доставить код на этих узлах, который должен использоваться внутри контейнера.

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

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

Docker не является серебряной пулей - это очень полезно во многих случаях, но есть много других случаев, где вы можете использовать другую, более удобную технологию.

PS. Один пример потока, который я использовал в одном из моих предыдущих проектов, где нам приходилось создавать сложное веб-приложение с балансировщиками нагрузки, интерфейсом, бэкэнд и приложениями баз данных. Мы не использовали общие тонеры Docker - ваши разработчики написали код, передали его Git repo, Дженкинс поймал, что совершил и построил новое изображение, которое было посвящено нашему самодостаточному Docker Registry. Эти изображения были отмечены разными метками, в зависимости от среды, где они должны использоваться (dev, stage, prod), и они были развернуты в «своей» среде с помощью системы управления конфигурацией.

PSS. Для всего потока я также могу рекомендовать вам использовать некоторые инструменты управления контейнерами, такие как Kubernetes, вместо чистого использования Docker. Kubernetes предоставит вам возможность управлять вашей межконтейнерной сетью, развертывать контейнеры в нескольких средах и/или с несколькими providers, балансировать нагрузку на ваши приложения на основе контейнеров и т. Д.

+1

Большое вам спасибо за ответ! :) – daveoncode

0

Для создания приложений Python Flask с Docker вы может захотеть проверить это, я сделал публичное (и с открытым исходным кодом) изображение Docker со всеми звонками и свистами, которые вы можете использовать для создания веб-приложения Python Flask.

И в конце главной страницы этого изображения Docker я также написал пару отличных трюков, которые я использую для разработки, включая, например, живую отладку и перезагрузку без необходимости повторной сборки полного изображения Docker, как если бы вы были работающих на местном уровне.

У него есть uWSGI для запуска приложения, Nginx для обслуживания HTTP и Supervisord для управления ими, поэтому вам не нужно изучать, как устанавливать и настраивать все, что нужно для создания вашего веб-приложения Python Flask.

Похоже, что uWSGI с Nginx является одним из наиболее надежных (и с большими возможностями) развертывания веб-приложения Python. Вот этапы: http://nichol.as/benchmark-of-python-web-servers.

Есть даже некоторые проекты шаблонов, которые вы можете использовать для самостоятельной загрузки. Кроме того, вам не нужно клонировать весь проект или что-то еще, вы можете просто использовать его в качестве базового изображения.

Docker Hub: https://hub.docker.com/r/tiangolo/uwsgi-nginx-flask/

GitHub: https://github.com/tiangolo/uwsgi-nginx-flask-docker

Смежные вопросы