Как пробросить нужный бинарник внутри docker-compose виртуалок?

Рейтинг: 0Ответов: 1Опубликовано: 01.02.2023

В docker-compose.yml есть виртуалка workspace в которой собраны инструменты для разработчиков и админов (mc, curl, 7z, nano). Но помимо этого - нужен npm. Я НЕ хочу пихать туда скрипт по установке, а хочу пробросить /usr/bin/npm из официального контейнера. Как это сделать согласно лучшим практикам? Понятно, что как-то через volumes, но мы же хотим не какой-то /my-files/ кидать, а системный каталог(и). Как избежать коллизий перезаписывания?

Ответы

▲ 1Принят

Используйте многофазовую сборку образа:

FROM node:latest AS node

FROM alpine:latest

... тут все команды для создания образа как и раньше
... т.е. установка mc, curl, 7z, nano

COPY --from=node /usr/bin/npm /usr/bin/npm

Чтоб избежать проблем с совместимостью используйте такую же версию базового образа на второй фазе, которая используется в образе node на первой фазе. В примере я использовал alpine:latest, если замените, то и версию образа node нужно поменять.

И еще по терминологии замечание: в докере нет "виртуалок", есть образы и контейнеры. В docker-compose есть сервисы.