LINUX.ORG.RU

docker без overhead-a?

 , ,


1

3

Везде слышу, что докер, дескать, не имеет никакого переголовы… тьфу, overhead-a.

Допустим. Однако, чтобы запустить что-то в докере, нужно сначала запустить а) службу докера, и б) службу docker-composer

И это уже нехилый оверхед.

Ну не прекрасно ли это? Что имеют ввиду, когда говорят, что докер без оверхеда?



Последнее исправление: Kochergin (всего исправлений: 1)

нужно сначала запустить <…> б) службу docker-composer

Во-первых, docker-compose. Во-вторых, это не служба. В-третьих, никто не запрещает использовать docker без docker-compose.

И это уже нехилый оверхед.

$ cat >docker-compose.yml <<EOF
services:
  hello_world:
    image: busybox
    tty: true
    command: sh
EOF

$ sudo systemd-run --unit docker-compose --same-dir -p User=$(whoami) docker-compose up                                                                                   
Running as unit: docker-compose.service

$ systemctl status docker docker-compose -n0 | grep Memory
     Memory: 95.0M
     Memory: 14.6M

Огласите критерий «нехилости», т. к. пока что это заявление смахивает на клоунаду.

Что имеют ввиду, когда говорят, что докер без оверхеда?

Отсутствие потерь производительности при работе полезной нагрузки.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 4)

Явно не такие глупости.

Докер, как и многие другие[какие?] контейнеры, увеличивает количество переключений контекста при выполнении системных вызовов, не более. Большинство современных рантаймов минимизируют их количество, так что, если у тебя не дебильный апач или самопал на пыхе, падения производительности ты не почувствуешь. А если у тебя хайлоадный хайлоад или 50к открытых вебсокетов на машину, то вопрос явно не так звучать должен.

bo4ok
()

можно пользоваться podman, которому не нужна отдельная служба для запуска контейнеров (но таки нужна для запуска docker-compose, впрочем все равно получается куда компактнее чем docker).

Также можно сконвертировать докер-контейнер в формат OCI и запускать с помощью systemd-nspawn (если у тебя установлено сустемды в системе)

Lrrr ★★★★★
()
Ответ на: комментарий от intelfx

Чекнул, действительно нет.
Либо вещи с 19 года изменились, либо действительно в сабже была правдоподобная чушь. В своё оправдание могу сказать, что курс был пиратский <_>

bo4ok
()
Ответ на: комментарий от bo4ok

С другой стороны, хз.

Хост:

openssl speed sha256
Doing sha256 for 3s on 16 size blocks: 24462558 sha256's in 3.00s
Doing sha256 for 3s on 64 size blocks: 19227733 sha256's in 3.00s
Doing sha256 for 3s on 256 size blocks: 11744837 sha256's in 3.00s
Doing sha256 for 3s on 1024 size blocks: 4696548 sha256's in 3.00s
Doing sha256 for 3s on 8192 size blocks: 706774 sha256's in 2.99s
Doing sha256 for 3s on 16384 size blocks: 360009 sha256's in 3.00s

Докер:

openssl speed sha256
Doing sha256 for 3s on 16 size blocks: 12315799 sha256's in 3.00s
Doing sha256 for 3s on 64 size blocks: 11413132 sha256's in 3.00s
Doing sha256 for 3s on 256 size blocks: 8401561 sha256's in 2.99s
Doing sha256 for 3s on 1024 size blocks: 4005358 sha256's in 3.00s
Doing sha256 for 3s on 8192 size blocks: 695306 sha256's in 3.00s
Doing sha256 for 3s on 16384 size blocks: 356111 sha256's in 3.00s
Если бы не видел плюс-минус одинаковые числа, решил бы, что дело именно во времени смены контакста, на мелких блоках проигрыш большой, а большие идут примерно вровень.

bo4ok
()
Ответ на: комментарий от Lrrr

Вот тут говорят, что нужно запускать контейнеры с опциями --security-opt seccomp=unconfined --privileged, чтобы не было дополнительных проверок при переключении контекста.

https://stackoverflow.com/a/61053027
https://mamememo.blogspot.com/2020/05/cpu-intensive-rubypython-code-runs.html

rupert ★★★★★
()
Ответ на: комментарий от bo4ok

в alpine естественно медленнее. Но тут не докер виноват, а различные опции компиляции (как минимум -O2 против -Os) и glibc против musl - последний, как известно, ставит поддерживаемость кода большим приоритетом чем скорость.

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

Также можно сконвертировать докер-контейнер в формат OCI и запускать с помощью systemd-nspawn (если у тебя установлено сустемды в системе)

О, не знал про такое. Есть какая-то хорошая статья на примете про это?

zolden ★★★★★
()
Ответ на: комментарий от zolden

экспериментировал где-то год назад, про статьи не в курсе. Возможно тут уже все протухло, но у меня примерно так работало. Нужны тулзы skopeo и oci-image-tool

скачиваем контейнер:

$ skopeo copy docker://alpine:3.18 oci:alpine

конвертируем в формат OCI bundle:

$ oci-image-tool create --ref platform.os=linux ./alpine ./alpine-bundle

возможно придется поправить ociVersion в манифесте, т.к. nspawn принимает только 1.0.0:

$ jq '.ociVersion = "1.0.0"' alpine-bundle/config.json

запускаем:

$ doas systemd-nspawn -x --resolv-conf=bind-host --oci-bundle=$PWD/alpine-bundle

Шляпа с тех пор еще запилила специальную хрень, которая позволяет запускать контейнеры как сервисы сустемды: https://www.redhat.com/sysadmin/quadlet-podman но ее я не трогал, т.к. тут нужен podman, а я хотел запустить контейнер на сервере, установив туда как можно меньше зависимостей

Lrrr ★★★★★
()
Ответ на: комментарий от bo4ok

А теперь выкинь свои результаты и запусти в докере тот же дистрибутив, что и на хосте :-)

$ grep NAME /etc/os-release
NAME="Arch Linux"
PRETTY_NAME="Arch Linux"

$ openssl speed sha256
<...>
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
sha256           61863.34k   158380.93k   335137.96k   457451.62k   506975.57k   511989.08k

$ docker run --rm archlinux openssl speed sha256
<...>
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
sha256           60591.59k   154496.51k   320826.79k   454934.53k   507980.46k   512057.54k


$ podman run -it --rm archlinux openssl speed sha256
<...>
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
sha256           61166.87k   158273.79k   334752.51k   454429.01k   498229.77k   508925.27k

Полный лог здесь.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от rupert

Кажется, всё-таки при чём: https://stackoverflow.com/a/68275691/857932

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

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от Nervous

ага, видимо у меня это осталось в памяти со старых времён. В подмане постоянно что-то пилят. Пока в основном в правильном направлении, поэтому я им и пользуюсь.

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

Отвратительно!

Действительно, на убунте

Doing sha256 for 3s on 16 size blocks: 24963553 sha256's in 3.00s
Doing sha256 for 3s on 64 size blocks: 19350081 sha256's in 3.00s
Doing sha256 for 3s on 256 size blocks: 11981287 sha256's in 2.99s
Doing sha256 for 3s on 1024 size blocks: 4712219 sha256's in 3.00s
Doing sha256 for 3s on 8192 size blocks: 711006 sha256's in 3.00s
Doing sha256 for 3s on 16384 size blocks: 361205 sha256's in 3.00s

bo4ok
()
Ответ на: комментарий от bo4ok

ну на самом деле в alpine все не так печально. Основные тормоза там из-за медленного malloc в musl, но его никто не мешает заменить:

$ openssl speed sha256
Doing sha256 for 3s on 16 size blocks: 23832520 sha256's in 2.99s
$ apk add jemalloc
$ jemalloc.sh openssl speed sha256
Doing sha256 for 3s on 16 size blocks: 34026003 sha256's in 2.99s

например на jemalloc, но в репах есть и другие аллокаторы

Lrrr ★★★★★
()

Службы docker-compose не существует, это утилита для удобного вызова множества docker команд.

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

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

Что имеют ввиду, когда говорят, что докер без оверхеда?

Что докер не виртуалка, не нужно запускать отдельное ядро, отдельную пачку системных компонентов ОС, в докере чаще всего единственный процесс, и только с полезной нагрузкой. Производительность идентична нативной, как если бы просто запустили программу вне контейнера.

neumond
()
Ответ на: комментарий от neumond

Что докер не виртуалка, не нужно запускать отдельное ядро, отдельную пачку системных компонентов ОС, в докере чаще всего единственный процесс, и только с полезной нагрузкой. Производительность идентична нативной, как если бы просто запустили программу вне контейнера.

При чём тут производительность?

Докер требует отдельной службы, которая жрёт ресурсы.

Kochergin
() автор топика
Ответ на: комментарий от Kochergin

Несмотря на все недостатки докера, я не могу себе представить реальных задач, при которых накладные расходы на работу dockerd/containerd были бы выше погрешности.

shell-script ★★★★★
()
Ответ на: комментарий от Kochergin

Можешь поподробнее раскрыть мысль? В чём сакральное отличие службы докера от, например, SSH? Почему стоит вопрос искоренения служб ради экономии ресурсов? Почему именно докер среди всех самый проблемный?

neumond
()
Ответ на: комментарий от MOPKOBKA

Сетевые задержки в докере проявляются, когда у тебя сетевые нагрузки на гигабиты идут и важны микросекунды. Например, терабайтный кеш в оперативе внутри датацентра для highload-сервисов. А для игрового сервера в интернете, оверхеда из-за докера ты никогда в жизни не заметишь. Эти доли секунд потеряются на промежуточных маршрутизаторах.

И опять же. Сеть в докере - это ни разу не проблема того, что у тебя лишний процесс в системе крутится. А ТС именно на этот процесс жалуется.

shell-script ★★★★★
()
Последнее исправление: shell-script (всего исправлений: 1)
Ответ на: комментарий от neumond

Можешь поподробнее раскрыть мысль? В чём сакральное отличие службы докера от, например, SSH? Почему стоит вопрос искоренения служб ради экономии ресурсов? Почему именно докер среди всех самый проблемный?

  • «Докер не имеет оверхеда»
  • Докер требует запуска службы, которая и является оверхедом
Kochergin
() автор топика
Ответ на: комментарий от Kochergin

А, то есть это исключительно ради срача по поводу (не факт что существующего) лозунга, а не что-то из практики. Понимаю. Нарочно даже главную докер.ком просмотрел, вроде бы нигде ничего про вычислительные оверхеды не написано, только про оверхеды человеческие.

neumond
()
Ответ на: комментарий от neumond

А, то есть это исключительно ради срача по поводу (не факт что существующего) лозунга, а не что-то из практики. Понимаю. Нарочно даже главную докер.ком просмотрел, вроде бы нигде ничего про вычислительные оверхеды не написано, только про оверхеды человеческие.

Всё верно.

Kochergin
() автор топика
Ответ на: комментарий от aol

Как говорит наш любимый шеф: «Если человек идиот, то это надолго».

То есть, ты обречён? Не навсегда, но надолго.

Не, нельзя так! Надо - «позитивное мышление».

Kochergin
() автор топика