Комментарии 4
Следует иметь в виду, что поведение контейнеров и установленных в них приложений может отличаться на разных платформах.
Ключевая фраза, наверное с этого и нужно было начинать)
я немного запутался. У меня мак на arm64, и почему-то всё работает, но хотелось бы разобраться. Когда я запускаю образ amd64, то докер десктоп просто показывает мне ворнинг и беджик, что контейнер не родной архитектуры, но продолжает работать. Вот в этот момент что происходит? a) эмуляция amd-64 линукса и внутри него QUEMU с тем что вы написали? b) эмуляция arm-64 линукса, с трансляцией команд Rosetta? с) что-то иное?
Повторюсь, по какой-то странной причине у меня на маке с arm64 и 16Гб памяти все докер компоузы работают, и даже меньше тормозят чем под windows на intel с 32Гб памяти
Сам образ просто содержит признак, что он собран под другую архитектуру.
Важно не это, а то, что исполняемый файл запускается внутри. В Linux ядре есть специальный механизм - binfmt, который при запуске исполняемого файла умеет проверять его сигнатуру (первые несколько байт) и по ним определять, под какую архитектуру скомпилирован файл и запускать нужный для нее враппер. А если бы точным, то определяет не архитектуру, а просто в какой враппер нужно обернуть запуск файла с такой сигнатурой.
И дальше запускается qemu нужного вида и транслирует инструкции amd64 под arm
Мультиплатформенные образы: что это такое и зачем они нужны