Создание двух изображений докеров с разными тегами с помощью 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
Другие вопросы по тегам