Définition
Une image de base Ubuntu est une version légère et optimisée pour les conteneurs du système d’exploitation Ubuntu, utilisée comme couche de base pour la création de conteneurs Docker. Elle établit un équilibre entre la taille et la fonctionnalité en fournissant un écosystème mature et une vaste bibliothèque d’outils préinstallés, ce qui en fait un choix hautement compatible et stable pour diverses charges de travail d’entreprise.
- Une fondation équilibrée : les images de base Ubuntu constituent un juste milieu stratégique entre les distributions de bureau « lourdes » et les options ultra-minimalistes comme Alpine, pesant environ 75 Mo.
- Écosystème étendu : les développeurs bénéficient d’un accès immédiat au gestionnaire de packages Apt et à plus de 60 000 packages logiciels, ce qui réduit considérablement le temps passé à coder manuellement les dépendances.
- Stabilité de la production : construit sur glibc (la bibliothèque C standard), Ubuntu assure une compatibilité élevée pour les applications Python, Node.js et Java, en évitant les bugs subtils d’exécution souvent trouvés dans les bibliothèques minimalistes.
- Sécurité de niveau entreprise : plus lourd qu’Alpine, Ubuntu compense par un cycle de vie LTS prévisible, des mises à jour de sécurité rapides et une intégration étroite avec des solutions de scan de vulnérabilités comme JFrog Xray.
- Adapté aux développeurs : en utilisant le même environnement du développement local à la production dans le Cloud, les équipes réduisent les erreurs de type « ça fonctionne sur ma machine » et rationalisent le dépannage.
Vue d’ensemble des images de base Ubuntu
Lorsque les développeurs débattent de l’image de base à utiliser, la conversation se concentre souvent sur le minimalisme par opposition à l’équilibre entre la taille et la fonctionnalité. Dans les discussions communautaires comme ce fil de discussion Reddit et les questions courantes de StackOverflow, un thème émerge : Le contexte est important. Bien qu’il puisse y avoir des alternatives plus petites, la vaste bibliothèque d’outils d’Ubuntu, son écosystème mature et sa large adoption dans tous les secteurs en font une base fiable. Pour les développeurs qui veulent une image de base qui fonctionne de manière fiable dans la plupart des cas d’utilisation sans correctifs ou personnalisations sans fin, Ubuntu reste un candidat solide.
Dans certaines situations, cependant, il est logique de sélectionner l’image de base la plus légère possible, car les images de base plus petites permettent des opérations de build plus rapides. Elles sont également plus sûres, dans le sens où elles ont une surface d’attaque plus petite.
Cela ne signifie pas, cependant, que plus petit est toujours mieux lors de la sélection d’une image de base. Pour le prouver, cet article présente les différences entre deux types d’images de base fondamentalement distincts : Celles basées sur Ubuntu Linux et celles basées sur Alpine Linux.
Comme nous le verrons, bien qu’aucune des deux images de base ne soit intrinsèquement meilleure que l’autre, chacune est mieux adaptée à certains cas d’utilisation. Vous ne devez pas nécessairement choisir Alpine plutôt qu’Ubuntu simplement parce qu’Ubuntu est une image de base plus grande.
Pourquoi choisir la bonne image de base est important ?
Choisir la bonne image de base pour votre conteneur est l’une des premières étapes pour réussir la conteneurisation d’une application. Le type d’image de base que vous sélectionnez doit tenir compte des considérations suivantes :
- Dépendances : si les dépendances dont votre application a besoin pour s’exécuter sont incluses dans l’image de base, vous n’avez pas à faire autant de travail lors de la configuration de votre image Docker en ajoutant des commandes personnalisées à votre fichier Docker.
- Extensibilité : le fait d’avoir plus de dépendances et d’autres ressources intégrées dans l’image de base facilite également la mise à jour de vos conteneurs au fil du temps sans avoir à modifier les fichiers Docker.
- Sécurité : moins vous avez de composants dans votre image de base, plus le risque que l’image contienne une bibliothèque vulnérable ou une autre ressource que les attaquants pourraient exploiter est faible.
- « Gonflement » des images : l’utilisation d’une image de base inutilement grande peut conduire à un gonflement de l’image (en anglais, image bloat), ce qui signifie que les images de conteneur sont grandes (et donc plus longues à télécharger) parce qu’elles contiennent des composants dont l’application n’a pas besoin.
Pour sélectionner la meilleure image de base pour votre application, vous devez trouver l’équilibre entre le nombre de ressources incluses dans l’image et la taille globale de l’image. Ces priorités ont tendance à être concurrentes, car plus vous incluez d’utilitaires et de bibliothèques dans votre image de base, plus l’image de base sera grande.
En général, les images de base se répartissent en deux catégories principales :
- Images de base créées à l’aide de systèmes d’exploitation à grande échelle, comme Ubuntu
- Images basées sur des systèmes d’exploitation minimalistes, comme Alpine Linux
En utilisant Ubuntu et Alpine comme exemples, comparons chaque type d’image de base et pesons ses avantages et ses inconvénients.
Utilisation d’Ubuntu comme image de base
Les images de base Ubuntu, qui peuvent être trouvées sur Docker Hub, sont créées à l’aide du système de fichiers racine d’Ubuntu Base, une variante du système d’exploitation Ubuntu Linux.
Il est important de noter qu’Ubuntu Base est une version plus légère d’Ubuntu que celle que vous obtiendriez si vous installiez la version de bureau d’Ubuntu sur votre machine. Ubuntu Base ne contient pas les logiciels nécessaires pour exécuter une interface graphique, des logiciels de bureau et d’autres utilitaires qui ne sont pas pertinents pour la plupart des cas d’utilisation de conteneurs. Ainsi, même lorsque vous utilisez Ubuntu comme image de base, vous obtenez une image relativement légère ; les images de base Ubuntu actuelles ont une taille inférieure à 75 mégaoctets.
Néanmoins, si vous exécutez l’image de base Ubuntu 20.04 et examinez le contenu du répertoire /bin, vous constaterez que l’image de base d’Ubuntu contient 294 utilitaires dans ce répertoire. Tous ces logiciels sont disponibles dans l’image de base Ubuntu par défaut, sans que les développeurs n’aient besoin de les ajouter.
Comment travailler avec les images de base
Ubuntu
Pour utiliser Ubuntu comme image de base pour votre conteneur, créez d’abord un fichier Docker qui identifie Ubuntu comme image.
Si vous souhaitez installer un logiciel supplémentaire et l’inclure dans votre conteneur, vous devez configurer le fichier Docker pour qu’il exécute apt et installe les packages souhaités.
Alpine
Si vous choisissez d’utiliser une image de base Alpine, il vous suffit de créer un fichier Docker.
Si vous devez installer un logiciel supplémentaire, vous pouvez le faire à l’aide d’apk, le gestionnaire de packages d’Alpine.
Une fois votre fichier Docker correctement configuré, créez votre conteneur comme vous le feriez normalement.
Quels sont les avantages d’Ubuntu par rapport à Alpine ?
Grâce en partie à cette vaste collection d’outils intégrés, les images de base Ubuntu offrent certains avantages par rapport aux images de base vraiment minimalistes, comme Alpine :
- Plus d’outils : les images de base Ubuntu incluent plus de bibliothèques et d’utilitaires par défaut. Cela réduit la quantité de logiciels que vous devez installer en plus de l’image de base lors de la création de votre propre image de conteneur.
- Apt par défaut : Apt, le gestionnaire de packages Ubuntu, est intégré aux images de base Ubuntu. Vous pouvez utiliser apt pour installer des logiciels supplémentaires à partir des 60 000 packages d’Ubuntu lors de la création d’un conteneur. Alpine Linux propose également un gestionnaire de packages, mais il n’a pas accès à autant de packages qu’apt.
- Prise en charge généralisée : Ubuntu est l’une des distributions Linux les plus populaires, et elle est largement utilisée non seulement pour exécuter des conteneurs, mais aussi pour une variété d’autres objectifs. Cela signifie qu’Ubuntu est susceptible d’être familier aux développeurs et aux administrateurs système, même s’ils n’ont jamais utilisé Docker auparavant. Alpine Linux est moins courant en dehors du contexte de Docker.
Quels sont les avantages d’Alpine par rapport à Ubuntu ?
Bien qu’une image de base Ubuntu soit avantageuse à bien des égards, Alpine Linux peut être un meilleur choix dans certaines situations. Les inconvénients d’Ubuntu par rapport à Alpine sont les suivants :
- Taille d’image plus grande : les images de base Alpine totalisent environ 5,5 mégaoctets, soit beaucoup moins que les 75 mégaoctets environ qu’Ubuntu occupe. Par conséquent, les conteneurs créés en utilisant Alpine comme image de base seront également plus petits. En conséquence, les conteneurs basés sur Alpine nécessitent moins de temps pour être téléchargés, analysés et, dans la plupart des cas, exécutés.
- Surface d’attaque plus large : parce que les images de base Ubuntu incluent beaucoup plus d’utilitaires et de bibliothèques par défaut qu’Alpine, elles présentent un risque de sécurité plus élevé.
Pour se faire une idée de la différence de taille, Alpine ne compte que 81 utilitaires dans /bin ; un nombre non négligeable, mais néanmoins bien inférieur aux 294 d’Ubuntu.
Après une inspection plus approfondie, la plupart des utilitaires d’Alpine ne sont en fait que des liens symboliques vers BusyBox, un exécutable qui fournit un certain nombre d’outils Unix dans une seule application.
D’un point de vue technique, Alpine ne contient vraiment qu’un seul utilitaire : BusyBox. En ce sens, Alpine est encore plus léger et plus facile à sécuriser, car les seules vulnérabilités dont vous devez vous soucier sont celles qui affectent BusyBox. Ce n’est pas le cas dans Ubuntu, où chacun des centaines d’outils installés par défaut pourrait être soumis à un certain nombre de vulnérabilités.
En résumé : dans les cas d’utilisation où la sécurité est une priorité absolue, ou lorsque votre application a très peu de dépendances, il est plus logique d’utiliser Alpine comme image de base qu’Ubuntu ou une distribution Linux similaire « complète ».
Est-il efficace d’utiliser Ubuntu comme image de base ?
Les images de base Ubuntu établissent un équilibre entre efficacité et capacité. Si l’empreinte d’Alpine est extrêmement réduite, Ubuntu reste néanmoins léger comparé aux distributions desktop complètes, ce qui en fait une option viable pour des charges de travail en production. Les équipes qui apprécient les temps de démarrage prévisibles et les performances stables préfèrent souvent Ubuntu, car ses bibliothèques et outils supplémentaires réduisent le besoin d’étapes de build personnalisées.
Des informations du monde réel, comme celles partagées dans le blog Octopus sur l’utilisation des images Docker d’Ubuntu, soulignent que l’empreinte légèrement plus grande d’Ubuntu permet de réduire les surprises lors des builds et des déploiements. Les développeurs sur ServerFault soulignent également comment ses images de base évitent la surcharge liée à l’ajout de dépendances manquantes, ce qui permet en fin de compte d’économiser du temps et des ressources. De cette façon, Ubuntu maintient l’efficacité des opérations des conteneurs sans sacrifier la fonctionnalité.
Dans quelle mesure Ubuntu est-il flexible ?
La flexibilité est l’une des caractéristiques les plus fortes d’Ubuntu. Les développeurs peuvent facilement étendre une image de base Ubuntu avec le gestionnaire de packages apt, qui donne accès à plus de 60 000 packages logiciels. Cela permet de configurer facilement les images pour tout, des applications Python ou Node.js aux piles d’entreprise complètes.
Comme le notent les contributeurs d’AskUbuntu, la principale différence entre Ubuntu en tant que système d’exploitation et en tant qu’image Docker est que cette dernière supprime les composants inutiles tout en conservant les éléments essentiels sur lesquels les développeurs s’appuient. Sur DevOps StackExchange, les praticiens soulignent que cette flexibilité fait d’Ubuntu une solution plus adaptée que les images spécifiques à une application pour les projets qui évoluent rapidement. Même les développeurs individuels, comme dans cet article de blog de Kronis, soulignent que la compatibilité d’Ubuntu avec les infrastructures et les workflows existants lui permet de passer sans friction de petits projets à des déploiements à l’échelle de l’entreprise.
Sécurisation des images de base avec JFrog
Ubuntu offre un équilibre puissant entre fonctionnalité et flexibilité en tant qu’image de base Docker, tandis qu’Alpine offre minimalisme et vitesse. Mais quel que soit votre choix, le véritable défi n’est pas seulement la taille ou la commodité : il s’agit de s’assurer que les packages et les dépendances à l’intérieur de ces images sont sécurisés.
JFrog Xray s’intègre directement à vos registres de conteneurs et à vos pipelines CI/CD pour analyser les images basées sur Ubuntu ou Alpine à la recherche de vulnérabilités, de conformité des licences et de dépendances à risque. Avec Xray, les équipes peuvent utiliser en toute confiance l’image de base qui correspond à leur workflow, sans sacrifier la sécurité ou la conformité à mesure qu’elles évoluent.
Pour plus d’informations, veuillez consulter notre site web, organisez une visite virtuelle ou organisez une démonstration individuelle à votre convenance.