- Docker
- Docker под Windows для разработки, разбор подводных камней
- Содержание
- Предварительные настройки
- Выбор между Docker Toolbox on Windows или Docker for Windows
- Windows контейнеры и Linux контейнеры
- Особенности монтирования папок
- Права доступа к монтируемым файлам и папкам
- Монтирование с хост-машины или volume
- Особенности разметки диска GPT и MBR
- Docker Toobox to Windows
- Docker Swarm
- Проблемы с кодировкой
- Полезные ссылки
- Заключение
- Выбор ОС для разработки под Docker: Windows или Linux?
- Краткий сравнительный обзор GUI решений для работы с Docker
Docker
Docker — это инструмент, специально разработанный для упрощения создания, развертывания и запуска приложений с использованием контейнеров. Контейнеры позволяют разработчикам упаковывать приложение со всеми необходимыми частями, включая библиотеки и другие зависимости. Это мощный инновационный двигатель, который также позволяет разработчикам безупречно модернизировать и снизить общую стоимость эксплуатации. Докер приносит уникальные методы, не предназначенные для более ранних технологий. Он решает множество проблем инфраструктуры и приложений, позволяя всем разработчикам и ИТ-специалистам обрабатывать операции в масштабе. Программа также позволяет разработчикам раскрыть свои творческие способности, настроить отличительную среду локальной разработки, протестировать проект и работать над проектом с аналогичными настройками независимо от локального хоста. Docker предлагает выдающиеся функции, такие как универсальная упаковка, полный набор инструментов для разработчиков, встроенная оркестровка контейнеров, безопасность по умолчанию и многое другое. Как и другие аналогичные решения, он также имеет несколько тарифных планов, каждый план имеет свои особенности и цену. Попробуйте, если это одна из лучших программ для разработки приложений по сравнению с другими.
Программа | Docker |
---|---|
Лицензия | Бесплатная (с ограничениями) |
Разработчик | docker.run |
Официальный сайт |
Найдено 16 аналогов Docker. Эти программы имеют схожий набор функций и отлично подходят для замены.
Найдено 23 похожих программ, которые могут быть использованы только в качестве частичной альтернативы Docker.
Docker под Windows для разработки, разбор подводных камней
Данная публикация является разбором особенностей контейнерной виртуализации Docker под системой Windows.
Она не претендует на роль исчерпывающей и по мере необходимости будет обновляться и дополняться.
За практическим руководством с нуля советую обратиться к этой публикации.
Содержание
Предварительные настройки
Контейнерная виртуализация или виртуализация на уровне операционной системы Docker нативно работает только на дистрибутивах Linux и FreeBSD (экспериментально).
На Windows вам понадобится гостевая Linux система либо специальная минималистичная виртуальная машина с ядром Linux от разработчиков Docker, которая и ставится из коробки.
Само собой разумеется, что вы включили виртуализацию у себя в BIOS/UEFI
Пункт настройки может называться по-разному: VT-x, VT-d, Intel VT, AMD-V, Virtualization Technology.
Еще одним минимальным системным требованием будет разрядность системы x64 и версия не ниже Windows 7 Pro.
Выбор между Docker Toolbox on Windows или Docker for Windows
Сборка включается в себя сам docker, утилиту docker-compose, утилиту для работы с виртуальной машиной docker-machine и клиент Kitematic.
Используется виртуальная машина (по умолчанию на VirtualBox) с минималистичным Linux окружением.
Позже для новых операционных систем выпустили Docker for Windows и Docker for Mac, которая на текущий момент является актуальной версией и продолжает развиваться.
Выбор между версиями не сложный:
— Если у вас Windows 10 x64 Pro, Enterprise или Education то включаем службу Hyper-V и ставим Docker for Windows.
Заметьте, что после включения службы Hyper-V пропадет возможность запускать и создавать x64 виртуальные машины на VirtualBox.
— Если же у вас другая версия Windows(7 Pro, 8, 8.1, 10 Home) то ставим VirtualBox и Docker Toolbox on Windows.
Несмотря на то, что Docker Toolbox разработчиками признан устаревшим работа с ним слабо отличается от Docker for Windows.
Вместе с установкой Docker Toolbox будет создана виртуальная машина.
В самом VirtualBox можно будет добавить оперативной памяти и ядер процессора на ваше усмотрение.
Windows контейнеры и Linux контейнеры
Docker for Windows предоставляет возможность переключать контейнеризацию между Linux и Windows версией.
В режиме Windows контейнеризации вы можете запускать только Windows приложения.
Замечу, что на май 2018 года в официальном Docker Hub существует всего 13 образов для Windows.
После включения Windows контейнеризации не забудьте добавить внешнюю сеть.
В конфигурационном файле docker-compose.yml это выглядит так:
Особенности монтирования папок
На примонтированных volume-ах не кидаются события файловой системы, поэтому inotify-tools не работает.
Спасибо пользователю eee
Если вы разрабатываете свой проект и пользуетесь docker-compose вне домашней папки то вам нужно будет проделать некоторые манипуляции.
Используя Docker for Windows для монтирования нового диска у вашего локального пользователя обязательно должен стоять пароль, который будет использоваться для доступа к shared папки.
Особенность заключается в том, что монтируемые внутрь контейнера диск будет монтироваться как от удаленной машины //10.0.75.1/DISK_DRIVE по протоколу SMB.
Для Docker Toolbox диски монтируются в самом VirtualBox на вкладке «Общие папки»
Пример для диска «D»:
Права доступа к монтируемым файлам и папкам
Как бы вам не хотелось, но для всех примонтированных из хост-машины файлов и папок будут стоять права 755 (rwx r-x r-x) и поменять их вы не сможете.
Остро встает вопрос при монтировании внутрь файла закрытого SSH ключа, права на который должны быть только у владельца(например 600).
В данном случае либо генерируют ключ при создании образа, либо прокидывают сокет ssh-agent с хост-машины.
Монтирование с хост-машины или volume
Монтирование внутрь контейнера происходит с использованием сети и протокола SMB, следовательно, внутри контейнера диск «D:\» будет примонтирован из источника //10.0.75.1/D
Использование volume внутри контейнера отображается как монтирование локального диска /dev/sda1, что влияет на скорость работы.
Простым тестом копирование файла на обычном HDD скорость работы получилась следующая:
Тип | Чтение | Запись | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Монтирование | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Volume |
DockStation | Kitematic | Portainer | Shipyard | |
---|---|---|---|---|
Работа с Docker Compose | + | — | — | — |
Работа с Docker Machine | + | + | + | + |
Конфигурирование отдельных контейнеров | — | + | + | + |
Базовые манипуляции с контейнерами (старт, стоп, рестарт, . ) | + | + | + | + |
Вывод логов контейнеров | + | + | + | + |
Поиск по логам | + | — | — | — |
Группировка и поиск контейнеров | + | — | — | — |
Мониторинг потребления ресурсов | + | — | + | + |
Работа с удаленными нодами | + | — | + | — |
Шаблоны приложений | — | — | + | — |
Работа с кастомными хабами | — | — | + | — |
Выводы:
Каждый инструмент имеет свои плюсы и минусы. Подходить к выбору инструмента необходимо из поставленной задачи. Если у вас всего один проект в работе и на локальной машине, вам не нужен функционал больше чем запустить, остановить, перезагрузить контейнер, посмотреть его логи или настроить что-то примитивное, то Kitematic будет являться хорошим решением. Если же стоят такие же условия, но нужно это делать на удаленной машине, то для этого вполне подойдет Shipyard.
Если же у вас более серьезные проекты, то остановиться можно на 2-х решениях DockStation и Portainer. По своим функциональным возможностям эти решения очень мощные. Если вы не любите заморачиваться с развертыванием приложений, если на ваших проектах используется Docker Compose или собираетесь переходить на Docker Compose, если вы работаете более чем с 1-м проектом на Docker, если есть необходимость мониторинга состояния и потребления ресурсов как отдельных контейнеров, так и проектов в целом, то однозначно для работы более подходящим решением будет являться DockStation. На случай если работа ведется над одним проектом и вам необходима веб панель и возможность конфигурирования отдельных контейнеров, то Portainer будет являться хорошим выбором.
На момент написания статьи произошло неприятное событие. Проект Shipyard официально мертв.