R
R
rad_li2022-02-22 10:58:22
Docker
rad_li, 2022-02-22 10:58:22

Large application size in docker norms?

I'm learning docker, interesting technology. But I'm confused by the size of the files.

For example: installed the application in the usual way pacman -S package_name. The occupied size on the disk is about 150 MB. I installed the same thing via docker - it turned out 971 MB (this is how portainer shows).
I compared several more applications, always the size through the docker exceeds at least 3-4 times.

I understand that inside the docker image there are not only the application itself, but also dependencies. But can the difference really be that big? Or am I doing something wrong?

Answer the question

In order to leave comments, you need to log in

3 answer(s)
Михаил, 2022-02-22
@rad_li

Вы не очень понимаете что такое образ докера. Образ докера содержит всё для запуска приложения, кроме ядра ОС (ядро используется из хост-системы). А в зависимости от того как собирали образ - может быть и что-то лишнее, нафиг не нужное для запуска приложения. Но автору образа было лень это выпиливать из него (или он на это забил). Собственно вот и вся разница. И те библиотеки, которые у вас уже есть в системе (и которые вы не учитываете при расчетах занимаемого им места) - докер притащит с собой (это наверняка будут другие версии библиотек, но факт в том что он их с собой притащит). Например, если вы говорите о Java-приложении, в системе наверняка есть JVM. И вы увидите только размер jar-файла и каких-то обвязок вокруг него. А в докере это будет плюс JVM, плюс библиотеки для JVM, плюс, плюс, плюс... Вот и набегает размер образа.
Общий размер образов докера можно сократить, если все образы будут использовать одну и ту же базу (в терминах докера layer). Но это отдельная тема, в которую я сейчас углубляться не буду.

Василий Банников, 2022-02-22
@vabka

Докер тащит с собой все зависимости, в том числе и ОС.
Это плата за изолированность

A
Alexander Karabanov, 2022-02-22
@karabanov

Clean the package cache (this should be done on the same layer in which the package is installed), read about how layers are arranged and copy-on-write.
Use dive to find the space-occupying junk and make sure the Dockerfile removes it (remove on the same layer it's added to).
The large size of the image is not good.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question