32-битное изображение докера с другими изображениями, примененными к нему - PullRequest
0 голосов
/ 24 июня 2019

У меня есть 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 бит, как я ожидал.

Как я могу сделать эту работу?

1 Ответ

1 голос
/ 24 июня 2019

что не так с 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

надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...