Сборка Docker оставляет промежуточные образы - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу построить на своем собственном композиторе: последний образ с версией Docker 18.06.1-ce, я использую этот скрипт для этого:

#!/bin/sh

wget -O Dockerfile https://raw.githubusercontent.com/composer/docker/edf4f0abf50da5d967408849434b9053a195b65f/1.7/Dockerfile
wget -O docker-entrypoint.sh https://raw.githubusercontent.com/composer/docker/master/1.7/docker-entrypoint.sh
chmod +x docker-entrypoint.sh
docker build -t mycomposer:latest .

, но помимо созданного образа

mycomposer: последний

В итоге у меня осталось около 10 изображений. Нет: нет.

docker image prune

не решает проблему.

каксборка композитора: последнее изображение формирует файлы здесь composer github не оставляя эти промежуточные изображения?

Я хочу сделать это вручную вместо использования команды FROM, потому что это первый шаг моего использованияDockerfile как шаблон и добавить, удалить команды в / из него, где я хочу.Но первым шагом является получение образа как есть из локального файла Docker вместо использования команды FROM.Я не хочу использовать команду FROM, потому что она подразумевает использование всех команд в Dockerfile, и я хочу лишь несколько из них в качестве отправной точки для моего пользовательского Dockerfile и некоторые другие, отредактированные из которых я буду создавать свой собственный образ.

В настоящее время мне удалось создать образ с использованием локального Dockerfile, но там много ненужных образов, но ни одного: нет

Actual repository

вместо репозиториявот так: enter image description here

, где после сборки есть только одно изображение.Единственное изображение на картинке выше получено из команды:

docker pull composer: последний

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

Но как получается, что после команды pull есть только один образ, а после сборки из того же Dockerfile, что и pull (как я полагаю), и несколько раз после сборки, и как избавиться от них нет: none images?

Ответы [ 4 ]

0 голосов
/ 14 сентября 2018

Изображения Docker состоят из слоев ; у каждого есть часть объединенной окончательной файловой системы изображения. Слои фактически образуют своего рода дерево, где у вас может быть базовый слой Ubuntu, с дочерним элементом, который устанавливает определенный пакет Debian, с дочерним элементом, который добавляет код вашего приложения и так далее. Каждый из этих слоев фактически может использоваться независимо как изображение, но вы не можете удалить изображение базового слоя, если под ним находится другое изображение, которое зависит от него.

Вы используете docker image -a, в котором перечислены все изображений, даже те, которые существуют только в качестве базовых слоев. Это создает кучу «лишних» <none> <none> изображений, которые являются базовыми слоями. Они безвредны и необходимы, и не требуют никаких дополнительных ресурсов. В общем, использование опции -a на самом деле ничего вам не говорит, и я бы просто пропустил это.

0 голосов
/ 14 сентября 2018

Мой подход - создать образ из Dockerfile:

клонировать репозиторий из github.

git clone https://github.com/composer/docker.git .
cd 1.7 
docker build -t mycomposer:latest .

Вот и все.

0 голосов
/ 14 сентября 2018

Пожалуйста, обратитесь к https://docs.docker.com/engine/docker-overview/#docker-objects

Каждая инструкция в Dockerfile создает слой на изображении. Когда вы изменяете Dockerfile и перестраиваете изображение, восстанавливаются только те слои, которые были изменены. Это является частью того, что делает изображения такими легкими, небольшими и быстрыми по сравнению с другой виртуализацией

Следовательно, docker image prune не удалит их. Без этих слоев ваше изображение не будет работать.

0 голосов
/ 14 сентября 2018

Изображения являются кешем сборки. Они позволяют докеру значительно ускорить будущие сборки того же образа. Их фактическое использование диска близко к 0, поскольку слои совместно используются изображениями, единственное влияние - это некоторые метаданные и каталоги json. После того, как вы создадите другое изображение и удалите пометку с ранее созданного изображения, обрезка удалит неиспользуемые оборванные изображения.

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