Как стать автором
Поиск
Написать публикацию
Обновить

Зачем я использую контейнеры как виртуалки: опыт python-разработчика

Время на прочтение12 мин
Количество просмотров8.9K
Всего голосов 9: ↑8 и ↓1+12
Комментарии11

Комментарии 11

Интересный опыт) Я немного зелен в плане контейнеров(трогал их, но не так чтобы сильно) и заметил как много они едят пространства на ПК. А у вас запущенно просто куча всего, как такое удалось?

P.S:Самое тяжёлое что я разворачивал - django+nginx+postgres и эта махина ела +- 6GB ОЗУ(помню что около этого числа, давненько было)

У меня конфигурация с 16 ГБ оперативки, этого пока хватает на 23 контейнера. В большинстве из них запущен только процесс bash, пока я не запущу какую-то команду. Самое главное, что эти окружения всегда готовы к использованию. 

Наиболее нагруженные – это 6 контейнеров с code-server и gitea, ещё недавно добавил firefox. Контейнер code-6 у меня раздувается до 2,5 ГБ, когда я открываю URL, там я активно работал и много брейкпоинтов и вкладок сделал в самой IDE. В неиспользуемом состоянии эти контейнеры занимают 100-400 МБ. Можно посмотреть подробный вывод docker stats ниже. В целом, половина памяти свободна при самом активном использовании.

docker stats
CONTAINER ID   NAME                CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
e9eb11ef6f28   code-3              0.53%     403.2MiB / 15.62GiB   2.52%     1.84MB / 4.18MB   3.99MB / 1.09MB   72
2f6e19c81496   az1-control-1     0.00%     2.234MiB / 15.62GiB   0.01%     588kB / 436kB     274kB / 0B        1
1db5387b38b2   fox-1               0.00%     703MiB / 15.62GiB     4.39%     320MB / 115MB     678MB / 4.23GB    325
4d7517ccc1db   db-ubnt-az1       0.00%     15.91MiB / 15.62GiB   0.10%     24.5MB / 495kB    59.2MB / 111MB    4
232b1a218b60   deploy-ubnt-az1   0.00%     2.066MiB / 15.62GiB   0.01%     248kB / 122kB     36.9kB / 0B       1
f339c3ed977e   deploy-ubnt-az2   0.00%     68.62MiB / 15.62GiB   0.43%     30.5MB / 1.15MB   170MB / 159MB     2
bf3f850af068   code                0.45%     284.3MiB / 15.62GiB   1.78%     287MB / 72.4MB    1.54GB / 1.92GB   71
8a1facaf4ed8   db-ubnt-az2       0.00%     13.05MiB / 15.62GiB   0.08%     21.1MB / 546kB    971kB / 108MB     4
5c237c26fe93   clone-code          0.00%     21.07MiB / 15.62GiB   0.13%     2.19GB / 2.21GB   80.1MB / 265MB    1
9d0bfcb14108   dev                 0.00%     12.84MiB / 15.62GiB   0.08%     5.81MB / 1.54MB   162MB / 135MB     1
b0f5e82588e4   code-2              0.28%     117.5MiB / 15.62GiB   0.73%     918kB / 1.67MB    27.2MB / 3.76MB   47
6767a5fe9888   add-users           0.00%     21.39MiB / 15.62GiB   0.13%     10.7MB / 37.5MB   10.4MB / 62.8MB   1
52e1a2caa043   code-4              0.63%     755.7MiB / 15.62GiB   4.72%     14.8MB / 31.2MB   62MB / 19.1MB     89
a69e15b715be   code-6              14.83%    2.341GiB / 15.62GiB   14.99%    342MB / 243MB     2.78GB / 897MB    130
9108bf7dce87   code-5              1.75%     1.412GiB / 15.62GiB   9.04%     22.5MB / 53.2MB   160MB / 56.2MB    121
05db4dca667b   deploy-sblx         0.00%     6.277MiB / 15.62GiB   0.04%     308kB / 0B        0B / 0B           6
930ace2a8706   deploy-ubnt-pd1    0.00%     13.27MiB / 15.62GiB   0.08%     622MB / 613MB     47.1MB / 604MB    1
854ca882de63   runner-1            0.17%     31.71MiB / 15.62GiB   0.20%     457MB / 1.12GB    83.9MB / 37.1MB   25
5b03cc1ebceb   portainer           0.00%     43.3MiB / 15.62GiB    0.27%     170MB / 1.88GB    195MB / 1.02GB    20
9d98de2734ae   squid               0.11%     178.9MiB / 15.62GiB   1.12%     266MB / 273MB     22.5MB / 1.83MB   8
43c8414fcecb   coverage            0.01%     7.594MiB / 15.62GiB   0.05%     484kB / 667kB     1.04MB / 4.1kB    82
04d5f368596c   pypi                0.01%     11.57MiB / 15.62GiB   0.07%     37.4MB / 26MB     3.39MB / 614kB    109
5f8ed01385ea   git                 3.91%     146.3MiB / 15.62GiB   0.91%     1.24GB / 38.8GB   6.41GB / 57.4GB   27

Остальную память, кстати, съедает пайплайн, когда запускаю тесты :)

CONTAINER ID   NAME                                           CPU %      MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
e84febe685f7   GITEA-ACTIONS-TASK-1579_WORKFLOW-tox_JOB-tox   1343.45%   4.26GiB / 15.62GiB    27.26%    579MB / 1.27MB    240MB / 1.85GB    299

В остальном соглашусь – приложения сейчас сильно требовательные к оперативке. Но я всю работу делаю на стенде разработки, в котором развёрнута виртуалка с этим инструментарием, поэтому не ограничен рабочим устройством.

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

Смешались в кучу кони, люди,

И залпы тысячи орудий

Слились в протяжный вой...

Это все замечательно, но звучит как оверхед без ощутимых плюсов. Рабочую "среду" можно организовать в условном virtualbox чем и отделить мух от котлет. Внутри вм юзаем venv и радуемся)

Моя идея была в том, чтобы держать под рукой готовые окружения разного назначения, не только Python venv. В этом плане у меня получилось использовать единую среду в виде Docker и для приложений и для окружений. А ещё, управлять всем через веб-интерфейс. С VirtualBox я не могу представить похожего решения. Оверхед на запуск контейнеров наоборот меньше, если сравнивать запуск 23 виртуалок и 23 контейнеров.

Боюсь мне не понять гениальность маневра. Чтобы использовать условный MySQL/openstack клиент вы возитесь с контейнерами, вместо того чтобы просто вызвать cli в терминале?

Зачем запускать 23 виртуалки если все что нужно можно поднять в одной, из нее работать и при необходимости переносить ее образ диска (если цель маневра - переносимость)

Эх, твою бы статью 4 года назад мне! Статья супер! Добавляю в закладки, потому что больше половины не использовал в работе, а так tmux мне нравиться больше, а остальное еще надо попробовать!

Про контейнеры почитать интересно. Но проблема screen и tmux с горячими клавишами высосана из пальца: их можно переназначать в конфиге. И случайный выход тоже можно полечить.

Я находил способ с настройкой конфига, но он не произвел особого впечатления. Хотелось избежать кастомизации стандартных утилит там где это возможно. Поэтому я и углубился дальше в контейнеры :)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий