32位Docker图像与其他图像应用于其



我有一个dockerfile,其中包括:

FROM i386/alpine
WORKDIR /tmp/src/mybuild
ADD . /tmp/src/mybuild
FROM travisci/travis-build

我的目标是最终获得32位图像,其中包含两个图像中的内容。运行sudo docker build --rm --tag travis-32 .后,构建了"图像",但是当我运行sudo docker run -it travis-32 /bin/bash时,我最终进入了bash终端并输入uname -m给了我x86_64,这显然不是我所期望的32位。

我该如何完成此工作?

Dockerfile

有什么问题

问题中提到的Dokcerfile是一个多阶段构建文件。每个阶段都始于FROM,其中应该将工件从第一个构建阶段复制到第二个阶段,以实现较小的Docker映像,以便在生产中使用。

在提到的Dokcerfile中:

  • 第一阶段将某些文件复制到i386/alpine图像:
FROM i386/alpine
WORKDIR /tmp/src/mybuild
ADD . /tmp/src/mybuild
  • 那么所做的一切都被忽略了,而拍摄另一个图像:
FROM travisci/travis-build

因此,最终结果是travisci/travis-build的精确副本。

关于32b,64b问题:

通常在32B下汇编的内容仅在32B下工作,为了使其在64B下运行,您需要在64B下进行编译(除了某些语言之类的GO,您可以在其中定义目标平台(,所以一个需要小心。

示例:

使用COPY --from=语句,请注意伪像从舞台转移到另一个舞台的位置:

FROM golang:1.7.3 as builder
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html  
COPY app.go    .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM alpine:latest  
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /go/src/github.com/alexellis/href-counter/app .
CMD ["./app"] 

可以在官方文档中找到更多信息:Docker Multistage-Builds

希望这会有所帮助。

最新更新