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.