@woyepol969

Docker Multi-stage билды не видят друг друга?

Dockerfile:
FROM php:7.4-fpm-alpine

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

FROM node:alpine


Потом когда пытаешься через docker exec просто проверить правильность установки, пишет что не найдено node (или php). То есть один образ перекрывает другой, как сделать чтобы они были установлены в рамках одной ОС? Или только через apt?
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ответы на вопрос 2
@yellowmew
Cloud infrastructure, monitoring engineer. SRE
Если не изменяет память, промежуточные билды нужны для генерации артефактов, использующихся в следующих билдах. Например, когда вы не хотите весь builddep таскать за собой в финальный контейнер (вам там нужно уже собранное ПО) и плодить\чистить слои.
Что в вашем случае лучше - даже и сказать не могу. Я бы изучил как собираются близкие по компонентам контейнеры на докерхаб
Ответ написан
Комментировать
gecube
@gecube
системный администратор, программист... все дела..
Если нужно два сервиса засунуть в один образ, то решением, к сожалению, является написание своего докерфайла. Который по структуре будет выглядеть как FROM какой-то из двух образов, а далее нужно скопировать (естественно, что с головой) инструкции по сборке второго образа в общий Dockerfile. Либо вообще самому наследоваться от базового образа с операционной системой и вручную его наполнять всеми необходимыми компонентами (php, node etc)

В простых случаях работает вариант вроде такого

FROM jrottenberg/ffmpeg:4.1-alpine as ffmpeg

FROM python:3.7-alpine3.8

RUN apk add --no-cache --update \
libgcc \
libstdc++ \
ca-certificates \
libcrypto1.0 \
libssl1.0 \
libgomp \
expat \
git

COPY --from=ffmpeg /usr/local /usr/local

.... a lot of stuff ....

ENTRYPOINT ["python", "capture_data.py"]


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

Войдите, чтобы написать ответ

Похожие вопросы