Как Docker работает с разными архитектурами?
И что происходит, когда на разных архитектурах мы пулим один и тот же образ? Скажем, node:15.4.0-alpine3.12?
Если открыть ссылку, то можно увидеть информацию об образе. Но что более важно, можно увидеть переключатель OS/ARCH. На самом деле под каждую архитектуру собирается и публикуется отдельный образ, а затем эти они объединяются общим тегом. Саму структуру манифеста можно посмотреть через
Докер сам выберет подходящий образ под текущую архитектуру, но на собственных процессорах эпл так же будет поддержка и amd64 через QEMU, но, само-собой, работать в разы медленнее, т.к. это эмуляция. На текущий момент, если нет образа под arm64, то докер просто падает и говорит, что не нашёл подходящий образ. Это решается через явное указание платформы
Что ещё более непонятно, так это насколько безопасно (с точки зрения стабильности) разрабатывать на одной архитектуре, а в проде использовать другую? ARM инстансы, хоть и существуют (у amazon есть тип A1, который стоит дешевле EC2 и при этом эффективней), но пока что не пользуются популярностью. Во многом это обусловленно как раз таки архитектурой, которую мы используем для локальной разработки, так что здесь сложно определить где курица, а где яйцо.
И что происходит, когда на разных архитектурах мы пулим один и тот же образ? Скажем, node:15.4.0-alpine3.12?
Если открыть ссылку, то можно увидеть информацию об образе. Но что более важно, можно увидеть переключатель OS/ARCH. На самом деле под каждую архитектуру собирается и публикуется отдельный образ, а затем эти они объединяются общим тегом. Саму структуру манифеста можно посмотреть через
docker manifest inspect --verbose node:15.4.0-alpine3.12
. Чтобы упростить работу с такими образами, докер будут использовать buildx. Подробней можно почитать вот здесь.Докер сам выберет подходящий образ под текущую архитектуру, но на собственных процессорах эпл так же будет поддержка и amd64 через QEMU, но, само-собой, работать в разы медленнее, т.к. это эмуляция. На текущий момент, если нет образа под arm64, то докер просто падает и говорит, что не нашёл подходящий образ. Это решается через явное указание платформы
--platform linux/amd64
. Пока что непонятно как они будут решать этот момент, т.к. указывать явно не очень удобно.Что ещё более непонятно, так это насколько безопасно (с точки зрения стабильности) разрабатывать на одной архитектуре, а в проде использовать другую? ARM инстансы, хоть и существуют (у amazon есть тип A1, который стоит дешевле EC2 и при этом эффективней), но пока что не пользуются популярностью. Во многом это обусловленно как раз таки архитектурой, которую мы используем для локальной разработки, так что здесь сложно определить где курица, а где яйцо.