Introduction à Docker et Swift : Pourquoi est-ce important ?
Dans le développement logiciel moderne, la conteneurisation est devenue le standard de facto pour garantir la reproductibilité, l'évolutivité et la simplicité de déploiement des applications. Si vous développez en Swift pour iOS ou macOS, vous êtes probablement habitué à l'écosystème Xcode et au Package Manager. Cependant, lorsqu'il s'agit de la partie serveur (Swift on Server) ou de créer des environnements isolés pour la compilation et les tests, Docker devient un outil indispensable.
Dans cet article, nous allons voir comment conteneuriser des applications Swift avec Docker. Vous apprendrez à créer un Dockerfile pour Swift, à configurer l'environnement pour le framework serveur Vapor, et à optimiser le processus de compilation. Ce contenu sera utile aussi bien aux développeurs iOS qui découvrent le backend qu'aux ingénieurs DevOps travaillant avec Swift.
Les bases de Docker pour un développeur Swift
Docker permet d'empaqueter une application avec toutes ses dépendances dans un conteneur léger. Pour Swift, c'est particulièrement pertinent car le compilateur et les bibliothèques peuvent varier selon la version du système d'exploitation. Au lieu de configurer un serveur manuellement, il vous suffit de lancer un conteneur.
Installation de Docker et du SDK Swift
La première chose à faire est de vous assurer que Docker est installé. Ensuite, vous aurez besoin d'une image Swift. L'image officielle d'Apple est disponible sur Docker Hub :
docker pull swift:5.9Cette image inclut le compilateur Swift, le Package Manager et les utilitaires de base. Vous pouvez l'utiliser à la fois pour compiler et pour exécuter des applications.
Création d'une application Swift simple
Créons une application console minimale :
// main.swiftprint("Hello, Docker with Swift!")Initialisons le projet :
mkdir MySwiftApp && cd MySwiftAppswift package init --type executableRédaction d'un Dockerfile pour Swift
Créons maintenant un Dockerfile à la racine du projet. Il est important d'utiliser une compilation multi-étapes (multi-stage build) pour que l'image finale soit minimale.
# Première étape : compilationFROM swift:5.9 AS buildWORKDIR /appCOPY Package.swift Package.resolved ./RUN swift package resolveCOPY . .RUN swift build -c release --static-swift-stdlib
# Deuxième étape : exécutionFROM ubuntu:22.04WORKDIR /appCOPY --from=build /app/.build/release/MySwiftApp .CMD ["./MySwiftApp"]Explication :
- --static-swift-stdlib — liaison statique de la bibliothèque standard Swift, pour ne pas inclure libswift.so dans l'image.
- COPY Package.swift séparément — mise en cache des dépendances par Docker.
- Ubuntu 22.04 — base légère pour l'exécution.
Compilez et exécutez :
docker build -t my-swift-app .docker run --rm my-swift-appConteneurisation d'une application Vapor
Le framework Vapor est le choix le plus populaire pour le Swift côté serveur. Examinons un Dockerfile pour un projet Vapor typique.
Structure d'un projet Vapor
Supposons que vous ayez un projet créé avec vapor new MyVaporApp. Le Dockerfile sera plus complexe, car il faut prendre en compte le travail avec le réseau et la base de données.
# Étape de compilationFROM swift:5.9 AS buildRUN apt-get update && apt-get install -y libsqlite3-devWORKDIR /appCOPY Package.swift Package.resolved ./RUN swift package resolveCOPY . .RUN swift build -c release
# Étape d'exécutionFROM swift:5.9-slimWORKDIR /appCOPY --from=build /app/.build/release/MyVaporApp .COPY --from=build /app/Public ./PublicCOPY --from=build /app/Resources ./ResourcesEXPOSE 8080CMD ["./MyVaporApp", "serve", "--hostname", "0.0.0.0", "--port", "8080"]Points importants :
- libsqlite3-dev —