Skip to content

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.

RUN adduser -D appuser
USER appuser

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 :

brew install cek
# ou
go install github.com/bschaatsbergen/cek@latest

Utilisation

Lister les fichiers (ls)

Voir le système de fichiers fusionné (comme si le conteneur tournait) :

cek ls nginx:latest
cek ls nginx:latest /etc/nginx

Lire un fichier (cat)

Afficher le contenu d'un fichier présent dans l'image :

cek cat nginx:latest /etc/nginx/nginx.conf

Arborescence (tree)

Visualiser la structure des dossiers :

cek tree nginx:latest -L 2

Inspecter les métadonnées (inspect)

Voir les couches, la taille, l'architecture et le digest :

cek inspect nginx:latest

Exporter (export)

Sauvegarder l'image en .tar pour la transférer (air-gap, backup) :

cek export alpine:latest -o alpine.tar

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.

export DOCKER_HOST=unix:///var/run/docker.sock