Многоступенчатый Dockerfile - PullRequest
1 голос
/ 02 июня 2019

Я нашел докер-файл для Android SDK

FROM openjdk:8

RUN apt-get update && \
    apt-get install -y openjdk-8-jdk wget unzip && \
    rm -rf /var/lib/apt/lists/*

ENV ANDROID_HOME /opt/android-sdk-linux

RUN mkdir -p ${ANDROID_HOME} && \
    cd ${ANDROID_HOME} && \
    wget -q https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip -O android_tools.zip && \
    unzip android_tools.zip && \
    rm android_tools.zip

ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/platform-tools

RUN yes | sdkmanager --licenses

Я подключаюсь к образу докера. АПК здание работает нормально.

Но мой проект требует разных зависимостей. Еще один контент докер-файла находится ниже:

FROM python:3.7-alpine

COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt

Это работает для приложения Pyhton.

Но как мне объединить эти файлы?

Ниже настройки не работают:

FROM openjdk:8

RUN apt-get update && \
    apt-get install -y openjdk-8-jdk wget unzip && \
    rm -rf /var/lib/apt/lists/*

ENV ANDROID_HOME /opt/android-sdk-linux

RUN mkdir -p ${ANDROID_HOME} && \
    cd ${ANDROID_HOME} && \
    wget -q https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip -O android_tools.zip && \
    unzip android_tools.zip && \
    rm android_tools.zip

ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/platform-tools

RUN yes | sdkmanager --licenses
FROM python:3.7-alpine

COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt

Я подключаю образ докера. Apk сборка не удалась. Ошибка здесь:

ОШИБКА: JAVA_HOME не установлен и команда 'java' не найдена в ваш путь.

1 Ответ

0 голосов
/ 02 июня 2019

При использовании многоэтапной сборки docker каждый этап начинается с FROM и не накапливает файлы с предыдущих этапов (и не переменные среды), вам необходимо вручную скопировать нужные файлы.Например, в следующем Dockerfile встроенный образ будет таким же, как openjdk:8, и не будет содержать ни ваше приложение, ни python.

FROM python:3.7-alpine

COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt

FROM openjdk:8

Чтобы скопировать файлы с предыдущего этапа, вам нужно указать, какие файлы и с какого этапа копировать:

FROM python:3.7-alpine AS python

COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt

FROM openjdk:8
WORKDIR /app
COPY --from=python /app .

Многоступенчатая сборка используется в основном, если вам нужно что-то вроде компиляторатолько для процесса сборки, а не для окончательного изображения.он позволяет вам использовать изображение с зависимостями, которые вам нужны в сборке, а затем оставить их позади и использовать только конечный продукт и зависимости, необходимые для выполнения.

Для вашего Dockerfile, если вам нужны и python, и java multi-стадийная сборка не поможет, вы должны искать базовый образ, содержащий оба, или начинать с одного изображения (скажем, java), а затем вручную устанавливать другое (python).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...