что не так с Dockerfile
:
Упомянутый в вопросе Dokcerfile
является многоступенчатым файлом сборки. Каждый этап начинается с FROM
, где предполагается копировать артефакты из первого этапа сборки во второй, чтобы в конце получить изображение меньшего докера для использования в производстве.
в упомянутом 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
надеюсь, это поможет.