Перейти к основному содержимому

Контейнеризация

Контейнеризация — метод изоляции приложений и их зависимостей в лёгковесных, переносимых средах, использующих общее ядро ОС. В отличие от виртуальных машин, контейнеры не эмулируют аппаратное обеспечение и запускаются напрямую на хост-системе, что обеспечивает высокую производительность и плотность размещения. Современная экосистема контейнеризации включает инструменты для сборки, выполнения, оркестрации, мониторинга и обеспечения безопасности.


1. Движки контейнеров

Docker Engine

  • Наиболее распространённая реализация контейнеров на основе стандарта OCI (Open Container Initiative).
  • Поддерживает образы, сети, тома, хуки, multi-stage сборку.
  • Установка:
    • Linux (Debian/Ubuntu):
      sudo apt update
      sudo apt install ca-certificates curl gnupg
      sudo install -m 0755 -d /etc/apt/keyrings
      curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
      echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
      sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    • macOS / Windows: Docker Desktop
  • Сайт: docker.com

Podman

  • Движок без демона, совместимый с Docker CLI и OCI-образами.
  • Поддерживает rootless-контейнеры (без прав суперпользователя).
  • Установка:
    • Ubuntu 22.04+:
      sudo apt install podman
    • Fedora / RHEL / CentOS:
      sudo dnf install podman
    • macOS:
      brew install podman
      podman machine init
      podman machine start
  • Сайт: podman.io

containerd

  • Минималистичный контейнерный рантайм, используемый Kubernetes и Docker.
  • Подходит для встраивания в инфраструктурные решения.
  • Установка (официальный бинарник):
    VERSION="1.7.16"  # актуальную версию смотреть на GitHub
    wget https://github.com/containerd/containerd/releases/download/v${VERSION}/containerd-${VERSION}-linux-amd64.tar.gz
    sudo tar Cxzvf /usr/local containerd-${VERSION}-linux-amd64.tar.gz
    sudo systemctl enable --now containerd
  • Сайт: containerd.io

CRI-O

  • Лёгковесный рантайм, оптимизированный для Kubernetes (реализует CRI).
  • Используется в OpenShift, RHEL.
  • Установка (на RHEL/Fedora):
    sudo dnf install cri-o cri-tools
    sudo systemctl enable --now crio
  • Сайт: cri-o.io

2. Сборка образов

Docker Buildx

  • Расширение Docker для сборки с поддержкой multi-platform, кэширования и BuildKit.
  • Включено по умолчанию в Docker Desktop и современных версиях Engine.
  • Использование:
    docker buildx create --use
    docker buildx build --platform linux/amd64,linux/arm64 -t myapp .

Buildah

  • Утилита от проекта Podman для сборки OCI-образов без запуска демона.
  • Поддерживает Dockerfile и сценарии на shell.
  • Установка:
    sudo dnf install buildah        # Fedora/RHEL
    sudo apt install buildah # Ubuntu 22.04+
  • Пример:
    buildah bud -t myapp .

Kaniko

  • Сборка образов внутри Kubernetes-кластера без привилегий.
  • Работает в контейнере, не требует Docker-демона.
  • Использование:
    # В Job Kubernetes
    image: gcr.io/kaniko-project/executor:latest
    args: ["--dockerfile=Dockerfile", "--context=dir:///workspace", "--destination=my-registry/myapp:latest"]
  • Сайт: github.com/GoogleContainerTools/kaniko

ko

  • Быстрая сборка образов Go-приложений без Dockerfile.
  • Сайт: github.com/google/ko
  • Установка:
    go install github.com/google/ko@latest

3. Оркестрация

Kubernetes (k8s)

  • Стандарт де-факто для оркестрации контейнеров.
  • Управление развертыванием, масштабированием, самовосстановлением.
  • Установка локально:
    • minikube (для разработки):
      curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
      sudo install minikube-linux-amd64 /usr/local/bin/minikube
      minikube start
    • kind (Kubernetes in Docker):
      go install sigs.k8s.io/kind@latest
      kind create cluster
  • Сайт: kubernetes.io

Nomad (HashiCorp)

  • Альтернатива Kubernetes с поддержкой не только контейнеров, но и JVM-процессов, бинарников.
  • Проще в настройке.
  • Установка:
    wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
    echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
    sudo apt update && sudo apt install nomad
  • Сайт: nomadproject.io

Docker Compose

  • Оркестрация многоконтейнерных приложений на одном хосте.
  • Установка (как plugin в Docker):
    docker compose version  # проверка
    Или отдельно:
    sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
  • Сайт: docs.docker.com/compose

4. Реестры образов

Docker Hub

  • Публичный реестр по умолчанию.
  • Сайт: hub.docker.com

Harbor

  • Самостоятельно развертываемый приватный реестр с RBAC, сканированием уязвимостей, репликацией.
  • Установка через Helm или offline-installer:
    wget https://github.com/goharbor/harbor/releases/latest/download/harbor-offline-installer-*.tgz
    tar xvfz harbor-offline-installer-*.tgz
    cd harbor && ./install.sh
  • Сайт: goharbor.io

Registry (Docker Distribution)

  • Официальный легковесный реестр от Docker.
  • Запуск:
    docker run -d -p 5000:5000 --restart=always --name registry registry:2

GitLab Container Registry

  • Встроенный реестр в GitLab CI/CD.

5. Безопасность и сканирование

Trivy

  • Сканер уязвимостей в образах, файловых системах, зависимостях.
  • Установка:
    sudo apt install trivy  # или
    brew install aquasecurity/trivy/trivy
  • Использование:
    trivy image nginx:latest
  • Сайт: aquasecurity.github.io/trivy

Clair

  • Статический анализатор уязвимостей для OCI-образов (часто используется с Harbor).
  • Сайт: quay.github.io/clair

Syft + Grype

  • Syft — генерация SBOM (Software Bill of Materials).
  • Grype — сканирование SBOM на уязвимости.
  • Установка:
    curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
    curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin

Podman scan

  • Встроенная команда в Podman (использует Snyk или Trivy):
    podman scan myapp

6. Отладка и инспекция

crictl

  • CLI для отладки CRI-совместимых рантаймов (containerd, CRI-O).
  • Установка:
    VERSION="v1.29.0"  # актуальная версия на GitHub
    wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
    sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin

dive

  • Интерактивный инструмент для анализа слоёв Docker-образов.
  • Установка:
    wget https://github.com/wagoodman/dive/releases/latest/download/dive_*.linux_amd64.deb
    sudo dpkg -i dive_*.linux_amd64.deb
    Или:
    brew install dive
  • Использование:
    dive myapp:latest

nsenter, crun, runc

  • Низкоуровневые утилиты для входа в пространства имён контейнеров и управления OCI-рантаймами.
  • Установка:
    sudo apt install util-linux  # nsenter
    sudo apt install runc crun

7. Интеграции и CI/CD

  • GitHub Actions — встроенный runner с поддержкой Docker.
  • GitLab CIimage: docker и services: [docker:dind].
  • Tekton — кубернетес-нативный CI/CD для сборки и доставки контейнеров.
  • Skaffold — локальная итеративная разработка с автоматической сборкой и деплоем в кластер.
    • Установка: brew install skaffold или go install github.com/GoogleContainerTools/skaffold@latest