Установка Docker Hub вер­сий обра­зов для ARM

Docker

Сей­час с Docker слож­ностей прак­тичес­ки нет. При­ложе­ние дав­но натив­ное, уста­нов­ка — стан­дар­тная. Единс­твен­ный нюанс, о котором хочет­ся рас­ска­зать, — это отсутс­твие в Docker Hub вер­сий некото­рых обра­зов для ARM. А еще быва­ет, что образ есть, но в нем несов­мести­мые биб­лиоте­ки, которые нуж­но переком­пилиро­вать. Если в пер­вом слу­чае все оче­вид­но, то о вто­рой проб­леме я бы хотел погово­рить под­робнее.

Нап­ример, в сво­ем про­екте я стол­кнул­ся с тем, что невоз­можно соб­рать модуль [email protected] для Node.js в базовом обра­зе Node из Docker Hub.

Sharp — это высокос­корос­тной модуль Node.js для пре­обра­зова­ния боль­ших изоб­ражений рас­простра­нен­ных фор­матов (JPEG, PNG, AVIF и WebP) в более мел­кие.

В этом популяр­ном обра­зе были проб­лемы с зависи­мос­тями. Как ока­залось, стол­кнул­ся с ними не я один.

Суть проб­лемы — в том, что в обра­зе Docker для сбор­ки зависи­мос­тей пакета sharp необ­ходима биб­лиоте­ка libvips вер­сии 8.10.6 или стар­ше, которая идет с glibc 2.29+. В сво­ем фай­ле сбор­ки я исполь­зовал образ node:16.3-buster-slim с glibc 2.24. Понадо­билось вруч­ную собирать под­ходящую вер­сию libvips.

Мой Dockerfile:

Лог уста­нов­ки Sharp на node:16.3-buster-slim:

В такой ситу­ации нуж­но или пересо­бирать libvips для ARM64, или же исполь­зовать более све­жий образ опе­раци­онной сис­темы. Нап­ример, мож­но взять node:14-alpine, который уже содер­жит ском­пилиро­ван­ные для ARM бинар­ники и занима­ет на 700 Мбайт мень­ше, чем Debian.

Я выб­рал хар­дкор­ный вари­ант перес­борки биб­лиоте­ки libvips под ARM64. Добавил нес­коль­ко строк в Dockerfile:

И собираю без оши­бок.

РЕКОМЕНДУЕМ:
Повышаем безопасность Docker

В общем, ког­да работа­ешь на менее популяр­ной архи­тек­туре, это может вре­мя от вре­мени при­водить к проб­лемам вро­де той, что я опи­сал. Но зато теперь вы зна­ете, что делать в таких слу­чаях!

Понравилась статья? Поделиться с друзьями:
Добавить комментарий