Docker – самая известная платформа контейнеризации, но она существует не сама по себе.
Вокруг перехода на контейнеры возникла целая экосистема дополнительных инструментов и побочных проектов.
Здесь представлены 10 анализаторов, индексаторов и оркестраторов с открытым исходным кодом, которые делают Docker еще более удобным и полезным.
Если вы еще только начинаете свой путь в Docker или являетесь опытным практиком, использующим эту технологию в производстве, вы можете найти здесь что-то, что стоит включить в свой следующий проект.
Docker Compose
Docker Compose – единственный инструмент в этом списке, который фактически является частью Docker.
Compose – это доступный способ создания “стеков” контейнеров Docker, которыми можно управлять в унисон.
Стандартный интерфейс Docker CLI позволяет взаимодействовать с отдельными контейнерами.
Compose предоставляет аналогичный интерфейс для работы с контейнерами в совокупности.
Он позволяет легко управлять системами, для которых требуется несколько контейнеров, например, сервер приложений, база данных и слой кэширования.
Вы определяете эти компоненты как сервисы в файле docker-compose.yml, а затем используете двоичный файл docker-compose, чтобы запустить их все вместе:
version: 3 services: app: image: example.com/example-app:latest ports: - 80:80 database: image: mysql:latest expose: - 3306 cache: image: redis:latest expose: - 6379
см. также:
- 🐳 Управление Docker контейнерами с помощью Docker Compose
- Как запускать контейнеры с помощью Docker Compose
- 🐳 Docker Compose Up или Start и Down или Stop: в чем разница
Запуск docker-compose up -d создаст три контейнера, по одному для приложений, базы данных и кэш-сервисов.
Они будут автоматически связаны друг с другом.
Это гораздо удобнее, чем повторять команду docker run несколько раз.
Portainer
Portainer – это графический интерфейс для вашей установки Docker.
Это инструмент на основе браузера, который предлагает полный интерфейс для просмотра, создания и настройки контейнеров.
Вы также можете взаимодействовать с другими типами объектов Docker, такими как образы, сети и тома.
- 🐳 Как развернуть стек Portainer внутри кластера Docker Swarm
- 🐳 Лучшие инструменты с графическим интерфейсом для Docker
Portainer развертывается собственным образом Docker:
docker run -d -p 9000:9000 --name=portainer \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce
Система устанавит экземпляр Portainer, к которому вы можете получить доступ по адресу localhost:9000.
Это работает путем монтирования сокета Docker вашего хоста в контейнер Portainer.
Таким образом, Portainer может использовать сокет для управления контейнерами, запущенными на вашем хосте.
Kubernetes
Kubernetes – это платформа распределенной оркестрации контейнеров.
Это распространенный способ перемещения рабочих нагрузок в производственную среду.
Кластер Kubernetes состоит из нескольких хостов (физических/виртуальных машин), каждый из которых имеет право на размещение экземпляров контейнеров.
Kubernetes обеспечивает простое масштабирование и распределение.
В то время как обычный Docker предоставляет отдельные контейнеры на одной машине, Kubernetes управляет несколькими контейнерами, которые беспрепятственно работают на нескольких узлах.
Поскольку Kubernetes совместим с OCI, вы можете развернуть существующие образы Docker в своем кластере:
apiVersion: apps/v1 kind: Deployment spec: replicas: 3 selector: matchLabels: app: example template: metadata: labels: app: example spec: containers: - name: example image: example.com/example-image:latest ports: - containerPort: 80
- ☸️ Kubernetes – введение для начинающих
- 🐳 Лучшие практики для контейнерных приложений
- ☸️ k0s, k3s и microk8s Сравнение дистрибутивов Kubernetes
- ☸️ Как показать все образа в кластере Kubernetes ?
kubectl apply -f deployment.yml
Этот пример создает развертывание Kubernetes образа example.com/example-image:latest.
Поле replicas: 3 означает, что в итоге у вас будет три экземпляра контейнера, обеспечивая избыточность системы.
Развертывание аналогично запуску docker run -d -p 80:80 example.com/example-image:latest, хотя в этом случае будет запущен только один контейнер.
Traefik
Traefik – это обратный HTTP-прокси, который легко интегрировать в контейнерные рабочие нагрузки.
Он автоматически перенастраивается на новые маршруты по мере создания и удаления контейнеров.
- Docker Гайд: Установка Traefik – современный обратный прокси для микросервисов
- ☸️ Учебное пособие по Ingress для начинающих в Kubernetes
Traefik позволяет прикреплять метки к контейнерам для определения доменных имен и поведения пересылки.
Программное обеспечение будет создавать соответствующие прокси-маршруты каждый раз, когда контейнер с соответствующими метками присоединяется к сети Traefik.
Trivy
Trivy – это сканер образов контейнеров, который обнаруживает известные уязвимости.
Сканирование образов перед их развертыванием в продакшен дает вам уверенность в том, что ваши рабочие нагрузки безопасны и надежны.
Trivy доступен в виде собственного образа Docker.
Вы можете запустить простое сканирование образа example-image:latest с помощью следующей команды:
docker run --rm \ -v trivy-cache:/root/.cache/ \ -v /var/run/docker.sock:/var/run/docker.sock \ aquasec/trivy:latest image example-image:latest
🐳 Сканирование образов Docker на наличие уязвимостей с помощью Trivy
Trivy идентифицирует пакеты программного обеспечения в вашем образе, ищет уязвимости и создает отчет, содержащий идентификатор CVE, степень серьезности и диапазон версий каждой проблемы.
Вы должны обновить каждый пакет до версии FIXED VERSION, указанной Trivy.
Запуск инструмента после создания образа – это простой способ повысить безопасность ваших развертываний
Syft
Syft генерирует SBOM (спецификацию программного обеспечения) из образов Docker.
Это списки всех пакетов ОС и зависимостей языков программирования, включенных в образ.
Syft поможет вам провести аудит цепочки поставок программного обеспечения.
Docker позволяет легко ссылаться на удаленный контент и создавать сложные файловые системы, не осознавая этого.
Пользователям вашего образа еще сложнее разобраться в том, что находится внутри.
Dive
В связи с этим Dive упрощает проверку файловой системы образов Docker.
Образы по умолчанию довольно непрозрачны, поэтому часто приходится запускать контейнер, чтобы выяснить, что находится внутри.
Это может подвергнуть вас риску, если образ содержит вредоносный процесс.
Dive позволяет перемещаться по файловой системе образа с помощью интерактивного древовидного представления в терминале.
Вы также можете просматривать отдельные слои, чтобы увидеть, как был собран образ.
Просмотр только изменений в одном слое помогает наглядно представить изменения, вносимые на каждом этапе сборки, даже если у вас нет доступа к исходному Dockerfile.
Flocker
Flocker – это менеджер томов, который объединяет управление контейнерами и их постоянными данными.
Он поддерживает многохостовые среды, упрощая перенос томов между хостами при изменении шедуллера контейнеров.
Такая переносимость обеспечивает доступность томов везде, где находятся контейнеры.
Традиционные тома Docker не могут покинуть хост, на котором они созданы.
Поддержка распределенного хранения облегчает переход контейнеров в продакшен.
Flocker идеально подходит для государственных контейнеров, которые необходимо масштабировать в распределенных средах, сохраняя при этом совместимость с различными системами хранения данных.
Он поддерживает такие платформы, как Amazon EBS, Google GCE и OpenStack Block Storage.
Dokku
Dokku использует Docker для самостоятельного размещения собственной платформы как услуги (PaaS).
Он автоматически запускает контейнеры Docker, когда вы размещаете код с помощью Git.
Как полноценная платформа для приложений, Dokku позволяет сопоставлять домены, добавлять SSL, развертывать несколько сред с помощью веток Git и настраивать вспомогательные сервисы, такие как базы данных.
Это отличная альтернатива коммерческим платформам, таким как Heroku и Firebase, позволяющая хранить производственные развертывания на собственном оборудовании.
Настройка сервера Dokku позволяет запускать приложения в изолированных контейнерах без изучения всех тонкостей ручного управления контейнерами.
Вы можете сосредоточиться на написании и фиксов кода, используя установленные рабочие процессы на базе Git.
Добавление сервера Dokku в качестве Git remote означает, что вы можете git push для развертывания изменений, как локально в терминале, так и в рамках конвейера CI.
Hadolint
Hadolint – это линтер Dockerfile, который проверяет соответствие этапов сборки рекомендуемым лучшим практикам.
Запуск Hadolint может обнаружить общие проблемы с конфигурацией, которые делают ваши сборки медленнее и менее безопасными.
Hadolint использует ShellCheck для проверки shell-скриптов в инструкциях по запуску Dockerfile.
Вы можете загрузить Hadolint как предварительно скомпилированный бинарник, попробовать его в Интернете или использовать собственный образ Docker, hadolint/hadolint.
Начните сканирование, указав путь к Dockerfile бинарнику Hadolint:
🐳 dockle: линтер + проверка образов на безопасность
hadolint Dockerfile
Заключение
Docker – отличный инструмент для разработчиков, но он становится еще лучше в паре с другими популярными проектами.
Инициативы сообщества могут повысить безопасность ваших образов, помочь вам обнаружить проблемы в ваших Docker-файлах и предоставить универсальные графические интерфейсы для управления контейнерами.