Если вы когда-нибудь пытались установить Docker для Windows , вы, вероятно, поняли, что программа установки не будет работать в Windows 10 Home. Только Windows Pro, Enterprise или Education поддерживают Docker. Обновление лицензии Windows является дорогостоящим, а также бессмысленным, поскольку вы по-прежнему можете запускать контейнеры Linux в Windows, не полагаясь на технологию Hyper-V , что является обязательным требованием для Docker для Windows.
Если вы планируете запускать контейнеры Windows , вам потребуется определенная версия и сборка Windows Server. Проверьте матрицу совместимости версии контейнера Windows для деталей.
В 99,999% случаев вам нужен только контейнер Linux, поскольку он поддерживает программное обеспечение, созданное с использованием технологий с открытым исходным кодом и .NET. Кроме того, контейнеры Linux могут работать в любом дистрибутиве и на популярных архитектурах ЦП, включая x86_64
, ARM
и IBM
.
В этом уроке я покажу вам, как быстро настроить виртуальную машину Linux в Windows Home с Docker Engine с помощью Docker Machine . Вот список программного обеспечения, которое вам понадобится для создания и запуска контейнеров Docker:
- Docker Machine : инструмент CLI для установки Docker Engine на виртуальных хостах
- Docker Engine : работает поверх ядра Linux; используется для сборки и запуска контейнеров
- Docker Client : инструмент CLI для выдачи команд в Docker Engine через REST API
- Docker Compose : инструмент для определения и запуска мультиконтейнерных приложений
Я покажу, как выполнить установку в следующих средах:
- В Windows с помощью Git Bash
- В подсистеме Windows для Linux 2 (работает под управлением Ubuntu 18.04)
Во-первых, позвольте мне объяснить, как установка Docker будет работать в Windows.
Как это устроено
Как вы, вероятно, знаете, Docker требует ядро Linux для запуска Linux Containers. Чтобы это работало в Windows, вам нужно настроить виртуальную машину Linux для работы в качестве гостя в Windows 10 Home.
Настройка виртуальной машины Linux может быть выполнена вручную. Самый простой способ — использовать Docker Machine, чтобы выполнить эту работу за вас, выполнив одну команду. Эта виртуальная машина Docker Linux может работать как в вашей локальной системе, так и на удаленном сервере. Docker клиент будет использовать SSH для связи с Docker Engine. Всякий раз, когда вы создаете и запускаете образы, фактический процесс будет происходить внутри виртуальной машины, а не на вашем хосте (Windows).
Давайте углубимся в следующий раздел, чтобы настроить среду, необходимую для установки Docker.
Начальная настройка
Вы можете иметь или не иметь следующие приложения, установленные в вашей системе. Я предполагаю, что нет. Если вы это сделаете, не забудьте обновить до последних версий. Я также предполагаю, что вы используете последнюю стабильную версию Windows. На момент написания статьи я использовал Windows 10 Home version 1903. Давайте начнем устанавливать следующее:
-
Установите Git Bash для Windows . Это будет наш основной терминал для запуска команд Docker.
-
Установите Chocolatey , менеджер пакетов для Windows. Это облегчит работу по установке остальных программ.
-
Установите VirtualBox и его расширение. В качестве альтернативы, если вы закончили установку Chocolatey, вы можете просто выполнить эту команду внутри терминала PowerShell с повышенными правами:
C:\ choco install virtualbox
-
Если вы хотите попробовать запустить Docker в среде WSL2, вам нужно сначала настроить WSL2. Вы можете следовать этому руководству для пошаговых инструкций.
Настройка двигателя докера
Установка Docker Engine довольно проста. Сначала нам нужно установить Docker Machine.
-
Установите Docker Machine, следуя инструкциям на этой странице . Кроме того, вы можете выполнить эту команду внутри терминала PowerShell с повышенными правами:
C:\ choco install docker-machine
-
Используя терминал Git Bash, используйте Docker Machine для установки Docker Engine. Это загрузит образ Linux, содержащий Docker Engine, и запустит его как виртуальную машину с использованием VirtualBox. Просто выполните следующую команду:
$ docker-machine create --driver virtualbox default
-
Далее нам нужно настроить, какие порты открываются при запуске контейнеров Docker. Это позволит нам получить доступ к нашим приложениям через
localhost<:port>
. Не стесняйтесь добавлять столько, сколько хотите. Для этого вам нужно запустить Oracle VM VirtualBox из меню «Пуск». Выберите виртуальную машину по умолчанию в боковом меню. Затем нажмите Настройки > Сеть > Адаптер 1 > Переадресация портов . Вы должны найти порт пересылкиssh
уже настроенный для вас. Вы можете добавить еще так: -
Далее нам нужно разрешить Docker монтировать тома, расположенные на вашем жестком диске. По умолчанию вы можете монтировать только из каталога
C://Users/
. Чтобы добавить другой путь, просто перейдите в Oracle VM VirtualBox GUI. Выберите виртуальную машину по умолчанию и перейдите в « Настройки» > « Общие папки» . Добавьте новый, нажав на символ плюса. Введите поля, как это. Если есть опция с именем Постоянная , включите ее. -
Чтобы избавиться от ошибки неверных настроек, как показано на скриншоте выше, просто увеличьте объем видеопамяти на вкладке «Дисплей» в параметре настроек. Видеопамять в этом случае не важна, так как мы будем запускать виртуальную машину в режиме без головы.
-
Чтобы запустить виртуальную машину Linux, просто выполните эту команду в Git Bash. Виртуальная машина Linux запустится. Дайте время для завершения процесса загрузки. Это не должно занять больше минуты. Вам нужно будет делать это каждый раз при загрузке вашей хост-ОС:
$ docker-machine start vbox
-
Далее нам нужно настроить переменные окружения Docker. Это позволяет клиенту Docker и Docker Compose взаимодействовать с модулем Docker, работающим на виртуальной машине Linux, по
default
. Вы можете сделать это, выполнив команды в Git Bash:# Print out docker machine instance settings $ docker-machine env default # Set environment variables using Linux 'export' command $ eval $(docker-machine env default --shell linux)
Вам нужно будет устанавливать переменные окружения каждый раз, когда вы запускаете новый терминал Git Bash. Если вы хотите избежать этого, вы можете скопировать вывод
eval
и сохранить его в своем файле.bashrc
. Это должно выглядеть примерно так:export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.101:2376" export DOCKER_CERT_PATH=export DOCKER_MACHINE_NAME="default" export COMPOSE_CONVERT_WINDOWS_PATHS="true"
ВАЖНО : для
DOCKER_CERT_PATH
вам нужно изменить путь к файлу Linux на формат пути Windows. Также обратите внимание, что есть вероятность, что назначенный IP-адрес может отличаться от того, который вы сохраняли при каждом запуске виртуальной машины поdefault
.
В следующем разделе мы установим Docker Client и Docker Compose.
Настройка инструментов Docker
Для этого раздела вам необходимо установить следующие инструменты, используя PowerShell в режиме администратора. Эти инструменты упакованы в установщик Docker для Windows. Поскольку установщик отказывается работать в Windows 10 Home, мы установим эти программы по отдельности, используя Chocolatey:
C:\ choco install docker-cli C:\ choco install docker-compose
После завершения процесса установки вы можете переключиться обратно на терминал Git Bash. Вы можете продолжать использовать PowerShell, но я предпочитаю синтаксис Linux для выполнения команд. Давайте выполним следующие команды, чтобы убедиться, что Docker работает:
# Start Docker VM $ docker-machine start default # Confirm Docker VM is running $ docker-machine ls # Configure Docker Envrionment to use Docker Vm $ eval $(docker-machine env default --shell linux) # Confirm Docker is connected. Should output Docker VM specs $ docker info # Run hello-world docker image. Should output "Hello from Docker" $ docker run hello-world
Если все вышеперечисленные команды выполняются успешно, это означает, что вы успешно установили Docker. Если вы хотите попробовать более амбициозный пример, у меня есть небольшое приложение Node.js, которое я настроил для запуска на контейнерах Docker. Во-первых, вам нужно установить GNU Make, используя PowerShell с правами администратора:
C:\ choco install make
Далее выполните следующие команды. Запуск этого примера Node.js обеспечит отсутствие проблем с открытыми портами и томами монтирования в файловой системе Windows. Сначала перейдите к папке, которую вы уже смонтировали в настройках VirtualBox. Далее выполните следующие команды:
$ git clone [email protected]:brandiqa/docker-node.git $ cd docker-node/website $ make
Когда вы нажмете последнюю команду, вы должны ожидать похожий вывод:
docker volume create nodemodules nodemodules docker-compose -f docker-compose.builder.yml run --rm install npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"}) audited 9731 packages in 21.405s docker-compose up Starting website_dev_1 ... done Attaching to website_dev_1 dev_1 | dev_1 | > [email protected] start /usr/src/app dev_1 | > parcel src/index.html --hmr-port 1235 dev_1 | dev_1 | Server running at http://localhost:1234
Получение вышеуказанного вывода означает, что монтаж тома прошел успешно. Откройте localhost:1234
чтобы подтвердить, что веб-сайт доступен. Это подтвердит, что вы правильно настроили порты. Вы можете редактировать исходный код, например, изменить заголовок h1
в App.jsx
. Как только вы сохраните файл, страница браузера автоматически обновится. Это означает, что горячая перезагрузка модуля выполняется из контейнера Docker.
Я хотел бы обратить ваше внимание на docker-compose.yml
файл docker-compose.yml
. Для перезагрузки горячего модуля для работы из Docker Container в Windows требуется следующее:
-
При использовании пакета укажите порт HMR в стартовом скрипте
package.json
:parcel src / index.html –hmr-port 1235
-
В правилах переадресации портов виртуальной машины убедитесь, что эти порты доступны хост-системе:
- 1234
- 1235
-
inotify
не работает на файловыхvboxsf
, поэтому изменения файла не могут быть обнаружены. Обходной путь должен установить опрос дляChokidar
через переменные окружения вdocker-compose.yml
. Вот полный файл, чтобы вы могли увидеть, как он установлен:version: '3' services: dev: image: node:10-jessie-slim volumes: - nodemodules:/usr/src/app/node_modules - ./:/usr/src/app working_dir: /usr/src/app command: npm start ports: - 1234:1234 - 1235:1235 environment: - CHOKIDAR_USEPOLLING=1 volumes: nodemodules: external: true
Теперь, когда у нас есть полностью рабочая реализация Docker на Windows 10 home, давайте настроим ее на WSL2 для тех, кто заинтересован.
Подсистема Windows для Linux 2
Установка Docker на WSL2 не так проста, как кажется. К сожалению, последняя версия Docker Engine не может работать на WSL2. Однако есть более старая версия, docker-ce=17.09.0~ce-0~ubuntu
, которая хорошо работает в WSL2. Я не буду освещать это здесь. Вместо этого я покажу вам, как получить доступ к Docker Engine, работающему на виртуальной машине, которую мы настроили ранее, с терминала WSL.
Все, что нам нужно сделать, это установить Docker клиент и Docker compose. Предполагая, что вы используете WSL2 Ubuntu Terminal, выполните следующее:
-
Установите Docker, используя официальные инструкции:
# Update the apt package list. sudo apt-get update -y # Install Docker's package dependencies. sudo apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ software-properties-common # Download and add Docker's official public PGP key. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # Verify the fingerprint. sudo apt-key fingerprint 0EBFCD88 # Add the `stable` channel's Docker upstream repository. # # If you want to live on the edge, you can change "stable" below to "test" or # "nightly". I highly recommend sticking with stable! sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" # Update the apt package list (for the new apt repo). sudo apt-get update -y # Install the latest version of Docker CE. sudo apt-get install -y docker-ce # Allow your user to access the Docker CLI without needing root access. sudo usermod -aG docker $USER
-
Установите Docker Compose, используя это официальное руководство . Альтернативой является использование PIP, который просто установит последнюю стабильную версию:
# Install Python and PIP. sudo apt-get install -y python python-pip # Install Docker Compose into your user's home directory. pip install --user docker-compose
-
Исправьте проблему монтирования Docker в терминале WSL, вставив этот контент в
/etc/wsl.conf
. Создайте файл, если он не существует:[automount] root = / options = "metdata"
Вам нужно будет перезагрузить компьютер, чтобы этот параметр вступил в силу.
-
Предполагая, что Linux Docker VM работает, вам необходимо подключить к ней инструменты Docker в среде WSL. Если вы можете получить доступ к
docker-machine
из терминала Ubuntu, выполните командуeval
. В противном случае вы можете вставить следующую переменную Docker в ваш файл.bashrc
. Вот мой пример:export DOCKER_HOST="tcp://192.168.99.101:2376" export DOCKER_CERT_PATH=export DOCKER_MACHINE_NAME="vbox" export COMPOSE_CONVERT_WINDOWS_PATHS="true"
Вам нужно будет перезапустить свой терминал или выполнить
source ~/.bashrc
чтобы настройки вступили в силу. Выполнение команд Docker должно работать правильно в WSL без помех.
Переход на Linux
Теперь мы подходим к концу этой статьи. Действия по настройке Docker в Windows 10 — это довольно длительный процесс. Если вы планируете переформатировать свою машину, вам придется снова пройти тот же процесс. Хуже, если ваша задача — установить Docker на несколько компьютеров под управлением Windows 10 Home.
Более простое решение — перейти на Linux для разработки. Вы можете создать раздел и настроить двойную загрузку. Вы также можете использовать VirtualBox для установки и запуска полного дистрибутива Linux внутри Windows. Проверьте, какой популярный дистрибутив вы бы хотели попробовать. Я использую Linux Lite, потому что он легкий и основан на Ubuntu. С VirtualBox вы можете попробовать столько дистрибутивов, сколько пожелаете.
Если вы используете дистрибутив на основе Ubuntu, вы можете легко установить Docker с помощью следующих команд:
# Install https://snapcraft.io/ package manager sudo apt install snapd # Install Docker Engine, Docker Client and Docker Compose sudo snap install docker # Run Docker commands without sudo sudo usermod -aG docker $USER
Вам нужно будет выйти, а затем войти, чтобы последняя команда вступила в силу. После этого вы можете запустить любую команду Docker без проблем. Вам не нужно беспокоиться о проблемах с монтированием или портами. Docker Engine работает как служба в Linux, которая по умолчанию запускается автоматически. Нет необходимости в подготовке виртуальной машины Docker. Все работает из коробки, не полагаясь на взломать.
Резюме
Я надеюсь, что вы установили и запустили Docker в Windows 10 Home. Я полагаю, что этот метод должен работать на более старых версиях, таких как Windows 7. В случае, если у вас возникнут проблемы, просто следуйте инструкциям, чтобы увидеть, если вы что-то пропустили. Заметьте, однако, что я не охватил все функции Docker. Вы можете столкнуться с ошибкой или неподдерживаемой функцией, которая требует обходного пути, или может вообще не иметь решения. Если это так, я бы порекомендовал вам просто переключиться на Linux, если вы хотите более плавной разработки с использованием Docker.