Docker est le pre-requis pour tout Data Engineer moderne. En entretien, on va au-dela du simple docker run — on evalue la capacite a architecturer des stacks locales et des images optimisees.
Quelles sont les bonnes pratiques pour un Dockerfile Python data ?
# Multi-stage build : image finale legere
FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt .
# --no-cache-dir : reduit la taille de l image
RUN pip install --no-cache-dir --user -r requirements.txt
# Image finale : ne pas copier pip, seulement les packages installes
FROM python:3.11-slim
WORKDIR /app
# Copier seulement les packages installes
COPY --from=builder /root/.local /root/.local
COPY . .
# Pas de root en production
RUN useradd -m appuser
USER appuser
# Variables d environnement
ENV PATH=/root/.local/bin:$PATH
ENV PYTHONUNBUFFERED=1
CMD ['python', 'main.py']Comment monteriez-vous une stack data locale avec Airflow, PostgreSQL et dbt ?
version: '3.8'
services:
postgres:
image: postgres:15
environment:
POSTGRES_DB: datadb
POSTGRES_USER: data
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- '5432:5432'
healthcheck:
test: ['CMD', 'pg_isready', '-U', 'data']
interval: 10s
airflow:
image: apache/airflow:2.9.0
depends_on:
postgres:
condition: service_healthy
environment:
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://data:${POSTGRES_PASSWORD}@postgres/airflow
volumes:
- ./dags:/opt/airflow/dags
- ./logs:/opt/airflow/logs
ports:
- '8080:8080'
dbt:
build: ./dbt
depends_on: [postgres]
volumes:
- ./dbt:/dbt
command: ['dbt', 'run']
volumes:
postgres_data:Comment un service Airflow appelle-t-il un service PostgreSQL dans Docker Compose ?
Pourquoi utilise-t-on les multi-stage builds ? Quelle reduction de taille obtient-on typiquement ?
Comment organisez-vous la gestion des images Docker dans un projet data d equipe ?
| Niveau | Maitrise | Signal GO | NO-GO |
|---|---|---|---|
| Junior | Dockerfile basique, docker run, docker-compose up | Sait ecrire un Dockerfile Python, lance une stack avec Compose | Ne sait pas ce qu est un volume |
| Confirme | Multi-stage, healthchecks, networking Compose, .dockerignore | Utilise multi-stage, configure les healthchecks, sait pourquoi postgres:5432 marche entre services | Utilise :latest partout, ne connait pas les multi-stage builds |
| Senior | Registry CI/CD, securite (non-root, secrets), migration K8s | A configure le push automatique en CI, utilise des users non-root, connait kompose | Pousse des images avec des credentials en dur dans le Dockerfile |
Premier entretien gratuit. Rapport GO/NO-GO sous 48h.