Ответ 1
что такое базовое изображение?
Набор файлов, плюс EXPOSE
'd порты, ENTRYPOINT
и CMD
.
Вы можете добавлять файлы и создавать новый образ на основе этого базового образа, с новым Dockerfile
начинающимся с директивы FROM
: образ, упомянутый после FROM
является "базовым образом" для вашего нового образа.
Означает ли это, что если я
neo4j/neo4j
в директивеFROM
, то при запуске моего образа база данных neo автоматически запустится и будет доступна в контейнере через порт 7474?
Только если вы не перезаписываете CMD
и ENTRYPOINT
.
Но само по себе изображение достаточно: вы бы использовали FROM neo4j/neo4j
если бы вам пришлось добавлять файлы, связанные с neo4j
для вашего конкретного использования neo4j
.
FROM
может появляться несколько раз в одном Dockerfile
не : есть предложение удалить эту "функцию" в любом случае (выпуск 13026)
Выпуск 14412 упоминает:
Использование нескольких
FROM
самом деле не особенность, а ошибка (да ладно, ограничение жесткое, и есть несколько вариантов использования несколькихFROM
в Dockerfile).
Обновление май 2017 (18 месяцев спустя), с докером (моби) 17.05-ce.
Несколько FROM могут быть использованы в одном Dockerfile.
См. " Шаблон сборки и многоэтапная сборка в Docker " (автор Алекс Эллис) и PR 31257, автор Тынис Тийги.
До:
Шаблон компоновки включает использование двух образов Docker - один для выполнения сборки, а другой для отправки результатов первой сборки без потери цепочки сборки и инструментов в первом изображении.
После:
Общий синтаксис включает в себя добавление
FROM
дополнительного времени в вашем Dockerfile - в зависимости от того, какой последний операторFROM
является конечным базовым образом. Для копирования артефактов и выводов из промежуточных изображений используйтеCOPY --from=<base_image_number>
.
Первая часть Dockerfile:
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 .
Вторая часть того же (!) Dockerfile:
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"]
В результате получилось бы два изображения: одно для построения, другое только с полученным приложением (намного, намного меньше)
REPOSITORY TAG IMAGE ID CREATED SIZE
multi latest bcbbf69a9b59 6 minutes ago 10.3MB
golang 1.7.3 ef15416724f6 4 months ago 672MB