🐳 10 инструментов, дополняющих Docker

by itisgood

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-compose up -d создаст три контейнера, по одному для приложений, базы данных и кэш-сервисов.

Они будут автоматически связаны друг с другом.

Это гораздо удобнее, чем повторять команду docker run несколько раз.

Portainer

Portainer – это графический интерфейс для вашей установки Docker.

Это инструмент на основе браузера, который предлагает полный интерфейс для просмотра, создания и настройки контейнеров.

Вы также можете взаимодействовать с другими типами объектов 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
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-прокси, который легко интегрировать в контейнерные рабочие нагрузки.

Он автоматически перенастраивается на новые маршруты по мере создания и удаления контейнеров.

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-файлах и предоставить универсальные графические интерфейсы для управления контейнерами.

 

You may also like

Leave a Comment