Docker будет только толкать измененные слои, поэтому кажется, что что-то в вашем рабочем процессе не совсем правильно. Это будет намного яснее, если вы используете Dockerfile
, так как каждая команда явно создает слой, но даже с docker commit
результаты должны быть одинаковыми.
Пример - запустите контейнер из изображения ubuntu
и запустите apt-get update
, а затем передайте контейнер новому изображению. Теперь запустите docker history
, и вы увидите новые изображения добавляет слой поверх Баш образа, который имеет дополнительное состояние от запуска APT обновления:
> docker history sixeyed/temp1
IMAGE CREATED CREATED BY SIZE COMMENT
2d98a4114b7c About a minute ago /bin/bash 22.2 MB
14b59d36bae0 7 months ago /bin/sh -C#(nop) CMD ["/bin/bash"] 0 B
<missing> 7 months ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 1.895 kB
<missing> 7 months ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic 194.5 kB
<missing> 7 months ago /bin/sh -C#(nop) ADD file:620b1d9842ebe18eaa 187.8 MB
В этом случае, в диф между ubuntu
и моей temp1
Изображение представляет собой слой 22 МБ 2d98
.
Теперь, если я запускаю новый контейнер из temp1
, создайте пустой файл и запустить docker commit
, чтобы создать новый образ, новый слой только имеет измененный файл:
> docker history sixeyed/temp2
IMAGE CREATED CREATED BY SIZE COMMENT
e9ea4b4963e4 45 seconds ago /bin/bash 0 B
2d98a4114b7c About a minute ago /bin/bash 22.2 MB
14b59d36bae0 7 months ago /bin/sh -C#(nop) CMD ["/bin/bash"] 0 B
<missing> 7 months ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 1.895 kB
<missing> 7 months ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic 194.5 kB
<missing> 7 months ago /bin/sh -C#(nop) ADD file:620b1d9842ebe18eaa 187.8 MB
Когда я push
первое изображение, только уровень 22 МБ будет загружен - остальные будут установлены с ubuntu
, который уже находится в концентраторе. Если я нажимаю второе изображение, только измененный слой получает толкнул - temp1
слой монтируется из первого толчка:
> docker push sixeyed/temp2
The push refers to a repository [docker.io/sixeyed/temp2]
f741d3d3ee9e: Pushed
64f89772a568: Mounted from sixeyed/temp1
5f70bf18a086: Mounted from library/ubuntu
6f32b23ac95d: Mounted from library/ubuntu
14d918629d81: Mounted from library/ubuntu
fd0e26195ab2: Mounted from library/ubuntu
Так что, если ваши толчки загрузки 600 Мб, вы либо вносить изменения 600MB к изображению, или ваш рабочий процесс не позволяет Docker правильно использовать слои.
Возможный дубликат [Повторное построение изображения докеров с дополнительными изменениями в файле Dockerfile) (http://stackoverflow.com/questions/38613216/rebuild-same-docker-image-with-only-the-additional-changes -in-the-dockerfile) – Evedel