Статьи

Как установить Docker на Windows 10 Home

Если вы когда-нибудь пытались установить 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 : инструмент для определения и запуска мультиконтейнерных приложений

Я покажу, как выполнить установку в следующих средах:

  1. В Windows с помощью Git Bash
  2. В подсистеме 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. Давайте начнем устанавливать следующее:

  1. Установите Git Bash для Windows . Это будет наш основной терминал для запуска команд Docker.

  2. Установите Chocolatey , менеджер пакетов для Windows. Это облегчит работу по установке остальных программ.

  3. Установите VirtualBox и его расширение. В качестве альтернативы, если вы закончили установку Chocolatey, вы можете просто выполнить эту команду внутри терминала PowerShell с повышенными правами:

     C:\ choco install virtualbox 
  4. Если вы хотите попробовать запустить Docker в среде WSL2, вам нужно сначала настроить WSL2. Вы можете следовать этому руководству для пошаговых инструкций.

Настройка двигателя докера

Установка Docker Engine довольно проста. Сначала нам нужно установить Docker Machine.

  1. Установите Docker Machine, следуя инструкциям на этой странице . Кроме того, вы можете выполнить эту команду внутри терминала PowerShell с повышенными правами:

     C:\ choco install docker-machine 
  2. Используя терминал Git Bash, используйте Docker Machine для установки Docker Engine. Это загрузит образ Linux, содержащий Docker Engine, и запустит его как виртуальную машину с использованием VirtualBox. Просто выполните следующую команду:

     $ docker-machine create --driver virtualbox default 
  3. Далее нам нужно настроить, какие порты открываются при запуске контейнеров Docker. Это позволит нам получить доступ к нашим приложениям через localhost<:port> . Не стесняйтесь добавлять столько, сколько хотите. Для этого вам нужно запустить Oracle VM VirtualBox из меню «Пуск». Выберите виртуальную машину по умолчанию в боковом меню. Затем нажмите Настройки > Сеть > Адаптер 1 > Переадресация портов . Вы должны найти порт пересылки ssh уже настроенный для вас. Вы можете добавить еще так:

    порты докера vm

  4. Далее нам нужно разрешить Docker монтировать тома, расположенные на вашем жестком диске. По умолчанию вы можете монтировать только из каталога C://Users/ . Чтобы добавить другой путь, просто перейдите в Oracle VM VirtualBox GUI. Выберите виртуальную машину по умолчанию и перейдите в « Настройки» > « Общие папки» . Добавьте новый, нажав на символ плюса. Введите поля, как это. Если есть опция с именем Постоянная , включите ее.

    тома докера вм

  5. Чтобы избавиться от ошибки неверных настроек, как показано на скриншоте выше, просто увеличьте объем видеопамяти на вкладке «Дисплей» в параметре настроек. Видеопамять в этом случае не важна, так как мы будем запускать виртуальную машину в режиме без головы.

  6. Чтобы запустить виртуальную машину Linux, просто выполните эту команду в Git Bash. Виртуальная машина Linux запустится. Дайте время для завершения процесса загрузки. Это не должно занять больше минуты. Вам нужно будет делать это каждый раз при загрузке вашей хост-ОС:

     $ docker-machine start vbox 
  7. Далее нам нужно настроить переменные окружения 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 git@github.com: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: fsevents@1.2.9 (node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: 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 | > docker-node@1.0.0 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 требуется следующее:

  1. При использовании пакета укажите порт HMR в стартовом скрипте package.json :

    parcel src / index.html –hmr-port 1235

  2. В правилах переадресации портов виртуальной машины убедитесь, что эти порты доступны хост-системе:

    • 1234
    • 1235
  3. 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, выполните следующее:

  1. Установите 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 
  2. Установите 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 
  3. Исправьте проблему монтирования Docker в терминале WSL, вставив этот контент в /etc/wsl.conf . Создайте файл, если он не существует:

     [automount] root = / options = "metdata" 

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

  4. Предполагая, что 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 вы можете попробовать столько дистрибутивов, сколько пожелаете.

Linux Lite VM

Если вы используете дистрибутив на основе 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.