Создание двух изображений докеров с разными тегами с помощью docker-compose
В настоящее время я собираюсь развернуть Java-приложение с Docker и K8s. Поскольку я использую кластер Raspberry Pi Kubernetes, я хочу сгенерировать два изображения: одно для платформы x86 и одно для arm32v7 (для тестирования в кластере Raspberry). Цель состоит в том, чтобы сгенерировать два образа докеров с разными тегами с помощью одного файла Docker и отправить полученные изображения в Docker Hub. Я использую следующий файл Dockerfile.
FROM openjdk:8-alpine as x86
RUN mkdir -p /usr/src/app
COPY project/generated/distributions/executable/launch.jar /usr/src/app
WORKDIR /usr/src/app
CMD java -jar launch.jar
FROM arm32v7/adoptopenjdk:8-jre-hotspot-bionic as arm32
RUN mkdir -p /usr/src/app
COPY project/generated/distributions/executable/launch.jar /usr/src/app
WORKDIR /usr/src/app
CMD java -jar launch.jar
Мой docker-compose.yml
выглядит так:
version: '3.7'
services:
x86:
build:
context: .
dockerfile: Dockerfile
target: project:x86_64
arm32:
build:
context: .
dockerfile: Dockerfile
target: project:arm32
С помощью docker build .
работает, но в результате получаются два безымянных и немаркированных изображения. Я пробовал множество вещей, например, жестко закодировав путь к файлу докеров и тому подобное. Несмотря на все усилия, я получаю довольно неопределенную ошибку:
ERROR: failed to reach build target project:x86_64
Любая идея приветствуется.
Изменить: я взял идею отсюда
1 ответ
Для всех, кому интересно, я понял это с небольшой помощью.
Целевое определение внутри части сборки docker-compose.yml НЕ предназначено для определения целевого образа. Он определяет целевой этап. Чтобы указать изображение, добавьте часть изображения на несколько этапов. Также нет пустых строк между командами внутри Dockerfile, интерпретатор остановится после пустой строки. Вот исправленный рабочий код:
Dockerfile:
FROM openjdk:8-alpine as x86
RUN mkdir -p /usr/src/app
COPY project/generated/distributions/executable/launch.jar /usr/src/app
WORKDIR /usr/src/app
CMD java -jar launch.jar
FROM arm32v7/adoptopenjdk:8-jre-hotspot-bionic as arm32
RUN mkdir -p /usr/src/app
COPY project/generated/distributions/executable/launch.jar /usr/src/app
WORKDIR /usr/src/app
CMD java -jar launch.jar
И docker-compose.yml:
version: '3.7'
services:
x86:
build:
context: .
dockerfile: Dockerfile
target: x86
image: foo.bar.example:x86_64
arm32:
build:
context: .
dockerfile: Dockerfile
target: arm32
image: foo.bar.example:arm32