Она не претендует на роль исчерпывающей и по мере необходимости будет обновляться и дополняться.
За практическим руководством с нуля советую обратиться к этой публикации.
Содержание
- Предварительные настройки
- Выбор между Docker Toolbox on Windows или Docker for Windows
- Windows контейнеры и Linux контейнеры
- Особенности монтирования папок
- Монтирование с хост-машины или volume
- Особенности разметки диска GPT и MBR
- Docker Toobox to Windows
- Docker Swarm
- Полезные ссылки
- Заключение
Предварительные настройки
Контейнерная виртуализация или виртуализация на уровне операционной системы 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 Toolbox on Windows и Docker Toolbox on Mac было большим событием.
Сборка включается в себя сам 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 это выглядит так:
networks:
default:
external:
name: nat
Особенности монтирования папок
На примонтированных 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 скорость работы получилась следующая:
Тип | Чтение | Запись |
Монтирование | ~85 МБ/с | ~50 МБ/с |
Volume | ~340 МБ/с | ~220 МБ/с |
Такая разница в скорости скорее всего связана с тем, что в volume данные сбрасываются на диск постепенно, задействуя кеш в ОЗУ.
Особенности разметки диска GPT и MBR
Данный пункт не является истинной так как опровергающей или подтверждающей информации в интернете найти не смог.
Если на хост-машине таблица разделов MBR, то контейнер с MySQL/MariaDB может упасть с ошибкой:
InnoDB: File ./ib_logfile101: 'aio write' returned OS error 122. Cannot continue operationПо умолчанию в базе дынных включен параметр innodb_use_native_aio, отвечающий за асинхронный ввод/вывод и его надо будет выключить.
Данная проблема также встречается на некоторых версиях MacOS.
Docker Toobox to Windows
Главное правило: начинать работу с запуска ярлыка на рабочем столе «Docker Quickstart Terminal», это решает 80% проблем.
— Бывает возникают проблемы с отсутствия переменных окружения, решается командой:
eval $(docker-machine env default)
— Если все же возникают проблемы из разряда «docker: error during connect», необходимо выполнить:
docker-machine env --shell cmd default
@FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd default') DO @%i
Название Docker Machine по умолчанию default.
Docker Swarm
Ни в Docker for Mac, ни в Docker for Windows — нет возможности использовать запущенные демоны в качестве клиентов кластера (swarm members).
Спасибо пользователю stychos
Полезные ссылки
Docker Toolbox on Windows
Docker for Windows
Практическое руководство по Docker
Заключение
Особенности работы с Docker контейнеризацией на системе Windows не отличается от работы на Linux за исключение разобранных выше.
В статье я умышленно не упомянул заметно низкую скорость работы контейнеров и overhead используя систему Windows как само собой разумеющееся.
Буду рад услышать ваши отзывы. Не стесняйтесь предлагать улучшения или указывать на мои ошибки.
Комментарии (26)
dima_eam
17.05.2018 19:03+1В Win 7 еще невероятный гемор с монтированием томов — они монтируются пустыми github.com/docker/for-win/issues/298
VokaMut Автор
18.05.2018 10:01Скорее всего решение проблемы в монтировании в виртуалку нужного диска или проблем с протоколом SMB
Alxly
17.05.2018 20:06из своего опыта, по ощущениям, докер на винде работает чуток быстрее, чем на маке. не отслеживал последнее время-починили ли багу со скоростью в маке, так как была реальная проблема из-за тормозов. ну и еще в винде могут быть проблемы с билдом контейнера.
stychos
17.05.2018 23:49Плохо, что нигде не пишут большим предупреждающим шрифтом, что ни в Docker for Mac, ни в Docker for Windows — нет возможности использовать запущенные демоны в качестве клиентов кластера (swarm members).
eee
18.05.2018 08:39Еще на примонтированных volume-ах не кидаются события файловой системы, поэтому inotify-tools не работает.
PetSerVas
18.05.2018 10:57Docker for Windows предоставляет возможность переключать контейнеризацию между Linux и Windows версией.
В последних версиях Docker for Windows есть функция LCOW (Linux containers on Windows), которая позволяет запускать Linux контейнеры вместе и Windows контейнерами.
glogrus
18.05.2018 10:57Информация во многом сильно устаревшая. Под Windows 10 x64 Pro, Enterprise есть нативный linux. Не виртуальная машина, а именно Linux subsystem. Install the Windows Subsystem for Linux. При включении в Docker for Windows Microsoft’s Linux containers on Windows (LCOW) одновременно будут работать несколько контейнеров с Windows и Linux. С Swarm есть проблемы, но с сетью. Windows и Linux не видят сеть друг друга. Linux видит Linux. В принципе мне это не было нужно, но на форуме docker были свежие обсуждения где даже удалось поднять swarm из Windows + Linux. Сам не пробовал, настаивать не буду. И про «на май 2018 года в официальном Docker Hub существует всего 13 образов для Windows» тоже сильно преуменьшено. Это если искать по ключевому слову win? Попробуйте еще microsoft, mssql, nanoserver к примеру. Сильно удивитесь разнообразию.
valentinmk
18.05.2018 11:11- Самый большой косяк, с которым я столкнулся это баг с правами доступа после запроса и смены пароля по доменной политики — все, после этого Docker for Windows пришлось удалять и искать какой то старый билд в ветке 17. В новой версии похоже исправили, но сидишь как на пороховой бочке.
- По опыту Тулбокс не удобен при разработке из-за того, что он не биндит localhost, а какой-то условный 192.168.100.99, который приходится прокидывать через переменные среды или хардкодить.
OnYourLips
18.05.2018 12:13Работает очень костыльно и криво, причем прилетает оттуда, откуда подвоха не ожидаешь.
Мне пришлось отдельный компьютер достать для задач, связанных с докером и кубернетсом и ставить на него линукс. Этот способ гораздо проще и бюджетнее (с учетом сохраненного времени) даже если придется покупать отдельный и достаточно производительный ноутбук.
huksley
18.05.2018 12:30По поводу образов для Windows Containers. Есть еще образы в официальном репо Microsoft на Docker Hub.
Папки в Docker Toolbox (для Windows 7/8.1) лучше не подключать как volume — очень медленно выполняются операции чтения/записи.
По опыту Тулбокс не удобен при разработке из-за того, что он не биндит localhost
Можно пробросить порты с 192.168.100.99 на localhost — делается через VirtualBox интерфейс в настройках виртуальной машины default.
Для себя сделал решение — просто перейти на разработку под Linux. Нативная поддержка Docker. Весь инструментарий для разработки Java/Frontend/etc поддерживается нативно. Для чего-нибудь экзотичного VirtualBox с Windows 7.
Sigest
А если какая-то выгода от использования Docker на Windows вместо привычных VmWare (которая к слову тоже не хочет запускаться с включенным Hyper-V) и VirtualBox? Ну кроме того что он бесплатный.
zelenin
это ведь разные вещи, если даже отдаленно вам это кажется знакомым.
gecube
Я думаю, что более важный вопрос — есть ли выгода от использования Docker for Windows по сравнению с использованием нативной линукс версии в VirtualBox (ес-но с установленным любимым дистрибутивом линукс внутри ВМ)
zelenin
Ответ такой же. Это разные вещи.
gecube
Я имел в виду докер под Линукс в ВМ. Смотрите внимательней.
VokaMut Автор
Выгоды не будет, а будет только больший overhead т.к. вам нужно крутить полноценную ОС в виртуалке, а не минимально необходимую сборку с ядром linux, которая занимает всего 50-100МБ.
Плюс вы лишаете себя удобной работы с докером из хост машины.
В вашем случае проще использовать Vagrant, чем Docker в полноценной виртуалке
4144
Если вы имеете в виду, что минимальная сборка занимает 50-100MB оперативной памяти, то это совсем не минимальная сборка, а как раз вполне обычный дистрибутив, в котором из авто запуска выкинули не нужные демоны.