» » Docker — это игрушка или нет? Или всё-таки да?

 

Docker — это игрушка или нет? Или всё-таки да?

Автор: admin от 15-04-2019, 11:35, посмотрело: 21

Всем привет!



Ооочень хочется прям сразу приступить к теме, но правильнее будет немного рассказать про мою историю:



Вступление



Я программист с опытом разработки frontend одностраничных приложений, scala/java и nodejs на сервере.



Довольно долго (уже точно пару — тройку лет), я придерживался мнения, что docker это манна небесная и вообще очень крутой инструмент и абсолютно каждый разработчик должен уметь пользоваться им. А отсюда вытекает, что и у каждого разработчика должен стоять docker на локальной машине. Да что там про моё мнение, вы полистайте вакансии, которые размещаются на том же hh. В каждой второй есть упоминание про docker и если вы им владеете — это будет вашим конкурентным преимуществом ;)



На своем пути я встечался с многими людьми, с их разным отношением к docker и к его экосистеме. Одни говорили, что это удобная вещь, гарантирующая кроссплатформенность. Вторые не понимали зачем им запускаться в контейнерах и какой профит от этого, третьим было вообще пофиг и они не парились (просто писали код и уходили домой — завидую, кстати, им :) )

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



Вы видели где нибудь чтобы разработчики ПО портировали свои продукты только в docker образе?

Результат большинства продуктов это бинарные файлы под определенную платформу, именно их просто добавляют в docker образ который наследуется от нужной платформы. Вы не задумывались, почему в dockerhub так много похожих образов? Вбейте например nginx, вы увидите 100500 образов от разных людей. Эти люди не разрабатывали сам nginx, они просто в свой docker образ добавили официальный nginx и приправили своими конфигами для удобства запуска контейнеров.



Вообщем хранить можно просто в tgz, если кому то понадобится запускать это в docker то пусть в Dockerfile добавляют tgz, наследуются от нужного окружения и создают дополнительные плюшки которые не меняют самого приложения в tgz. Тот, кто будет создавать docker образ, будет знать, что это за tgz и что ему нужно для работы. Именно так я использую docker тут



Итог: мне не нужен docker registry, воспользуюсь каким нибудь S3 или просто файловым хранилищем типа google drive/dropbox



Docker в CI



Все компании, в которых я работал, похожи друг на друга. Они, как правило, продуктовые. То есть у них есть какое то одно приложение, один стек технологий (ну может пара — тройка языков программирования).



Эти компании используют docker на своих серверах где запускается CI процесс. Вопрос — зачем нужно собирать проекты в docker контейнере на своих серверах? Почему просто не подготовить окружение для сборки, например написать Ansible плейбук который будет ставить нужные версии nodejs, php, jdk, копировать ssh ключи и пр. на сервер, в котором будет происходить сборка?



Сейчас я понимаю, что это стрельба себе по ногам, потому что docker не приносит никакого профита со своей изоляцией. Проблемы с CI в docker с которыми я столкнулся:




  • снова нужнен docker образ для сборки. нужно искать образ или писать свой dockerfile.

  • 90% что нужно пробросить какие нибудь ssh ключи, секретные данные, которые не хочется писать в docker образ.

  • контейнер создается и умирает, теряются все кеши вместе с ним. следующая сборка будет заново скачивать все зависимости проекта, а это долго и не эффективно, а время — деньги.



Разработчики не собирают проекты в docker контейнерах ( я когда то был таким фанатом правда, жалко себя в прошлом xD ). В java есть возможность иметь несколько версий и менять одной командой на ту которая нужна сейчас. В nodejs тоже самое, есть nvm.



Вывод



Я считаю что docker очень мощщный и гибкий инструмент, в этом его недостаток (звучит странно, да). С помощью него компании легко "подсаживаются" на него, используют где нужно и не нужно. Разработчики запускают свои контейнеры, какое то свое окружение, потом это все плавно перетекает в CI, продакшн. DevOps команда пишет какие то велосипеды чтобы запустить эти контейнеры.



Используйте docker только на самом последнем этапе в вашем рабочем процессе, не тащите его в проект в начале. Он не решит ваших бизнес проблем. Он только сдвинет проблемы на ДРУГОЙ уровень и будет предлагать свои варианты решения, вы будете делать двойную работу.



Когда docker нужен: пришел к мысли что docker очень хорош в оптимизации поставленного процесса но не в построении базового функционала



Если вы все-таки решили использовать docker, то:




  • будьте предельно осторожны

  • не навязывайте использование docker разработчикам

  • локализуйте его использование в одном месте, не размазывайте по всем репозиториям Dockefile и docker-compose



PS:





Спасибо что дочитали, желаю вам прозрачных решений в ваших делах и продуктивных рабочих дней!



Источник: Хабр / Интересные публикации

Категория: Программирование

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

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *