Я только учусь использовать Docker, поэтому, пожалуйста, потерпите меня.
Я хочу создать образ докера, который строится поверх другого образа докера, который я уже создал. В моем файле докеров я ссылаюсь на определенную версию базового образа, но для удобства сопровождения я хочу упомянуть эту версию только один раз в файле докеров. Документация dockerfile, кажется, подсказывает мне, что я могу использовать ключевое слово «AS» для сопоставления символического имени с конкретным тегом версии. В параметре --from следующей инструкции COPY я должен иметь возможность использовать символическое имя вместо конкретного тега image:version.
Это мой докерфайл:
FROM base:2.0 AS my_base
WORKDIR /child2
COPY --from=my_base /base /child2
COPY . /child2
CMD ["python", "-u", "child2.py"]
Когда я строю, используя этот файл докеров с
docker build -t child2 .
Я получаю следующую ошибку:
Step 1/5 : FROM base:2.0 AS my_base
---> c5e2be45da55
Step 2/5 : WORKDIR /child2
---> Using cache
---> 1b5a4ad816c9
Step 3/5 : COPY --from=my_base /base /child2
invalid from flag value my_base: pull access denied for my_base, repository does not exist or may require 'docker login'
Я использовал «вход в докер», но снова получил ту же ошибку.
Я делаю какую-то ошибку в синтаксисе dockerfile, или мое предположение об использовании ключевого слова AS просто неверно?
Я использую Docker версии 18.09.2 в Windows 10.


FROM...AS для многоэтапные сборки:
With multi-stage builds, you use multiple FROM statements in your Dockerfile. Each FROM instruction can use a different base, and each of them begins a new stage of the build. You can selectively copy artifacts from one stage to another, leaving behind everything you don’t want in the final image. To show how this works, let’s adapt the Dockerfile from the previous section to use multi-stage builds.
В вашем файле докеров есть только один этап, бессмысленно его использовать, допустимый вариант использования следующий:
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"]
Здесь созданный двоичный файл на первом этапе (builder) можно скопировать на второй этап с новой базой (FROM alpine:latest). Преимущество в том, что это может уменьшить настройку цепочки инструментов golang на втором этапе, просто используйте двоичный файл из первого этапа.
Он просто используется в многоэтапной сборке, чтобы уменьшить конечное целевое изображение, чтобы в нем было слишком много бесполезных вещей, официальное руководство, я думаю, всегда является хорошей ссылкой.
Когда я добавляю второй фиктивный оператор FROM после первого, команда COPY работает так, как я ожидаю. Но я полагаю, что мой вариант использования действительно не соответствует тому, для чего было предназначено ключевое слово AS.