Ключови изводи
- Използвайте официални изображения на Docker за по-добра сигурност и производителност. Създаването на ваши собствени изображения може да доведе до неправилна конфигурация и отнема повече време.
- Използвайте специфични версии на Docker изображения, за да избегнете непредвидимо поведение и сблъсъци със зависимости. Издърпайте и изградете с помощта на изображения на конкретна версия.
- Сканирайте изображенията на Docker за уязвимости в сигурността, като използвате командата за сканиране на docker. Определете дали дадено изображение е достатъчно сигурно за вашето приложение.
Docker е най-популярният софтуер за контейнеризиране, но не всеки го използва ефективно. Ако не следвате най-добрите практики на Docker, можете да оставите приложенията си уязвими към проблеми със сигурността или проблеми с производителността.
Ето някои най-добри практики, които можете да приемете, за да използвате находчиво функциите на Docker. Тези мерки подобряват сигурността и гарантират, че създавате поддържаеми Docker файлове.
1. Използвайте официални изображения на Docker
Когато контейнеризирате вашето приложение, трябва да използвате Docker изображение. Можете да създадете изображение с персонализирана конфигурация или да използвате официалните изображения на Docker.
Изграждането на ваши собствени изображения изисква сами да се справите с цялата конфигурация. Например, за да създадете изображение за node.js приложение, трябва да изтеглите node.js и неговите зависимости. Процесът отнема време и може да не доведе до цялата правилна конфигурация.
Docker препоръчва да използвате официално изображение на node.js, което идва с всички правилни зависимости. Docker изображенията имат по-добри мерки за сигурност, леки са и са тествани за различни среди. Можете да намерите официалните изображения на Официални изображения на Docker страница.
2. Използвайте конкретни версии на Docker Image
Обикновено, когато изтеглите официално изображение, това е това с най-новия етикет, който представлява последната актуализирана версия на това изображение. Всеки път, когато създавате контейнер от това изображение, това е различна версия на последния контейнер.
Изграждането с различни версии на изображения на Docker може да причини непредсказуемо поведение във вашето приложение. Версиите може да се сблъскат с други зависимости и в крайна сметка да доведат до неизправност на приложението ви.
Docker препоръчва да изтеглите и изградите, като използвате изображения на конкретна версия. Официалните изображения също имат документация и покриват най-често срещаните случаи на употреба.
Например, вместо докер дръп алпийски, използвайте докер издърпване алпийски: 3.18.3. Docker ще изтегли тази конкретна версия. След това можете да го използвате в последователни компилации, намалявайки грешките във вашето приложение. Можете да намерите конкретните версии на изображения на официалната страница с изображения на Docker под Поддържани тагове и съответните връзки към Dockerfile:
3. Сканирайте изображения за уязвимости в сигурността
Как можете да определите, че изображение, което искате да изградите, няма уязвимости в сигурността? Като го сканирате. Можете да сканирате Docker изображения с помощта на командата docker scan. Синтаксисът е както следва:
docker scan [IMAGE]
Първо трябва да влезете в docker, за да сканирате изображение.
docker login
След това сканирайте конкретното изображение, което искате да проверите:
docker scan ubuntu: latest
Инструмент, наречен Синк сканира изображението, като изброява всички уязвимости според тяхната тежест. Можете да видите вида на уязвимостта и връзки към информация за нея, включително как да я коригирате. Можете да разберете от сканирането дали изображението е достатъчно сигурно за вашето приложение.
4. Използвайте Docker изображения с малък размер
Когато изтеглите изображение на Docker, то идва с всички системни помощни програми. Това увеличава размера на изображението с инструменти, от които не се нуждаете.
Големите Docker изображения заемат място за съхранение и могат да забавят времето на изпълнение на контейнерите. Те също имат по-голяма вероятност от уязвимости в сигурността.
Можеш намалете размера на изображенията на Docker с помощта на изображения на Alpine. Алпийските изображения са леки и се доставят само с необходимите инструменти. Те намаляват пространството за съхранение, правейки вашето приложение да работи по-бързо и по-ефективно.
Ще намерите алпийска версия за повечето от официалните изображения на Docker. Ето пример за алпийски версии за PostgreSQL:
5. Оптимизирайте кеширащите слоеве на изображения
Всяка команда в Dockerfile представлява слой върху изображението. Слоевете имат различни помощни средства и изпълняват различни функции. Ако погледнете официалните изображения в Docker Hub, ще видите инструкциите, използвани за създаването им.
Dockerfile включва всичко необходимо за създаване на изображението. Това е една от причините много разработчиците предпочитат Docker пред виртуалните машини.
Ето структурата на примерно алпийско изображение:
Когато изграждате приложението си въз основа на изображение, вие добавяте повече слоеве към изображението. Docker изпълнява инструкции на Dockerfile отгоре надолу и ако даден слой се промени, Docker трябва да възстанови следващите слоеве.
Най-добрата практика е да подредите вашия Dockerfile от най-малко променящите се файлове към тези, които се променят най-често. Инструкциите, които не се променят, като инсталацията, могат да бъдат в горната част на файла.
Когато промените файл, Docker изгражда от променените файлове и кешира непроменените файлове над него. Следователно процесът протича по-бързо.
Вижте примера, илюстриран на снимката по-горе. Ако има промяна във файловете на приложението, Docker изгражда от там; не е необходимо да инсталира отново npm пакети.
Ако изграждате от изображението, процесът ще протича по-бързо от повторното изграждане на всички останали слоеве наново. Кеширането също така ускорява изтеглянето и избутването на изображения от Docker Hub.
7. Използвайте файл .dockerignore
Когато създавате изображение с помощта на Dockerfile, може да пожелаете да запазите частна информация. Някои файлове и папки може да са част от проекта, но не искате да ги включвате в процеса на изграждане.
Използването на файл .dockerignore намалява значително размера на изображението. Това е така, защото процесът на изграждане включва само необходимите файлове. Освен това помага да запазите поверителността на файловете и да избегнете разкриването на секретни ключове или пароли.
Файлът .dockerignore е файл, който създавате в същата папка като вашия Dockerfile. Това е текстов файл, подобно на файл .gitignore, който съдържа имената на всички файлове, които не искате да включите в процеса на изграждане.
Ето един пример:
8. Използвайте принципа на най-малко привилегирования потребител
По подразбиране Docker използва root потребителя като администратор за разрешение за изпълнение на команди, но това е лоша практика. Ако има уязвимост в един от контейнерите, хакерите могат да получат достъп до хоста на Docker.
За да избегнете този сценарий, създайте специален потребител и група. Можете да зададете необходимите разрешения за групата, за да защитите поверителна информация. Ако даден потребител бъде компрометиран, можете да го изтриете, без да разкривате целия проект.
Ето пример, показващ как да създадете потребител и да зададете неговите разрешения:
Някои базови изображения имат създадени псевдопотребители. Можете да използвате инсталираните потребители вместо root потребителски права.
Защо трябва да приемете най-добрите практики на Docker
Най-добрите практики са чудесен начин за намаляване на уязвимостите и писане на по-чист код. Има много най-добри практики, които можете да приложите към всяка Docker функция, която използвате.
Добре организираният проект прави синхронизирането по-лесно с други оркестриращи инструменти като Kubernetes. Можете да започнете с описаните в статията и да приемете повече, докато изучавате Docker.