Запустится ли Docker-контейнер, собранный на Linux, на компьютере с macOS?

«Запустится ли Docker-контейнер, собранный на Linux, на компьютере с macOS?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, запустится. Docker обеспечивает переносимость на уровне контейнера, но с важными техническими оговорками.

Как это работает: Контейнеры используют ядро хостовой ОС. Поскольку macOS не имеет нативного ядра Linux, Docker Desktop для Mac запускает легковесную Linux-виртуальную машину (VM), поверх которой работают контейнеры.

Ключевые условия и ограничения:

  1. Совместимость архитектуры (CPU):

    • Образ, собранный для linux/amd64 (Intel), будет работать на Intel Mac и на Apple Silicon (M1/M2) через эмуляцию Rosetta 2.
    • Для нативной производительности на Apple Silicon (ARM) нужен образ linux/arm64. Многие официальные образы мультиархитектурные (multi-arch).
    • Можно явно указать платформу: docker run --platform linux/amd64 my-image.
  2. Отличия в производительности:

    • Доступ к файловой системе (примонтированные тома) может быть медленнее из-за слоя трансляции между macOS и VM.
    • Сетевой стек работает через виртуальный интерфейс.

Пример проверки архитектуры образа:

docker image inspect ubuntu:latest --format='{{.Architecture}}'
# Вывод: amd64 или arm64

Вывод: Контейнеры кроссплатформенны, но для оптимальной работы на Apple Silicon предпочтительны ARM-образы.