ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Docker Desktop на Windows и macOS: установка и проверка для начинающих

Автор: · Обновлено

Docker для начинающих на Windows удобнее осваивать через Docker Desktop и WSL 2. Цель урока — запустить Linux-контейнер и понимать, из какой оболочки выполняется команда. Windows containers — отдельный режим с другими образами и требованиями; для Python, Nginx и PostgreSQL в этом треке он не нужен.

Что подготовить

Сверьте выпуск Windows, архитектуру, память и поддержку виртуализации с актуальными требованиями Docker Desktop. Проверки зависят от версии продукта; старый список требований из случайного Docker tutorial может уже не подходить. Если компьютер управляется организацией, используйте предоставленный способ установки.

Откройте PowerShell и проверьте WSL:

wsl --version
wsl --status
wsl --list --verbose

Номер пакета WSL и колонка VERSION у дистрибутива — разные величины. В колонке нужен режим 2. При отсутствии WSL откройте PowerShell от администратора, выполните wsl --install, затем перезагрузите компьютер, если это предложено. Завершите первый запуск Ubuntu созданием Linux-пользователя. При установленной WSL обновление выполняется wsl --update. Установка WSL у Microsoft.

Подключение Desktop

Установите Docker Desktop из официального источника и запустите приложение. Выберите backend WSL 2, если настройка доступна. Для команд из Ubuntu включите её в Settings → Resources → WSL Integration и примените изменения. Отсутствие этого раздела может означать режим Windows containers: переключитесь на Linux containers.

Не устанавливайте второй Docker Engine внутрь Ubuntu WSL по Linux-инструкции, если решили работать через интеграцию Desktop. Это создаёт путаницу между серверами, сокетами и хранилищами. Прежде чем менять существующую установку, определите её контекст. Устройство интеграции WSL.

Проверяем из PowerShell

docker version
docker info --format '{{.OSType}}'
docker compose version
docker buildx version
docker run --rm hello-world
docker run --rm alpine:3.22 uname -s

Ожидаемый тип ОС — linux, последнее сообщение — Linux. У docker version должны присутствовать Client и Server. Запуск hello-world завершается сам: ему не требуется постоянно работать. Если команды доступны только в PowerShell, но не в Ubuntu, проверьте WSL Integration и заново откройте терминал Ubuntu.

Первый сервер без сложной настройки

docker run -d --name dk-win-web -p 127.0.0.1:18080:80 nginx:stable-alpine
curl.exe http://127.0.0.1:18080/
docker logs --tail 20 dk-win-web
docker stop dk-win-web
docker rm dk-win-web

В браузере по тому же адресу откроется стартовая страница Nginx. curl.exe явно запускает программу curl, а не одноимённый alias старой Windows PowerShell. Привязка к 127.0.0.1 ограничивает учебный порт локальным компьютером. Удаляется только созданный здесь контейнер; образ остаётся для повторного запуска.

Файлы и оболочки

Для следующих практик удобно открыть Ubuntu и работать в ~/projects/docker-labs. Тогда команды Bash, права файлов и пути совпадут с Linux-примерами. Путь /app внутри контейнера не является C:\app на Windows. Когда нужен bind mount, явно определите, в какой файловой системе хранится проект. Нельзя механически переносить $(pwd) из Bash в произвольную оболочку.

Сохраняйте Linux-скрипты с переводами строк LF. Сообщение /bin/sh^M: bad interpreter может означать CRLF, а не отсутствие shell в образе. Отдельно проверяйте, что файл действительно скопирован в build context.

Docker на macOS: отдельный путь установки

На Mac WSL не нужен: Docker Desktop запускает Linux-среду своим механизмом виртуализации. В «Об этом Mac» определите тип процессора и скачайте официальный установщик Apple silicon либо Intel. Проверьте поддержку своей версии macOS и требования к памяти на странице установки. Не выбирайте архитектуру только по результату терминала, запущенного через Rosetta.

Откройте Docker.dmg, перенесите Docker в Applications, запустите Docker.app и завершите первоначальную настройку, ознакомившись с условиями использования. Дождитесь готовности Engine. Наличие команды docker в PATH ещё не означает, что приложение Desktop запущено. В обычном Terminal выполните:

docker version
docker info --format '{{.OSType}} {{.Architecture}}'
docker compose version
docker buildx version
docker run --rm hello-world
docker run --rm alpine:3.22 uname -m

Тип ОС сервера должен быть Linux; на Apple silicon нативная архитектура обычно aarch64, на Intel — x86_64. Первый run скачает подходящий вариант multi-platform образа. Если чужой образ существует только для amd64, запуск на Apple silicon может требовать эмуляции и иметь ограничения или меньшую скорость. Это не повод без разбора добавлять --platform linux/amd64 ко всем проектам: сначала проверьте доступные платформы образа.

Для первого HTTP-запуска используйте приведённые выше команды Nginx, заменив имя dk-win-web на dk-mac-web, а curl.exe на curl. Ожидается та же страница на локальном порту 18080. После проверки остановите и удалите только dk-mac-web. В настройках ресурсов Desktop оставьте память для macOS и других программ: лимиты Linux VM отличаются от общего объёма памяти компьютера. Bind mount показывает файлы Mac через границу VM; не ищите Docker volumes как обычную папку /var/lib/docker на macOS.

Чеклист Mac: выбран правильный установщик; Desktop запущен; Client и Server доступны; hello-world завершился успешно; локальный HTTP-ответ получен. При отсутствии Server проверьте Desktop и docker context ls. При exec format error отдельно сравните архитектуры образа и бинарника. Остальные уроки можно выполнять в Terminal с указанной оболочкой, учитывая отличия утилит macOS от GNU/Linux.

Если Docker не стартовал

При отсутствии Server сначала дождитесь запуска Desktop, проверьте docker context ls и wsl --status. Если порт занят, измените левую часть публикации, например на 127.0.0.1:18081:80. Windows Event Viewer может показывать DCOM-события со словами localhost и «контейнер приложения»: само совпадение слов не доказывает проблему Docker. Их нужно разбирать отдельно по провайдеру события и номеру, не меняя COM-разрешения ради запуска Nginx.

Практика

Составьте чеклист из пяти пунктов: WSL работает в режиме 2; Desktop запущен; сервер сообщает Linux; Compose и Buildx доступны; локальная страница открывается. Затем повторите запуск с именем dk-win-web-2 и портом 18081 и самостоятельно удалите только этот контейнер. Объясните, где выполняется Linux-процесс, хотя терминал открыт на Windows.

Источники