Skopeo — это инструмент командной строки, разработанный в рамках проекта containers/image. Его ключевая особенность — возможность выполнять различные операции с образами контейнеров без необходимости их полной загрузки или наличия демона Docker. Skopeo работает напрямую с реестрами контейнеров (Docker Hub, Quay, GitLab Registry, приватные репозитории) и локальными хранилищами.
Основные причины, зачем нужен Skopeo:
- **Работа без демона Docker:** Skopeo не требует запущенного docker daemon. Это критично для автоматизированных CI/CD пайплайнов, где установка и управление демоном добавляют сложность, или для безопасных сред, где запуск привилегированного демона нежелателен.
- **Инспекция образов без скачивания:** Вы можете получить детальную информацию об образе (метаданные, слои, диджесты, архитектура) напрямую из реестра, не тратя время и трафик на его полную загрузку (`skopeo inspect`).
- **Копирование между разнородными хранилищами:** Skopeo может копировать образы между любыми комбинациями источников и приемников: Docker Hub -> локальный директорий в формате `dir`, локальный архив (`oci`) -> приватный Quay, и т.д. Это мощный инструмент для синхронизации реестров или создания оффлайн-архивов.
- **Повышенная безопасность:** Отсутствие необходимости в демоне снижает поверхность для атаки. Кроме того, Skopeo позволяет проверять подписи образов (при использовании с такими инструментами, как sigstore/cosign).
- **Удаление образов из реестров:** Некоторые реестры (не Docker Hub) поддерживают удаление образов через API. Skopeo может выполнить эту операцию (`skopeo delete`), что не всегда тривиально сделать через native CLI реестра.
* **Архитектура:** Docker CLI взаимодействует с Docker Daemon, который, в свою очередь, общается с реестром. Skopeo работает напрямую с реестром, минуя демон.
* **Операции с метаданными:** `skopeo inspect` выполняется мгновенно, так как запрашивает только метаданные. `docker inspect` требует предварительного наличия образа в локальном кэше (`docker pull`).
* **Копирование:** `docker pull` + `docker tag` + `docker push` — стандартный способ. Skopeo делает это одной командой `skopeo copy`, при этом может преобразовывать форматы хранения (например, из реестра в простую папку).
* **Зависимости:** Docker CLI — часть тяжеловесной экосистемы Docker. Skopeo — один статически скомпилированный бинарный файл, который легко развернуть.
* **Удаление образов из реестра:** Docker CLI не предоставляет такой команды. Skopeo — предоставляет (где поддерживается API реестра).
**Пошаговая инструкция по работе с Skopeo**
**Шаг 1: Установка.**
На Ubuntu/Debian: `sudo apt-get install skopeo`.
На CentOS/RHEL: `sudo yum install skopeo`.
Или скачайте статический бинарник с GitHub releases проекта.
**Шаг 2: Базовая инспекция образа.**
Узнайте детали об образе напрямую из Docker Hub:
`skopeo inspect docker://nginx:latest`
Вы увидите вывод, аналогичный `docker inspect`, но полученный за секунды: диджест, создатель, архитектура, метки (labels).
**Шаг 3: Копирование образа из реестра в локальную директорию.**
Создайте папку и скопируйте образ в формат `dir` (простая структура файлов):
`mkdir nginx-local`
`skopeo copy docker://nginx:latest dir:./nginx-local`
Теперь в папке `nginx-local` находятся манифест и слои образа. Идеально для оффлайн-анализа или переноса.
**Шаг 4: Копирование между реестрами с аутентификацией.**
Допустим, нужно скопировать образ из Docker Hub в приватный GitLab Container Registry.
Сначала аутентифицируйтесь (если требуется). Skopeo читает стандартные файлы аутентификации Docker (`~/.docker/config.json`), либо можно передать логин/пароль:
`skopeo copy --dest-creds=gitlab-ci-token:$GITLAB_TOKEN docker://alpine:latest docker://registry.gitlab.com/mygroup/myproject/alpine:latest`
**Шаг 5: Синхронизация тега.**
Скопируйте только если образ в источнике новее (на основе диджеста):
`skopeo copy --src-tls-verify=false --dest-tls-verify=false docker://myregistry/oldimage:tag dir:///backup/oldimage`
Используйте флаги `--src-tls-verify` и `--dest-tls-verify` для работы с реестрами с самоподписанными сертификатами.
**Шаг 6: Удаление образа из поддерживающего реестра (например, Quay.io или GitLab):**
`skopeo delete docker://quay.io/myorg/myimage:mytag`
*Внимание: Эта операция необратима и поддерживается не всеми реестрами.*
**Заключение**
Skopeo — это не замена Docker CLI, а мощное дополнение, которое решает специфические задачи более эффективно и безопасно. Его способность работать без демона, мгновенно инспектировать удаленные образы и гибко копировать данные между хранилищами делает его обязательным инструментом в арсенале современного IT-специалиста, особенно при построении надежных, безопасных и эффективных CI/CD конвейеров и систем управления артефактами.
Комментарии (7)