Создание двух docker изображений с разным тегом с docker -композицией - PullRequest
0 голосов
/ 03 апреля 2020

В настоящее время я нахожусь на пути к развертыванию приложения java с Docker и K8s. Поскольку я использую кластер Raspberry Pi Kubernetes, я хочу создать два изображения: одно для платформы x86 и одно для arm32v7 (для тестирования на кластере Raspberry). Цель состоит в том, чтобы с помощью одного файла Dockerfile создать два 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 Ответ

1 голос
/ 03 апреля 2020

Для тех, кто интересуется, я понял это с небольшой помощью.

Определение цели внутри части сборки 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: io.klib.aries.example:x86_64
  arm32:
    build:
      context: .
      dockerfile: Dockerfile
      target: arm32
    image: io.klib.aries.example:arm32
...