Контейнеризация
Контейнеризация — метод изоляции приложений и их зависимостей в лёгковесных, переносимых средах, использующих общее ядро ОС. В отличие от виртуальных машин, контейнеры не эмулируют аппаратное обеспечение и запускаются напрямую на хост-системе, что обеспечивает высокую производительность и плотность размещения. Современная экосистема контейнеризации включает инструменты для сборки, выполнения, оркестрации, мониторинга и обеспечения безопасности.
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
- Linux (Debian/Ubuntu):
- Сайт: 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
- Ubuntu 22.04+:
- Сайт: 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
- minikube (для разработки):
- Сайт: 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.debbrew 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 CI —
image: dockerиservices: [docker:dind]. - Tekton — кубернетес-нативный CI/CD для сборки и доставки контейнеров.
- Skaffold — локальная итеративная разработка с автоматической сборкой и деплоем в кластер.
- Установка:
brew install skaffoldилиgo install github.com/GoogleContainerTools/skaffold@latest
- Установка: