A7e*_*hin 4 build docker docker-compose multiarch
我目前正在使用 Docker 和 K8s 部署 Java 应用程序。由于我使用的是 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
Run Code Online (Sandbox Code Playgroud)
我的docker-compose.yml看起来像这样:
version: '3.7'
services:
x86:
build:
context: .
dockerfile: Dockerfile
target: project:x86_64
arm32:
build:
context: .
dockerfile: Dockerfile
target: project:arm32
Run Code Online (Sandbox Code Playgroud)
使用docker build .有效,但会产生两个未命名、未标记的图像。我尝试过很多事情,比如硬编码 Dockerfile 的路径等等。尽管我很努力,但我还是收到以下错误:
ERROR: failed to reach build target project:x86_64
Run Code Online (Sandbox Code Playgroud)
任何想法表示赞赏。
编辑:我从这里得到了这个想法
对于任何想知道的人,我在一点帮助下找到了答案。
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
Run Code Online (Sandbox Code Playgroud)
和 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1659 次 |
| 最近记录: |