
Coleção mínima de imagens de contêiner protegidas contra CVE
Small, hardened container images, free and MIT-licensed.
Built from source with Chainguard's apko and Wolfi packages, rebuilt every six hours.
Every image is cosign-signed, ships an SPDX SBOM attestation, and carries SLSA Level 3 build provenance. You can verify all of it without an account.
🌐 Explore o catálogo completo em minimalcontainers.com →
Catálogo de imagens · Verificar uma imagem · Todas as 57 imagens · Discussão no HN
O objetivo destas imagens é que você não precisa confiar em mim. Baixe uma e verifique a proveniência você mesmo:```bash
docker pull ghcr.io/rtvkiz/minimal-python:latest
gh attestation verify oci://ghcr.io/rtvkiz/minimal-python:latest --owner rtvkiz
cosign verify-attestation --type spdxjson
--certificate-identity-regexp='https://github.com/rtvkiz/minimal/'
--certificate-oidc-issuer='https://token.actions.githubusercontent.com'
ghcr.io/rtvkiz/minimal-python:latest
| jq -r '.payload | @base64d | fromjson | .predicate' > python-sbom.spdx.json
Mais receitas de verificação (assinatura cosign, SBOM, proveniência SLSA) estão em [`.github/SECURITY.md`](https://github.com/rtvkiz/minimal/blob/HEAD/.github/SECURITY.md).
## Como `minimal` é diferente
| | minimal | Chainguard | Docker Hardened | Minimus / RapidFort |
|---|:---:|:---:|:---:|:---:|
| **Licença** | MIT | Proprietária | Apache-2.0 | Proprietária |
| **Custo** | $0 | ~$30k/imagem/ano | Suporte gratuito + pago | Ligação comercial |
| **Autenticação para baixar** | Não | Sim | Sim | Sim |
| **Limites de taxa** | Nenhum | Sim | Sim | Sim |
| **Receitas de construção públicas** | Sim, cada `melange.yaml` | Não | Sim, Dockerfiles | Não |
| **Assinatura Cosign + SBOM + SLSA L3** | Sim | Sim | Sim | Sim |
| **Contrato SLA, FedRAMP/STIG** | Não | Sim (pago) | Sim (pago) | Sim (pago) |
Recorra ao `minimal` se quiser imagens endurecidas sem pagar ou se inscrever, se quiser ler cada receita de construção do início ao fim, ou se quiser um modelo funcional para forkar no seu próprio catálogo interno.
Provavelmente não é a escolha certa se você precisar de um contrato com fornecedor, documentação de acreditação FedRAMP ou STIG, ou milhares de imagens no primeiro dia — essas são coisas reais que este projeto não tenta resolver.
## O que toda imagem inclui
- Uma assinatura keyless do Cosign, verificável contra o registro público de transparência Rekor.
- Um SBOM SPDX anexado como uma atestação in-toto — cada pacote, versão e licença.
- Proveniência de construção SLSA v1.0 — prova criptográfica de qual fluxo de trabalho, qual commit e qual runner produziu a imagem.
- Uma varredura diária do Grype, com resultados no [catálogo público](https://minimalcontainers.com) e na aba de Segurança do GitHub.
- Compilações nativas para `linux/amd64` e `linux/arm64`.
- Um usuário não-root por padrão (UID 65532), a menos que o upstream insista o contrário.
- Sem shell quando possível — a maioria das imagens não inclui `/bin/sh`.
- Uma cadência de reconstrução de seis horas, para que correções de CVE do Wolfi cheguem em horas, não dias.
## Imagens Disponíveis — 57 no total
| Categoria | Quantidade | Destaques |
|---|---|---|
| **Linguagens e runtimes** | 9 | python, node-slim, bun, go, java, ruby, php, dotnet, deno |
| **Bancos de dados** | 5 | mysql, mariadb, postgres-slim, sqlite, opensearch |
| **Caches, filas, mensageria** | 7 | redis-slim, valkey, memcached, kafka, rabbitmq, nats, mosquitto |
| **Servidores web e proxies** | 6 | nginx, httpd, caddy, haproxy, traefik, envoy |
| **Observabilidade** | 14 | prometheus, alertmanager, victoria-metrics, thanos, mimir, jaeger, loki, tempo, otelcol, fluent-bit, telegraf, node-exporter, blackbox-exporter, pushgateway |
| **Infraestrutura** | 7 | coredns, etcd, openbao, keycloak, qdrant, registry, consul |
| **Kubernetes, CI e IaC** | 4 | helm, kubectl, opentofu, trivy |
| **Aplicações** | 5 | jenkins, gitea, minio, rails, mailpit |
Navegue por todas as imagens — com varreduras de CVE ao vivo, todas as tags, SBOMs e proveniência de construção — em **[minimalcontainers.com](https://minimalcontainers.com)**, ou expanda a lista completa de comandos pull abaixo.
<details>
<summary><strong>Catálogo completo de imagens com comandos pull</strong></summary>
<br>
| Imagem | Comando Pull | Shell | Caso de Uso |
|-------|--------------|-------|----------|
| | | **Linguagens** | |
| Python | `docker pull ghcr.io/rtvkiz/minimal-python:latest` | Não | Aplicações Python, microsserviços |
| Node.js-slim | `docker pull ghcr.io/rtvkiz/minimal-node-slim:latest` | Não | Aplicações Node.js, JavaScript |
| Bun | `docker pull ghcr.io/rtvkiz/minimal-bun:latest` | Não | Runtime rápido para JavaScript/TypeScript |
| Go | `docker pull ghcr.io/rtvkiz/minimal-go:latest` | Não | Desenvolvimento Go, compilações CGO |
| .NET Runtime | `docker pull ghcr.io/rtvkiz/minimal-dotnet:latest` | Não | Runtime .NET 10 para aplicações |
| Java | `docker pull ghcr.io/rtvkiz/minimal-java:latest` | Não | OpenJDK 26 JRE para aplicações Java |
| Ruby | `docker pull ghcr.io/rtvkiz/minimal-ruby:latest` | Não | Runtime Ruby 4.0 (compilado do código-fonte) |
| PHP | `docker pull ghcr.io/rtvkiz/minimal-php:latest` | Não | CLI PHP 8.5 (compilado do código-fonte) |
| Rails | `docker pull ghcr.io/rtvkiz/minimal-rails:latest` | Não | Ruby 4.0 + Rails 8.1 (compilado do código-fonte) |
| Deno | `docker pull ghcr.io/rtvkiz/minimal-deno:latest` | Não | Runtime seguro para TypeScript/JavaScript |
| | | **Bancos de dados** | |
| MySQL | `docker pull ghcr.io/rtvkiz/minimal-mysql:latest` | Sim | MySQL LTS 8.4.x, compilado do código-fonte |
| MariaDB | `docker pull ghcr.io/rtvkiz/minimal-mariadb:latest` | Sim | MariaDB LTS 11.4.x, compilado do código-fonte |
| PostgreSQL-slim | `docker pull ghcr.io/rtvkiz/minimal-postgres-slim:latest` | Não | Banco de dados relacional |
| SQLite | `docker pull ghcr.io/rtvkiz/minimal-sqlite:latest` | Não | CLI de banco de dados SQL embutido |
| OpenSearch | `docker pull ghcr.io/rtvkiz/minimal-opensearch:latest` | Não* | OpenSearch 3.x — pesquisa e análise |
| | | **Caches, Filas, Mensageria** | |
| Redis-slim | `docker pull ghcr.io/rtvkiz/minimal-redis-slim:latest` | Não | Armazenamento de dados em memória |
| Memcached | `docker pull ghcr.io/rtvkiz/minimal-memcached:latest` | Não | Cache em memória (compilado do código-fonte) |
| Valkey | `docker pull ghcr.io/rtvkiz/minimal-valkey:latest` | Não | Fork do Redis licenciado sob BSD (LF) |
| Kafka | `docker pull ghcr.io/rtvkiz/minimal-kafka:latest` | Sim | Apache Kafka 4.x, modo KRaft |
| RabbitMQ | `docker pull ghcr.io/rtvkiz/minimal-rabbitmq:latest` | Sim | Broker AMQP RabbitMQ 4.x |
| NATS | `docker pull ghcr.io/rtvkiz/minimal-nats:latest` | Não | Servidor NATS com JetStream |
| Mosquitto | `docker pull ghcr.io/rtvkiz/minimal-mosquitto:latest` | Não | Broker MQTT Eclipse Mosquitto (EPL-2.0/EDL-1.0) |
| | | **Servidores Web e Proxies** | |
| Nginx | `docker pull ghcr.io/rtvkiz/minimal-nginx:latest` | Não | Proxy reverso, arquivos estáticos |
| HTTPD | `docker pull ghcr.io/rtvkiz/minimal-httpd:latest` | Talvez* | Servidor web Apache |
| Caddy | `docker pull ghcr.io/rtvkiz/minimal-caddy:latest` | Não | Servidor web com HTTPS automático |
| HAProxy | `docker pull ghcr.io/rtvkiz/minimal-haproxy:latest` | Não | Balanceador de carga TCP/HTTP |
| Traefik | `docker pull ghcr.io/rtvkiz/minimal-traefik:latest` | Não | Proxy reverso nativo para nuvem |
| Envoy | `docker pull ghcr.io/rtvkiz/minimal-envoy:latest` | Não | Proxy de serviço e balanceador de carga |
| | | **Observabilidade** | |
| Prometheus | `docker pull ghcr.io/rtvkiz/minimal-prometheus:latest` | Não | Coleta de métricas e alertas |
| VictoriaMetrics | `docker pull ghcr.io/rtvkiz/minimal-victoria-metrics:latest` | Não | Armazenamento de métricas de alto desempenho |
| Jaeger | `docker pull ghcr.io/rtvkiz/minimal-jaeger:latest` | Não | Rastreamento distribuído (v2) |
| Loki | `docker pull ghcr.io/rtvkiz/minimal-loki:latest` | Não | Agregação de logs (Grafana Labs) |
| Tempo | `docker pull ghcr.io/rtvkiz/minimal-tempo:latest` | Não | Backend de rastreamento distribuído (Grafana Labs, AGPL) |
| OTel Collector | `docker pull ghcr.io/rtvkiz/minimal-otelcol:latest` | Não | Núcleo do OpenTelemetry Collector |
| Fluent Bit | `docker pull ghcr.io/rtvkiz/minimal-fluent-bit:latest` | Não | Processador de logs leve |
| Node Exporter | `docker pull ghcr.io/rtvkiz/minimal-node-exporter:latest` | Não | Métricas de hardware e SO do host para Prometheus |
| Blackbox Exporter | `docker pull ghcr.io/rtvkiz/minimal-blackbox-exporter:latest` | Não | Sondagem de endpoints para Prometheus (HTTP/DNS/TCP/ICMP) |
| Pushgateway | `docker pull ghcr.io/rtvkiz/minimal-pushgateway:latest` | Não | Push de métricas para Prometheus em jobs em lote |
| | | **Infraestrutura** | |
| CoreDNS | `docker pull ghcr.io/rtvkiz/minimal-coredns:latest` | Não | DNS padrão do Kubernetes |
| etcd | `docker pull ghcr.io/rtvkiz/minimal-etcd:latest` | Não | Armazenamento chave-valor distribuído |
| OpenBao | `docker pull ghcr.io/rtvkiz/minimal-openbao:latest` | Não | Gerenciamento de segredos (fork do Vault) |
| Keycloak | `docker pull ghcr.io/rtvkiz/minimal-keycloak:latest` | Sim | Gerenciamento de identidade e acesso |
| Qdrant | `docker pull ghcr.io/rtvkiz/minimal-qdrant:latest` | Não | Banco de dados vetorial para IA/ML (Rust) |
| Registry | `docker pull ghcr.io/rtvkiz/minimal-registry:latest` | Não | Registro de distribuição OCI (Docker Registry v2), compilado do código-fonte |
| Consul | `docker pull ghcr.io/rtvkiz/minimal-consul:latest` | Não | Descoberta de serviços HashiCorp Consul + KV (BUSL-1.1) |
| | | **Kubernetes e CI** | |
| Helm | `docker pull ghcr.io/rtvkiz/minimal-helm:latest` | Não | CLI Helm 3 para implantação de charts do Kubernetes |
| kubectl | `docker pull ghcr.io/rtvkiz/minimal-kubectl:latest` | Não | CLI kubectl para operações em clusters Kubernetes |
| | | **Aplicações** | |
| Jenkins | `docker pull ghcr.io/rtvkiz/minimal-jenkins:latest` | Sim | Automação CI/CD |
| Gitea | `docker pull ghcr.io/rtvkiz/minimal-gitea:latest` | Sim | Serviço Git auto-hospedado |
| MinIO | `docker pull ghcr.io/rtvkiz/minimal-minio:latest` | Não | Armazenamento de objetos compatível com S3 |
| Mailpit | `docker pull ghcr.io/rtvkiz/minimal-mailpit:latest` | Não | Teste de SMTP e email para desenvolvedores, compilado do código-fonte |
| | | **IA / ML** | |
| CUDA Python | *desabilitado* | Não | Python + CUDA 12.9 + cuDNN 9.10 (compilação pausada, código mantido) |
*\*HTTPD, Jenkins, Kafka, MySQL, OpenSearch, Gitea, Keycloak incluem shell (`sh`/`busybox`/`bash`) via dependências transitivas do Wolfi ou porque o entrypoint upstream exige. O CI trata a presença de shell como informativa.*
</details>
## Quick Start```bash
# Python app
docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-python:latest /app/main.py
# Nginx reverse proxy
docker run -d -p 8080:80 ghcr.io/rtvkiz/minimal-nginx:latest
# PostgreSQL
docker run -d -p 5432:5432 -v pgdata:/var/lib/postgresql/data \
ghcr.io/rtvkiz/minimal-postgres-slim:latest
# Redis
docker run -d -p 6379:6379 ghcr.io/rtvkiz/minimal-redis-slim:latest
# Kafka (KRaft mode — auto-initializes storage on first boot)
docker run -d -p 9092:9092 -v kafkadata:/var/kafka/data \
ghcr.io/rtvkiz/minimal-kafka:latest
docker run (Node, Go, MySQL, MariaDB, Java, .NET, PHP, Rails, RabbitMQ, Gitea, …)
```bash
docker run --rm -v $(pwd):/app -w /app ghcr.io/rtvkiz/minimal-node-slim:latest index.js
docker run --rm ghcr.io/rtvkiz/minimal-bun:latest --version
docker run --rm -v $(pwd):/app -w /app ghcr.io/rtvkiz/minimal-go:latest build -o /tmp/app .
docker run -d -p 8080:80 ghcr.io/rtvkiz/minimal-httpd:latest
docker run -d -p 8080:8080 -v jenkins_home:/var/jenkins_home ghcr.io/rtvkiz/minimal-jenkins:latest
docker run -d -p 3306:3306 -v mysqldata:/var/lib/mysql ghcr.io/rtvkiz/minimal-mysql:latest
docker run -d -p 11211:11211 ghcr.io/rtvkiz/minimal-memcached:latest
docker run --rm -v $(pwd):/data ghcr.io/rtvkiz/minimal-sqlite:latest /data/mydb.sqlite "SELECT sqlite_version();"
docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-dotnet:latest /app/myapp.dll
| Acionador | Quando | Propósito |
|---|---|---|
| Agendado | A cada 6 horas | Capturar os patches CVE mais recentes do Wolfi |
| Push | Ao mesclar na |
Os resultados da varredura de vulnerabilidades aparecem no catálogo ao vivo, no resumo do job e na aba GitHub Security.
Imagens construídas a partir da fonte são rastreadas por workflows dedicados que verificam o upstream diariamente e abrem PRs:
go install chainguard.dev/apko@latest go install chainguard.dev/melange@latest brew install anchore/grype/grype
make python make test-python
make build
make scan
See the [Makefile](https://github.com/rtvkiz/minimal/blob/HEAD/Makefile) for the full target list.
## Estrutura do projeto
<details>
<summary><strong>Layout do repositório</strong></summary>
<br>```
minimal/
├── <image>/
│ ├── apko/<name>.yaml # final image config
│ ├── melange.yaml # source build (optional)
│ └── test.sh # smoke test
├── .github/
│ ├── SECURITY.md # disclosure policy + verification recipes
│ └── workflows/
│ ├── build.yml # main CI pipeline (6h rebuilds)
│ ├── patch-go-deps.yml # daily Go transitive CVE patching
│ ├── update-<image>.yml # per-image upstream version tracking
│ └── update-wolfi-packages.yml
├── Makefile
├── README.md
├── CONTRIBUTING.md
└── LICENSE
Recentemente adicionado:
cosign verify-attestation.gh attestation verify.A seguir:
O que este projeto não é:
PRs são bem-vindos. CONTRIBUTING.md contém a configuração de construção, as convenções de imagem e a lista de verificação de validação local que executo antes de enviar.
Se você encontrar um problema de segurança, use o relatório privado de vulnerabilidade do GitHub em vez de abrir uma issue pública. A política de divulgação e o cronograma de resposta estão em .github/SECURITY.md.
MIT — veja LICENSE.
As imagens de contêiner incluem pacotes do Wolfi e outras fontes, cada um com suas próprias licenças (Apache-2.0, MIT, GPL, LGPL, BSD, etc.). As informações completas de licença estão no SBOM de cada imagem:```bash cosign download sbom ghcr.io/rtvkiz/minimal-python:latest | jq '.packages[].licenseConcluded'
docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-java:latest -jar /app/myapp.jar
docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-php:latest /app/index.php
docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-rails:latest -e "require 'rails'; puts Rails.version"
docker run -d -p 5672:5672 -v rabbitmqdata:/var/lib/rabbitmq ghcr.io/rtvkiz/minimal-rabbitmq:latest
docker run -d -p 3000:3000 -v giteadata:/data/gitea ghcr.io/rtvkiz/minimal-gitea:latest
</details>
## Usando em produção
**Fixar em tags de versão imutáveis.** Cada imagem é publicada com duas tags:
| Tag | Formato | Exemplo | Mutável |
|---|---|---|---|
| Versão | `VERSION-rEPOCH` | `ghcr.io/rtvkiz/minimal-redis-slim:8.4.1-r0` | Não |
| Última | `latest` | `ghcr.io/rtvkiz/minimal-redis-slim:latest` | Sim |
### Variantes de desenvolvimento (`:latest-dev`)
A maioria das imagens publicam um complemento `-dev` construído a partir da **mesma fonte que a produção** — mesma versão do runtime, mesmo conjunto de pacotes ajustado — além de shell, gerenciador de pacotes, conjunto de ferramentas de compilação e ferramentas de depuração apropriadas para a imagem. Destinado a estágios de build em CI e depuração dentro do pod, **não para implantação em produção**.
Uso típico em multi-estágio:```dockerfile
FROM ghcr.io/rtvkiz/minimal-ruby:latest-dev AS build
WORKDIR /work
COPY Gemfile Gemfile.lock ./
RUN bundle install
FROM ghcr.io/rtvkiz/minimal-ruby:latest
COPY --from=build /work /work
Para obter um shell interativo, substitua o entrypoint (imagens de desenvolvimento mantêm o entrypoint de produção para compatibilidade direta):```bash docker run -it --entrypoint /bin/sh ghcr.io/rtvkiz/minimal-:latest-dev docker run -it --entrypoint /bin/bash ghcr.io/rtvkiz/minimal-:latest-dev
As variantes de desenvolvimento compartilham o pipeline de assinatura, SBOM e proveniência SLSA da imagem de produção. Elas **não são rastreadas no painel de CVE público** — elas intencionalmente entregam uma superfície de ataque maior. Consulte [`.github/SECURITY.md`](https://github.com/rtvkiz/minimal/blob/HEAD/.github/SECURITY.md#dev-variants--dev-tags) para a política e [`docs/dev-variants/CONVENTIONS.md`](https://github.com/rtvkiz/minimal/blob/HEAD/docs/dev-variants/CONVENTIONS.md) para as regras de composição do pacote.
**Em distribuição hoje:** 57 de 57 variantes de desenvolvimento — cada imagem no catálogo agora oferece um acompanhante `:latest-dev` construído a partir da mesma fonte que a produção.
<details>
<summary><strong>Status da variante de desenvolvimento por imagem</strong></summary>
<br>
Legenda: ✅ Em distribuição `:latest-dev` · 🚧 Em andamento · 📝 Planejado
As categorias seguem os três modelos em [`docs/dev-variants/templates/`](https://github.com/rtvkiz/minimal/blob/HEAD/docs/dev-variants/templates/) (tempo de execução / daemon / servidor). A coluna "Referência" mostra onde espelhamos o conjunto de pacotes `<image>-public/devConfigs` público da Chainguard; **próprio** significa que a Chainguard fornece uma imagem exclusiva para Enterprise e nós projetamos a composição de desenvolvimento nós mesmos.
| Imagem | Categoria | Referência | Status |
|---|---|---|---|
| ruby | tempo de execução | Chainguard `ruby-public` | ✅ |
| python | tempo de execução | Chainguard `python-public` | ✅ |
| node-slim | tempo de execução | Chainguard `node-public` | ✅ |
| go | tempo de execução | Chainguard `go-public` | ✅ |
| java | tempo de execução | Chainguard `jdk-public` | ✅ |
| dotnet | tempo de execução | Chainguard `dotnet-runtime-10-public` | ✅ |
| php | tempo de execução | próprio (composer adiado — veja PR) | ✅ |
| rails | tempo de execução | próprio (derivado do ruby) | ✅ |
| bun | tempo de execução | próprio | ✅ |
| deno | tempo de execução | próprio | ✅ |
| postgres-slim | daemon | Chainguard `postgres-public` | ✅ |
| mariadb | daemon | Chainguard `mariadb-public` | ✅ |
| mysql | daemon | próprio | ✅ |
| redis-slim | daemon | Chainguard `redis-public` | ✅ |
| valkey | daemon | Chainguard `valkey-public` | ✅ |
| memcached | daemon | próprio | ✅ |
| sqlite | daemon | próprio | ✅ |
| opensearch | daemon | próprio | ✅ |
| kafka | daemon | próprio | ✅ |
| rabbitmq | daemon | próprio | ✅ |
| nats | daemon | próprio | ✅ |
| etcd | daemon | próprio | ✅ |
| qdrant | daemon | próprio | ✅ |
| nginx | servidor | Chainguard `nginx-public` | ✅ |
| haproxy | servidor | Chainguard `haproxy-public` | ✅ |
| minio | servidor | Chainguard `minio-client-public` (servidor próprio) | ✅ |
| httpd | servidor | próprio | ✅ |
| caddy | servidor | próprio | ✅ |
| traefik | servidor | próprio | ✅ |
| envoy | servidor | próprio | ✅ |
| prometheus | servidor | próprio | ✅ |
| victoria-metrics | servidor | próprio | ✅ |
| jaeger | servidor | próprio | ✅ |
| otelcol | servidor | próprio | ✅ |
| loki | servidor | próprio | ✅ |
| fluent-bit | servidor | próprio | ✅ |
| node-exporter | servidor | próprio | ✅ |
| blackbox-exporter | servidor | próprio | ✅ |
| pushgateway | servidor | próprio | ✅ |
| coredns | servidor | próprio | ✅ |
| gitea | servidor | próprio | ✅ |
| jenkins | servidor | próprio | ✅ |
| keycloak | servidor | próprio | ✅ |
| openbao | servidor | próprio | ✅ |
| registry | servidor | Chainguard `registry-public` | ✅ |
| mailpit | servidor | próprio (Chainguard não fornece nenhum mailpit público) | ✅ |
| consul | servidor | próprio (Chainguard não fornece nenhum consul público; BUSL-1.1) | ✅ |
| tempo | servidor | próprio (Chainguard não fornece nenhum tempo público; AGPL-3.0) | ✅ |
| mosquitto | daemon | próprio (Chainguard não fornece nenhum mosquitto público; EPL-2.0/EDL-1.0) | ✅ |
</details>```dockerfile
# Production Dockerfile — pin by version tag, ideally by digest
FROM ghcr.io/rtvkiz/minimal-go:1.26.0-r0 AS build
WORKDIR /src
COPY . .
RUN go build -o /out/app
FROM ghcr.io/rtvkiz/minimal-python:3.14.0-r0
COPY --from=build /out/app /usr/bin/app
ENTRYPOINT ["/usr/bin/app"]
Impor assinatura + proveniência no Kubernetes com sigstore-policy-controller ou Kyverno:```yaml
apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: verify-minimal-images spec: validationFailureAction: Enforce rules: - name: check-signature match: any: - resources: kinds: [Pod] verifyImages: - imageReferences: - "ghcr.io/rtvkiz/minimal-" attestors: - entries: - keyless: subject: "https://github.com/rtvkiz/minimal/" issuer: "https://token.actions.githubusercontent.com"
O sufixo `-r0` é o número de revisão — é redefinido para `r0` a cada incremento de versão upstream, incrementa (`r1`, `r2`, …) para reconstruções da mesma versão upstream (por exemplo, patches de dependência). As tags de versão antigas são preservadas entre reconstruções.
## Pipeline de build
<details>
<summary><strong>Diagrama do pipeline</strong></summary>
<br>```
┌─────────────────────────────────────────────────────────────────────────────┐
│ BUILD PIPELINE │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Signing Keys: │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ PRs: keygen job (ephemeral) │ Main: repository secrets (persistent)│ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────┐ ┌─────────────────────────────────────┐ │
│ │ melange-build │ │ build-apko │ │
│ │ Native ARM64 runners │ │ Wolfi pre-built packages │ │
│ │ ┌────────┐ ┌────────────┐ │ │ ┌─────────┐ ┌───────────────┐ │ │
│ │ │ x86_64 │ │ aarch64 │ │ │ │ Wolfi │────►│ apko publish │ │ │
│ │ │ ubuntu │ │ ubuntu-arm │ │ │ │ packages│ │ (multi-arch) │ │ │
│ │ └────┬───┘ └─────┬──────┘ │ │ └─────────┘ └───────┬───────┘ │ │
│ │ └─────┬──────┘ │ │ │ │ │
│ │ ▼ │ └──────────────────────────│──────────┘ │
│ │ ┌──────────────┐ │ │ │
│ │ │ artifacts │ │ │ │
│ │ │ (x86+arm64) │ │ │ │
│ │ └──────┬───────┘ │ │ │
│ └────────────│────────────────┘ │ │
│ ▼ │ │
│ ┌─────────────────────────────┐ │ │
│ │ build-melange │ │ │
│ │ ┌─────────┐ ┌────────────┐ │ │ │
│ │ │ merge │►│ apko │─┼───────────────────────────────┤ │
│ │ │ packages│ │ publish │ │ │ │
│ │ └─────────┘ └────────────┘ │ │ │
│ └─────────────────────────────┘ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ Verification & Attestation │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────────────────┐ │ │
│ │ │ Grype │─►│ Test │─►│ cosign │─►│ SBOM + SLSA L3 │ │ │
│ │ │ CVE scan │ │ image │ │ sign │ │ attestations │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └─────────────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │
│ Note: PRs build and test but do not publish. Only main branch publishes. │
└─────────────────────────────────────────────────────────────────────────────┘
main| Implantar alterações de configuração |
| Manual | Workflow dispatch | Reconstruções de emergência |
| Workflow | Observa | O que faz |
|---|
update-jenkins.yml | Lançamentos LTS do Jenkins | Atualiza a versão na configuração do melange, Makefile, build.yml |
update-redis.yml | Lançamentos do Redis no GitHub | Atualiza a versão e SHA256 |
update-mysql.yml | Tags do MySQL LTS (8.4.x) no GitHub | Atualiza a versão e SHA256 |
update-memcached.yml | Lançamentos do Memcached no GitHub | Atualiza a versão e SHA256 |
update-kafka.yml | Tags do Apache Kafka 4.x no GitHub | Atualiza a versão e SHA512 |
update-php.yml | API de lançamentos do php.net | Atualiza a versão e SHA256; abre issue para novas séries minor/major |
update-rails.yml | API RubyGems + tags do Ruby no GitHub | Atualiza a gem Rails e a versão fonte do Ruby independentemente |
update-rabbitmq.yml | Lançamentos do RabbitMQ no GitHub | Atualiza a versão e SHA256 |
update-minio.yml | Lançamentos do MinIO no GitHub | Atualiza a tag de lançamento, versão baseada em data e SHA256 |
update-victoria-metrics.yml | Lançamentos do VictoriaMetrics no GitHub | Atualiza a versão e SHA256 |
update-jaeger.yml | Lançamentos do Jaeger v2.x no GitHub | Atualiza a versão e SHA256; avisa sobre mudanças na versão major |
update-otelcol.yml | Lançamentos estáveis do OTel Collector | Atualiza a versão e SHA256; ignora pré-lançamentos |
update-qdrant.yml | Lançamentos do Qdrant v1.x no GitHub | Atualiza a versão e SHA256 |
update-etcd.yml | Lançamentos do etcd v3.x no GitHub | Atualiza a versão e SHA256 |
update-opensearch.yml | Lançamentos do OpenSearch 3.x no GitHub | Atualiza a versão no Makefile e README |
update-gitea.yml | Tags do Gitea v1.x no GitHub | Atualiza a versão e SHA256 |
update-coredns.yml | Tags do CoreDNS v1.x no GitHub | Atualiza a versão e SHA256 |
update-openbao.yml | Tags do OpenBao v2.x no GitHub | Atualiza a versão e SHA256 |
update-loki.yml | Tags do Loki v3.x no GitHub | Atualiza a versão e SHA256 |
update-fluent-bit.yml | Tags do Fluent Bit v5.x no GitHub | Atualiza a versão e SHA256 |
update-keycloak.yml | Tags do Keycloak 26.x no GitHub | Atualiza a versão e SHA256 |
update-wolfi-packages.yml | Wolfi APKINDEX | Detecta novas versões de Python, Node, Go, .NET, Java, PostgreSQL, Deno |
Atualizações de patch são auto-PR e validadas pelo CI. Bumps menores/maiores criam uma Issue no GitHub com uma checklist de upgrade manual.
| Imagem | Versão | Usuário | Entrypoint | Workdir |
|---|
| Python | 3.14.x | nonroot (65532) | /usr/bin/python3 | /app |
| Node.js-slim | 25.x | nonroot (65532) | /usr/bin/dumb-init -- /usr/bin/node | /app |
| Bun | latest | nonroot (65532) | /usr/bin/bun | /app |
| Go | 1.26.x | nonroot (65532) | /usr/bin/go | /app |
| Nginx | mainline | nginx (65532) | /usr/sbin/nginx -g "daemon off;" | / |
| HTTPD | 2.4.x | www-data (65532) | /usr/sbin/httpd -DFOREGROUND | /var/www/localhost/htdocs |
| Jenkins | 2.555.x LTS | jenkins (1000) | tini -- java -jar jenkins.war | /var/jenkins_home |
| Redis | 8.6.x | redis (65532) | /usr/bin/redis-server | / |
| MySQL | 8.4.x | mysql (65532) | /usr/bin/docker-entrypoint.sh | / |
| MariaDB | 11.4.x | mariadb (65532) | /usr/bin/mariadbd | /var/lib/mysql |
| Memcached | 1.6.x | memcached (65532) | /usr/bin/memcached | / |
| PostgreSQL | 18.x | postgres (70) | /usr/bin/postgres | / |
| SQLite | 3.51.x | nonroot (65532) | /usr/bin/sqlite3 | /data |
| .NET Runtime | 10.x | nonroot (65532) | /usr/bin/dotnet | /app |
| Java | 26.x | nonroot (65532) | /usr/bin/java | /app |
| Ruby | 4.0.x | nonroot (65532) | /usr/bin/ruby | /work |
| PHP | 8.5.x | nonroot (65532) | /usr/bin/php | /app |
| Rails | Ruby 4.0.x + Rails 8.1.x | nonroot (65532) | /usr/bin/ruby | /app |
| Kafka | 4.2.x | kafka (65532) | /usr/bin/kafka-entrypoint.sh | / |
| RabbitMQ | 4.3.x | rabbitmq (65532) | /opt/rabbitmq/sbin/rabbitmq-server | / |
| NATS | latest | nonroot (65532) | /usr/bin/nats-server | / |
| Valkey | latest | nonroot (65532) | /usr/bin/valkey-server | / |
| MinIO | RELEASE.2025-10-15 | minio (65532) | /usr/bin/minio server --console-address :9001 /data | /data |
| OpenSearch | 3.7.0 | opensearch (65532) | /usr/share/opensearch/opensearch-docker-entrypoint.sh | /usr/share/opensearch/data |
| etcd | 3.6.x | nonroot (65532) | /usr/bin/etcd | /var/lib/etcd |
| VictoriaMetrics | 1.142.x | nonroot (65532) | /usr/bin/victoria-metrics | / |
| Jaeger | 2.18.x | nonroot (65532) | /usr/bin/jaeger | / |
| OTel Collector | 0.151.x | nonroot (65532) | /usr/bin/otelcol | / |
| Qdrant | 1.17.x | nonroot (65532) | /usr/bin/qdrant | /qdrant |
| Deno | 2.x | nonroot (65532) | /usr/bin/deno | /app |
| Gitea | 1.26.x | gitea (65532) | /usr/bin/gitea web --config /etc/gitea/app.ini | /var/lib/gitea |
| CoreDNS | 1.14.x | nonroot (65532) | /usr/bin/coredns | / |
| OpenBao | 2.5.x | openbao (65532) | /usr/bin/bao server | /openbao/data |
| Keycloak | 26.6.x | keycloak (65532) | /opt/keycloak/bin/kc.sh start-dev | /opt/keycloak/data |
| Loki | 3.6.x | loki (65532) | /usr/bin/loki | /loki |
| Fluent Bit | 5.0.x | nonroot (65532) | /usr/bin/fluent-bit | / |