Docker бест практіс
Одного часу Docker зробив революцію в роботі з аплікаціями, але для повного використання його потенціалу потрібно дотримуватися найкращих практик. Ось короткий посібник з прикладами для ефективної контейнеризації.
1. Почніть з Офіційних Образів:
Використовуйте офіційні образи як базу. Наприклад, якщо ви працюєте з Node.js, почніть з node:14-alpine.
2. Оптимізуйте ваш Dockerfile:
Мінімізуйте розмір образу, з’єднуючи команди разом:

3. Використовуйте .dockerignore:
Створіть файл .dockerignore, щоб виключити зайві файли під час збирання образу.

4. Multi-Stage зборки:
Для образів, які призначені для продакшну, використовуйте Multi-Stage збирання для зменшення розміру образу.

5. Змінні середовища:
Використовуйте змінні середовища для конфігурацій, наприклад, для Node.js.

6. Перевірка стану роботи:
Додайте конфігурацію для перевірки стану вашого додатку.

7. Обмеження ресурсів:
Визначте обмеження ресурсів у вашому файлі Docker-Compose.

8. Логування та моніторинг:
Використовуйте інструменти, такі як Docker logs, стек ELK або Prometheus для комплексного логування та моніторингу. Також, щоб уникнути ситуацій за переповненим диском не забувайте лімітувати розмір логів.

9. Реєстри контейнерів:
Завантажуйте ваші власні образи до приватного реєстру.

10. Версіоновані образи:
Тегуйте свої образи для версіонування.

Ці «бест практіс» допоможуть вам створювати ефективні, безпечні та зручні у використанні контейнери Docker, поліпшуючи ваші робочі процеси з розробки та розгортання.
Переклад сатті: dev.to/...ocker-best-practices-55j0
З повагою Євген Кошманов,
СЕО школа ДевОпс
12 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівЄвген, у вас на сайті проблеми з сертифікатом, браузер лається, каже що з"єднанню не можна довіряти.
Я б ще додав такий пункт як аналіз образу за допомогою утіліти Dive (github.com/wagoodman/dive) Нещодавно її знайшов та зміг значно зменшити кінцевий розмір багатьох образів в компанії. Допомогає подивитись кожен прошарок образу, які файли були додані, або видалені. Також, її можно запускати автоматично в CI. Рекомендую.
Не знаю як назвати такий пост, але це точно не «Docker бест практіс», тому що дуже багато понять не пояснюється або просто помилкові.
Наприклад:
Добре, якщо я пишу на Java? Офіційно Java розробляється компанією Oracle, але вона забороняє використовувати JDK в Docker images. Є open-source images від OpenJDK, але вони вже кілька років не підтримуються.
Таким чином, мені потрібно вибирати між images від Eclipse Temurin, Amazon Corretto, Liberica і т.д. Де тут «офіційні»?
Дивно, але в наведеному прикладі якраз 6 інструкцій і жодного об’єднання там немає.
У цьому прикладі використовується атрибут deploy, але автор «забув» вказати, що він застосовується тільки якщо ви розміщуєте контейнери в Docker Swarm. Тобто, якщо просто запустити через docker compose up, то все це проігнорується.
Не знаю как давно, но работает в compose без проблем. Там раньше был другой формат кажется. С версии 3 поменялось, и restart теперь тоже в deploy.
Невже така стаття зараховється як залікова?
А де про distroless?
І при цьому не використовуйте latest у якості посилання на образ ;-)
Дякую, цінно.
А що саме тут цінного? Я від Докеру дуже далекий, лиш пару разів його собі налаштовув, і то бачу що це який набір баззвордів, а не «цінний» матеріал. Я чогось не розумію?
Ну, таке. Стаття з одного боку для джунів, з іншого боку це а ні підручник, ані інтро у докер.
Та отож що джуни половину пунктів можуть навіть не зрозуміти :) Чому і не бачу сенсу цього всього. Нагадує індусів на Medium, що створюють пости, котрі несуть настільки мало сенсу, або ж навіть якусь діч втирають, що аж тригерить, бо для джунів це може бути «істиною», адже «це ж запощено на Medium / Dev.to / DOU»...
В целом это все база. Но как пример: никто (или очень редко) не настраивает логирование в docker compose. В итоге потом место на диске тютю.