Кроме того, узнайте, как использовать Portainer в качестве альтернативного графического интерфейса Docker.

Как разработчик, перешедший с Linux на Windows по многим причинам, я использую Docker Desktop уже несколько месяцев, потому что он автоматически обновляет мою среду Docker.

К сожалению, это больше невозможно, и я должен удалить Docker Desktop.

К счастью, я не использовал Docker Desktop для каких-либо команд или функций, кроме обновления ядра Docker, поэтому это изменение не повлияет на мой рабочий процесс.

Почему вы должны установить Docker без рабочего стола Docker?

Docker обновил свое Лицензионное соглашение Docker Desktop и разрешил профессиональное использование Docker Desktop в крупных организациях без платной подписки Docker. Это означает, что если в вашей компании более 250 сотрудников или годовой доход превышает 10 миллионов долларов, вы не сможете использовать Docker Desktop без платной подписки. Он остается бесплатным для небольших компаний, частного использования, проектов с открытым исходным кодом и образовательных целей.

Это обновление лицензии относится только к Docker Desktop, а не к Docker или Docker Engine. Это позволяет вам по-прежнему использовать Docker для разработки и всех типов сред, включая производственные. Обычно это обновление лицензии не влияет на бизнес вашей компании при работе с Docker.

Предпосылки

Чтобы следовать этому руководству, вам потребуется рабочая станция, совместимая с WSL2, например Windows 10 версии 2004 или выше. Чтобы проверить, какая версия установлена, нажмите Windows logo key + R и нажмите Enter, чтобы отобразить настройки вашей системы. Если вы не соответствуете требованиям, обновите Windows.

Если Docker Desktop установлен, его необходимо удалить.

В Windows должна быть включена подсистема Linux. Это можно сделать, нажав клавишу журнала Windows, введя «Включение и отключение компонентов Windows» и открыв его.

Прокрутите вниз и активируйте функцию, если она отключена.

После активации нажмите OK и перезагрузите компьютер.

Вы также можете установить подсистему Linux с помощью команды PowerShell:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Установите Ubuntu на WSL2

После того, как вы настроите предварительные условия, вам нужно открыть PowerShell с правами администратора и установить Ubuntu в WSL2 с помощью следующей команды:

wsl --set-default-version 2
wsl --install -d Ubuntu

На этом этапе вы также можете установить различные подмодули Linux.

После завершения установки вы должны проверить, была ли установлена ​​Ubuntu правильной версии:

wsl -l -v

Если все работает правильно, вы должны увидеть установленную Ubuntu с соответствующей версией WSL. Если версия неверна, вы можете изменить ее с помощью:

wsl --set-version Ubuntu-YY.MM 2

ГГ.ММ — это версия версии Ubuntu, которую вы недавно установили.

Установить Докер

Чтобы установить Docker в Windows в подмодуле Ubuntu, вы можете выполнить официальные шаги по установке Docker в Ubuntu:

Другой способ — создать новый файл и скопировать в него следующий скрипт. Эти команды только скопированы из официального учебника в файл, чтобы поделиться с другими разработчиками.

Переключитесь на свой подмодуль Ubuntu в PowerShell и запустите файл, чтобы установить Docker и необходимые зависимости.

Теперь вы можете запустить и проверить, все ли работает правильно, с помощью:

sudo service docker start   # start the engine
sudo service docker status  # print some nice status information
docker run hello-world      # run a test docker container

После завершения последней команды вы должны увидеть работающий образ Docker:

Распространенные проблемы с дистрибутивом Ubuntu WSL2

Если вы устанавливаете Ubuntu в качестве дистрибутива WSL2 и используете хотя бы один, основанный на Ubuntu Hirsute Hippo (21.04), может случиться так, что ваш демон docker не запустится правильно.

При попытке запустить dockerd будет выдан следующий журнал ошибок:

...
INFO[2021-09-25T15:06:20.839195000+08:00] Loading containers: start.
INFO[2021-09-25T15:06:20.885624800+08:00] stopping event stream following graceful shutdown  error="<nil>" module=libcontainerd namespace=moby
INFO[2021-09-25T15:06:20.885865900+08:00] stopping healthcheck following graceful shutdown  module=libcontainerd
INFO[2021-09-25T15:06:20.886012400+08:00] stopping event stream following graceful shutdown  error="context canceled" module=libcontainerd namespace=plugins.moby
failed to start daemon: Error initializing network controller: error obtaining controller instance: unable to add return rule in DOCKER-ISOLATION-STAGE-1 chain:  (iptables failed: iptables --wait -A DOCKER-ISOLATION-STAGE-1 -j RETURN: iptables v1.8.7 (nf_tables):  RULE_APPEND failed (No such file or directory): rule in chain DOCKER-ISOLATION-STAGE-1
 (exit status 4))

Я заметил, что iptables, используемый докером, является версией nftables. Это привело к ошибке, т.к. начиная с версии 20.10 Ubuntu переключил систему брандмауэра на nftables (об этом можно прочитать на этом сайте). К сожалению, для использования nftables изначально требуется ядро ​​Linux 5.8, но последняя версия ядра для WSL — 5.4.

К счастью, в Ubuntu все еще есть возможность использовать устаревшую версию iptables, просто выполнив:

$ sudo update-alternatives --config iptables
There are 2 choices for the alternative iptables (providing /usr/sbin/iptables).
Selection    Path                       Priority   Status
------------------------------------------------------------
* 0            /usr/sbin/iptables-nft      20        auto mode
  1            /usr/sbin/iptables-legacy   10        manual mode
  2            /usr/sbin/iptables-nft      20        manual mode
Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/sbin/iptables-legacy to provide /usr/sbin/iptables (iptables) in manual mode

После обновления iptables просто перезапустите демон Docker, и вы заметите, что Docker начинает работать правильно.

Установите Docker Compose

Установку Docker Compose можно выполнить в подмодуле Ubuntu. Откройте окно PowerShell и переключитесь на подмодуль Ubuntu. Затем загрузите последнюю версию с GitHub:

$ sudo curl -L https://github.com/docker/compose/releases/download/2.4.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

Далее предоставьте права на выполнение команде docker-compose:

sudo chmod +x /usr/local/bin/docker-compose

После этого вы можете протестировать функциональность, выполнив docker-compose -version в подмодуле Ubuntu или wsl docker-compose -version из любого окна PowerShell.

Как интегрировать Docker и Docker Compose в вашу PowerShell

Если вы следуете руководству, у вас должно быть:

  1. Подсистема WSL2 Linux установлена
  2. Установил и настроил Docker на Ubuntu
  3. Установленный Docker Compose

Вы можете использовать все команды Docker внутри своего подмодуля Ubuntu, а также в PowerShell, указав перед командой wsl:

wsl docker ps
wsl docker-compose -version

Для удобства вы должны иметь возможность использовать любую команду Docker, не добавляя перед ней wsl. Для этого вы можете создать псевдоним для своего PowerShell. Читать об этом здесь и все настроить.

Затем найдите свой профиль PowerShell.

echo $PROFILE

и откройте этот файл в редакторе и вставьте это содержимое:

Function Start-WslDocker {
    wsl docker $args
}
Function Start-WslDockerCompose {
    wsl docker $args
}
Set-Alias -Name docker -Value Start-WslDocker
Set-Alias -Name docker-compose -Value Start-WslDockerCompose

Сохраните файл и перезапустите терминал PowerShell, чтобы проверить, работает ли псевдоним, набрав:

docker ps
docker-compose -version

Если вы не получите сообщение об ошибке, оно работает так, как ожидалось.

Установка Портейнера

Чтобы лучше заменить Docker Desktop и иметь что-то вроде графического интерфейса Docker, вам следует установить Portainer в локальной среде.

Portainer — это мощное решение «Контейнер как услуга» с графическим интерфейсом, которое помогает организациям легко и безопасно управлять облачными приложениями и развертывать их.

С Portainer вы можете:

  1. Развертывание приложений с помощью определенных шаблонов приложений (нажмите, чтобы развернуть)
  2. Развертывание и управление стеками из файлов Compose, включая развертывание непосредственно из git
  3. Развертывание контейнеров и управление ими, включая возможность редактирования запущенного контейнера
  4. Вытягивать/проталкивать/создавать образы
  5. Создать сети
  6. Создание/удаление томов
  7. Просмотр журнала событий Docker
  8. Просматривайте информацию о механизме докеров (хост) и при необходимости применяйте меры безопасности.

Этот файл Docker Compose можно использовать для установки Portainer CE в качестве службы Docker, которая автоматически перезапускается, если не работает.

# docker-compose.yml 
version: '3'

services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./portainer-data:/data
    ports:
      - 9000:9000

Сохраните его в любую папку и запустите в PowerShell:

docker-compose up -d

Переключитесь в браузер и откройте http://localhost:9000.

Примечание по времени. Убедитесь, что вы вошли в систему и создали свои учетные данные вскоре после того, как Portainer будет готов, иначе он автоматически отключится из соображений безопасности. Если вы не создали учетные данные вовремя и он автоматически отключился, вам необходимо перезапустить службу.

Плюсы/минусы этого решения

Плюсы

Есть несколько преимуществ по сравнению с версией Docker Desktop:

  1. Движок Docker бесплатный. Таким образом, обновление лицензии не будет проблемой для вашей среды разработки и производства.
  2. Portainer — это готовое к работе программное обеспечение для управления вашей средой Docker, которое также часто используется в среде кластера серверов.
  3. Вы намного быстрее изучите основы Docker и получите больше компетенций DevOps.
  4. Часто производственные среды работают в Linux, поэтому ваша среда разработки приближается к производственной среде.

Минусы

Единственным недостатком для меня является то, что вы должны обновить его вручную, вместо того, чтобы нажимать кнопку «ОК», если доступна новая версия.

Заключительные примечания

Спасибо за чтение этой статьи!

Я надеюсь, что вам понравилось его читать, и теперь вы можете установить среду Docker на свой хост Windows в подмодуле Ubuntu. Кроме того, я надеюсь, что теперь вы можете использовать и устанавливать Portainer и Docker Compose в Windows. Если это работает для вас, я хотел бы получить ваши отзывы в разделе комментариев. Кроме того, если у вас есть какие-либо вопросы, пожалуйста, запишите их ниже. Я отвечу на них, если это возможно.

Эта статья была опубликована в моем блоге по адресу https://www.paulsblog.dev/how-to-install-docker-without-docker-desktop-on-windows/

Want to Connect?
If interested feel free to connect with me on my personal website, Twitter, LinkedIn, and GitHub!