ПреамбулаDocker не работает, как ожидалось
Я пишу немного презентации перечислить некоторые «ошибки» при использовании Докер, и я столкнулся с одним из моих собственных.
Объясняя опасности, позволяющие Docker работать без ограничений памяти, я обнаружил, что он не ведет себя так, как я ожидал.
Я создал изображение докеров с PHP-скриптом, который будет рекурсивно создавать массивы для использования памяти, сообщая, сколько памяти в настоящее время используется. Скрипт убивает себя в 1gb, если ограничение памяти не установлено.
Вы можете получить изображение здесь: https://hub.docker.com/r/gisleburt/my-memory-hog
Вы можете увидеть исходный код здесь: https://github.com/Gisleburt/my-memory-hog
Мое ожидание было то, что следующий будет препятствовать сценарий, выходящие за рамки 128mb памяти.
docker run -it --memory=128m --memory-swap=0 gisleburt/my-memory-hog
Однако на OSX (как родной, и докер-машина, использующая драйвер виртуального окна), докер на самом деле сценарий просто перед тем 250МБ. На Ubuntu скрипт достигает 1gb и сам убивает.
Страннее еще, если мы исследуем то, что происходит с docker stats
, мы можем видеть, что контейнер на самом деле не переходить это ограничение по памяти. Фактически, работая с --memory=4m
на Ubuntu, docker stats
все еще говорит, что он не использует больше, чем 4 Мб, хотя скрипт завершен на 1 ГБ. На Mac ограничение на 4 МБ убивает скрипт вокруг метки 5-6mb.
Я предполагаю, что мне не хватает чего-то о том, как распределена память, но я не могу понять, что это такое.
Вопрос
Почему скрипт в контейнере Docker появляются использовать больше памяти, чем контейнер Докер? Что происходит с памятью внутри и снаружи контейнера?
Version Info
Mac Клиент:
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Thu Oct 27 00:09:21 2016
OS/Arch: darwin/amd64
Experimental: true
Mac Native:
Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Wed Oct 26 23:26:11 2016
OS/Arch: linux/amd64
Mac Virtual Box Машина:
Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Thu Oct 27 00:09:21 2016
OS/Arch: linux/amd64
Experimental: true
Ubuntu Клиент:
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Wed Oct 26 22:01:48 2016
OS/Arch: linux/amd64
Ubuntu Двигатель:
Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Wed Oct 26 22:01:48 2016
OS/Arch: linux/amd64