Статьи

Показать слои изображения Docker

Каждая возможность говорить — это урок обучения и, следовательно, новая возможность поделиться. Этот блог посвящен одному из вопросов, которые беспокоили меня последние несколько дней. Речь идет о том, как показать различные слои изображения Docker и их размеры после загрузки.

Этим утром меня пригласили поговорить о Docker для разработчиков Java в Перу JUG. Запись теперь доступна:

Реальное содержание начинается с 5:27.

Давайте рассмотрим вопрос сейчас.

Каждое изображение Docker состоит из серии слоев. Вот цитата из docs.docker.com :

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

Как работает образ Docker?

Точный размер изображения можно легко увидеть с помощью docker images :

1
2
3
docker images couchbase
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
couchbase           latest              45abdd57689a        3 weeks ago         372 MB

Команда для отображения различных слоев и их размера — это docker history :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
docker history couchbase
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
45abdd57689a        3 weeks ago         /bin/sh -c #(nop) VOLUME [/opt/couchbase/var]   0 B                
dd8c5611343d        3 weeks ago         /bin/sh -c #(nop) EXPOSE 11207/tcp 11210/tcp    0 B                
30852bbad62b        3 weeks ago         /bin/sh -c #(nop) CMD ["couchbase-server"]      0 B                
5537747ea12f        3 weeks ago         /bin/sh -c #(nop) ENTRYPOINT &{["/entrypoint.   0 B                
e8a83a5448df        3 weeks ago         /bin/sh -c #(nop) COPY file:cbb44c9c65b64a9dc   182 B              
18165b90fefa        3 weeks ago         /bin/sh -c #(nop) COPY file:34e32c52f0895191f   389 B              
5f37b8bdc5a6        3 weeks ago         /bin/sh -c wget -N $CB_RELEASE_URL/$CB_VERSIO   212.1 MB           
1a8da511d01b        3 weeks ago         /bin/sh -c groupadd -g 1000 couchbase && user   328.7 kB           
d9b2222c39b4        3 weeks ago         /bin/sh -c #(nop) ENV CB_VERSION=4.0.0 CB_REL   0 B                
815f08b3c781        3 weeks ago         /bin/sh -c apt-get update &&     apt-get inst   23.57 MB           
fc38f156c0ea        3 weeks ago         /bin/sh -c #(nop) MAINTAINER Couchbase Docker   0 B                
2a7a952931ec        3 weeks ago         /bin/sh -c #(nop) CMD ["/bin/bash"]             0 B                
10f1b5844a9c        3 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/   1.911 kB           
23c388b926b6        3 weeks ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic   156.2 kB           
b45376f323f5        3 weeks ago         /bin/sh -c #(nop) ADD file:4a9e089e81d6581a54   135.9 MB

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

Соответствующий файл Docker для этого изображения находится по адресу github.com/couchbase/docker/blob/master/enterprise/couchbase-server/4.0.0/Dockerfile .

Теперь я могу сравнить Dockerfile с точным размером и легко найти, какие слои изображения самые большие. Например, крупнейшие участники этого изображения Couchbase показаны ниже:

--no-trunc может быть указан как дополнительная опция CLI для history чтобы показать полную команду, выполненную для построения слоя.

Ссылка: Покажите Layers of Docker Image от нашего партнера JCG Аруна Гупты в блоге Miles to go 2.0… .