Несколько ОТ - что это значит

Я хочу создать образ docker для проекта Linkurious на github, для которого требуются как база данных Neo4j, так и Node. js для запуска.

Мой первый подход состоял в том, чтобы объявить базовое изображение для моего изображения, содержащее Neo4j. Справочные документы не определяют "базовое изображение" любым полезным образом:

Базовое изображение: Изображение, у которого нет родителя, является базовым изображением

из которого я прочитал, что у меня может быть только базовое изображение, если это изображение не имеет базового изображения.

но что такое базовое изображение? означает ли это, что если я объявляю neo4j/neo4j в директиве FROM, что когда мое изображение будет запущено, база данных neo будет автоматически запускаться и быть доступной в контейнере на порту 7474?

чтение ссылки Docker (см. https://docs.docker.com/reference/builder/#from) Я вижу:

FROM может появляться несколько раз в пределах одного файла Docker для создания нескольких изображений. Просто запишите последний идентификатор изображения, полученный фиксацией перед каждой новой командой FROM.

Я хочу создать несколько изображений? казалось бы, я хочу, чтобы было одно изображение, содержащее содержимое других изображений, например. neo4j и Node.js

Я не нашел директивы для объявления зависимостей в справочном руководстве. нет ли зависимостей, как в RPM, где для запуска моего изображения вызывающий контекст должен сначала установить нужные ему изображения?

Я смущен...

Ответы

Ответ 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