Image OCI
Introduction aux Images OCI
L'Open Container Initiative (OCI) définit les standards ouverts pour les conteneurs : 1. Image Spec : Format de l'image (système de fichiers, métadonnées). 2. Runtime Spec : Comment exécuter le conteneur.
Une image OCI est composée de couches (layers) en lecture seule. Chaque instruction dans un Dockerfile crée une nouvelle couche.
Bonnes Pratiques Dockerfile
Pour créer des images légères, sécurisées et performantes :
1. Multi-stage Builds
Réduire la taille de l'image finale en séparant l'étape de build de l'étape d'exécution.
# Stage 1: Build
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o main .
# Stage 2: Run
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/main .
CMD ["./main"]
2. Réduire le nombre de couches
Combiner les commandes RUN pour éviter de multiplier les couches intermédiaires.
# Mauvais
RUN apt-get update
RUN apt-get install -y curl
# Bon
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
3. Sécurité (Rootless)
Ne pas exécuter les processus en tant que root.
Kaniko : Build sans Docker
Kaniko est un outil permettant de construire des images de conteneurs à partir d'un Dockerfile, à l'intérieur d'un conteneur ou d'un cluster Kubernetes, sans avoir besoin d'un démon Docker.
C'est idéal pour les pipelines CI/CD (GitLab CI, Jenkins) sécurisés.
Exemple d'utilisation (Podman/Docker)
docker run \
-v $(pwd):/workspace \
gcr.io/kaniko-project/executor:latest \
--dockerfile=/workspace/Dockerfile \
--destination=monregistre.com/monimage:latest \
--context=dir:///workspace
Outil d'exploration : cek
cek (Container Exploration Kit) permet d'explorer le système de fichiers et les couches d'une image OCI sans la démarrer. C'est très utile pour debugger une image, vérifier son contenu ou comprendre sa structure sans risquer d'exécuter du code malveillant.
Installation
Via Brew ou Go :
Utilisation
Lister les fichiers (ls)
Voir le système de fichiers fusionné (comme si le conteneur tournait) :
Lire un fichier (cat)
Afficher le contenu d'un fichier présent dans l'image :
Arborescence (tree)
Visualiser la structure des dossiers :
Inspecter les métadonnées (inspect)
Voir les couches, la taille, l'architecture et le digest :
Exporter (export)
Sauvegarder l'image en .tar pour la transférer (air-gap, backup) :
Support Daemon
cek peut se connecter à votre démon local (Docker, Podman) pour utiliser les images déjà pullées, évitant de les retélécharger.