Раньше я ненавидел докер. Было страшно — я не понимал этого до конца, да и не хотел. Мне нравились мои процессы: мне нравилось писать код и запускать его на моей машине прямо на металле. Мне нравилось писать длинные «README» о том, как установить все зависимости, что делать с моей локальной установкой Postgres и бороться с организацией множества различных служб локально. Подождите…
Раньше я думал, что Докер бесполезен. Я искренне верил, что это похоже на Kubernetes: перепроектирован для большинства моих случаев использования, и не мог поверить, что люди действительно его используют. Для одного из своих проектов я хотел использовать Hasura. К сожалению, лучший способ использовать его — использовать Docker. — Ладно, — фыркнул я. Я укусил пулю и установил Docker Desktop.
Ненавидя каждую секунду, я справился с файлом «docker-compose». С ненавистью, текущей сквозь мои пальцы, я набрал команду «docker-compose up». Я ждал (яростно), пока докер начал тянуть образы из облака. Я злобно рассмеялся, когда база данных Postgres и Hasura без проблем запустились на моей машине и начали общаться друг с другом без моего вмешательства.
Подождите! Что? Вот и все? Мне просто нужно было скопировать файл docker-compose.yml, запустить Docker-Compose, и все? У меня так же работает база данных и сервер на моей машине? Это должно быть розыгрыш. Я набрал localhost: 8080 в своем браузере Chrome, и меня приветствовал экран администратора Hasura. Я открыл свой DBAdmin (это не спонсируется, но я использую TablePlus для Mac — намного лучше, чем PHPMyAdmin) и без проблем подключился к моему локально работающему экземпляру postgres.
Я был на крючке.
Признаюсь, я немного сошел с ума от докеров. Но это так просто. На днях я начал новый проект и хотел организовать:
- 2 базы данных Postgres
- проект Node.js под управлением Postgraphile
- Локальные исполнители Google Cloud Functions
Представьте себе, что новый инженер присоединился к этому проекту без докера. Мне нужно было сказать им, что они должны локально создать две базы данных postgres, установить node.js и как запустить облачные функции в демоне. Это не легко! Я мог бы сделать это, или я мог бы просто объяснить, как установить docker и запустить docker-compose up. Меня не волнует, используют ли они M1 или Intel Mac, компьютер с Windows, любой дистрибутив Linux, даже Chromebook (на самом деле я не уверен в последнем, но могу только предположить). Если они могут заставить работать докер, они могут запускать полный стек приложения локально.
Я боялся изучать докер, потому что думал, что это потребует огромных затрат времени. Есть целые рабочие места, посвященные DevOps, и разве Docker не является сделкой типа dev-opsy? Я думал, что это займет несколько недель обучения, и мне нужно знать кучу вещей, чтобы написать Dockerfile.
Неа. Просто используй Alpine Linux, бро. Установите свои зависимости, и все готово. Вы хотите, чтобы два док-контейнера общались друг с другом? Напишите docker-compose.
Поверьте, это не так сложно, как кажется. Я тоже хотел это ненавидеть, правда ненавидел — я хотел быть хипстером сообщества разработчиков. «Нет, чувак, я не использую докер 😎 Я просто организую все вручную и трачу много часов разработчиков на устранение неполадок с настройкой проекта на их машинах».
Я действительно думаю, что это полезно для всех, а не только для разработчиков бэкенда или разработчиков DevOps. По крайней мере, знайте, для чего это полезно, поэтому, если вы когда-нибудь столкнетесь с проблемой, которую может решить докер, вы сможете добраться до милого кита.
Подходит ли докер для каждой отдельной ситуации? Абсолютно нет. Есть случаи, когда package.json вполне подойдет, или даже развертывание исполняемого бинарного файла помогает. Если вы работаете в одиночку, или работаете над проектом на выходных, или просто пробуете какую-то новую технологию, почему бы и нет? Вы понесете некоторые накладные расходы, настраивая его на необработанном компьютере, но кого это волнует. Это ваш компьютер, и в таких случаях вы, вероятно, просто хотите начать учиться быстро.
Однако в любой ситуации, когда вам нужно поделиться проектом или развернуть проект на нескольких машинах, вы захотите его докеризовать. Это не сложно, и нет необходимости в двухчасовом обучении. Бьюсь об заклад, я мог бы научить docker и docker compose в 10-минутной статье.
Оставьте комментарий, если считаете, что статья о руководстве бывших ненавистников по докеру будет вам полезна!