Андрей Смирнов
Время чтения: ~9 мин.
Просмотров: 37

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 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»:85ah_ev39dn19z_u3iz_axrj8i4.jpeg

Права доступа к монтируемым файлам и папкам

Как бы вам не хотелось, но для всех примонтированных из хост-машины файлов и папок будут стоять права 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(на Docker for Windows не удалось воспроизвести) нашлась проблема с тем, что русские комментарии в docker-compose.yml файле приводили к ошибке:

Traceback (most recent call last):   File "docker-compose", line 6, in    File "composeclimain.py", line 71, in main   File "composeclimain.py", line 124, in perform_command   File "composeclicommand.py", line 41, in project_from_options   File "composeclicommand.py", line 109, in get_project   File "composeconfigconfig.py", line 283, in find   File "composeconfigconfig.py", line 283, in <listcom line="" in="" from_filename="" file="" load_yaml="" safe_load="" load="" __init__="" determine_encoding="" update_raw="" decode="" codec="" can="" byte="" position="" character="" maps="" to=""> [4176]execute script docker-compose </listcom>

Полезные ссылки

Docker Toolbox on WindowsDocker for WindowsПрактическое руководство по Docker

Заключение

Особенности работы с Docker контейнеризацией на системе Windows не отличается от работы на Linux за исключение разобранных выше. В статье я умышленно не упомянул заметно низкую скорость работы контейнеров и overhead используя систему Windows как само собой разумеющееся. Буду рад услышать ваши отзывы. Не стесняйтесь предлагать улучшения или указывать на мои ошибки.

Какой версией Docker вы пользуетесь?

  • 34,0%Docker Toolbox on Windows
  • 66,0%Docker for Windows

Проголосовал 191 пользователь. Воздержались 145 пользователей.

Have you previously installed Docker Toolbox, Docker Machine, or VirtualBox?

Docker for Windows now requires Microsoft’s Hyper-V. Once enabled, VirtualBox will no longer be able to run virtual machines (your VM images will still remain). You can still use docker-machine to manage remote hosts.

You have the option to import the default VM after installing Docker for Windows from the Settings menu in the System Tray.

Docker for Windows enables Hyper-V if necessary; this requires a reboot.

Requirements

Docker for Windows runs on 64-bit Windows 10 Pro, Enterprise, and Education; 1511 November update, Build 10586 or later. Docker plans to support more versions of Windows 10 in the future.

Installation

  1. Download Docker.
  2. Double-click InstallDocker.msi to run the installer.
  3. Follow the Install Wizard: accept the license, authorize the installer, and proceed with the install.
  4. Click Finish to launch Docker.
  5. Docker starts automatically.
  6. Docker loads a “Welcome” window giving you tips and access to the Docker documentation.

That’s it!

Verification

The whale in the status bar indicates a running (and accessible via terminal) Docker instance.

Open PowerShell or your favorite Windows terminal (e.g., Command prompt) and enter docker run hello-world.

Windows prompts you for access every time Docker starts, allowing Docker to manage the Hyper-V VM’s. The first time Docker starts, you may need to provide the token from the Beta invitation email. When initialization completes, select About Docker from the notification area and verify you have the latest version.

From PowerShell (or your favorite Windows terminal), check the versions of docker, docker-compose, and verify your installation:

PS C:Usersusername> docker --version PS C:Usersusername> docker-compose --version PS C:Usersusername> docker-machine --version 

Before you stop, let’s test a Dockerized webserver; from PowerShell or cmd.exe, run:

docker run -d -p 80:80 --name webserver nginx 

If your host does not already have it, Docker downloads nginx from Docker Hub and starts it. As soon as the download completes, point your web browser to http://docker to view the start page. You should see:

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org. Commercial support is available at nginx.com.

Thank you for using nginx.

Common Pitfalls

CPU

If your CPU does not support virtualization, or if you do not have a 64-bit CPU, you cannot run Docker locally.

If you do not run a 64-bit version of Windows Windows 10 Pro, Enterprise, or Education; 1511 November update, Build 10586 or later, you cannot run Docker for Windows.

You can install Docker Toolbox if you have a 64-bit version of Windows 7 or later. Alternately, you do have the option to upgrade.

Next: Install Docker on LinuxRequirements and things to know before installing Docker for Linux.

Installing Docker on Windows is very simple. We present a simple step by step process where you can follow and install the Docker Engine on your Windows PC. In this tutorial, we will install Docker on Windows 10.

Install Docker on Windows 10

The prerequisite to install Docker on Windows 10 is that your Windows 10 edition should be Pro or Enterprise. If you have Windows 10 Home, do not worry, you can install Docker Toolbox.

Go to official Docker site https://docs.docker.com/v17.09/docker-for-windows/install/ and download the Docker for Windows Installer exe file.

docker-install-windows.png

The size of the exe file would be more that 500MB and may take some significant time to get downloaded.

Once the download is complete, double click on the .exe file to start installation wizard and follow through the steps.

Install Docker Toolbox

To install Docker Toolbox, go to the link https://docs.docker.com/v17.09/toolbox/overview/ and download Toolbox for Windows.

setup-docker-toolbox.png

Click on Next and choose the destination location.

docker-toolbox-installation-location.png

Click on Next and select which components to be installed.

docker-toolbox-installation-select-components.png

You may select Git for Windows as well and click on Next.

docker-toolbox-installation-additional-tasks.png

You may select Install VirtualBox choice as well. We will check that and click on Next.

docker-toolbox-ready-to-install.png

Meanwhile, while installing the components, you may get popup from Windows Security Manager, if you would like to install the driver or not. Click on Install from such popups.

Upon successful completion, click on Finish. Two shortcuts for Docker Quickstart Terminal and Kinematic (Alpha) will be created for quick access to terminal and GUI respictively.

Используемые источники:

  • https://habr.com/post/358774/
  • https://runnable.com/docker/install-docker-on-windows-10
  • https://www.tutorialkart.com/docker/install-docker-on-windows-10/

Рейтинг автора
5
Подборку подготовил
Андрей Ульянов
Наш эксперт
Написано статей
168
Ссылка на основную публикацию
Похожие публикации