应用了其他图像的 32 位 docker 图像
32bit docker image with other images applied to it
我有一个包含以下内容的 Dockerfile:
FROM i386/alpine
WORKDIR /tmp/src/mybuild
ADD . /tmp/src/mybuild
FROM travisci/travis-build
我的目标是最终得到一个包含两个图像内容的 32 位图像。在 运行ning sudo docker build --rm --tag travis-32 .
之后,构建了 "image",但是当我 运行 sudo docker run -it travis-32 /bin/bash
时,我最终进入了 bash 终端并输入 uname -m
给我 x86_64
,这显然不是我预期的 32 位。
我怎样才能使这个工作?
Dockerfile
有什么问题:
问题中提到的Dokcerfile
是一个multi-stage构建文件。每个阶段都从 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
希望这对您有所帮助。
我有一个包含以下内容的 Dockerfile:
FROM i386/alpine
WORKDIR /tmp/src/mybuild
ADD . /tmp/src/mybuild
FROM travisci/travis-build
我的目标是最终得到一个包含两个图像内容的 32 位图像。在 运行ning sudo docker build --rm --tag travis-32 .
之后,构建了 "image",但是当我 运行 sudo docker run -it travis-32 /bin/bash
时,我最终进入了 bash 终端并输入 uname -m
给我 x86_64
,这显然不是我预期的 32 位。
我怎样才能使这个工作?
Dockerfile
有什么问题:
问题中提到的Dokcerfile
是一个multi-stage构建文件。每个阶段都从 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
希望这对您有所帮助。