Points clés à retenir

  • Utilisez les images Docker officielles pour une meilleure sécurité et de meilleures performances. Créer vos propres images peut entraîner une configuration incorrecte et prendre plus de temps.
  • Utilisez des versions spécifiques des images Docker pour éviter les comportements imprévisibles et les conflits avec les dépendances. Tirez et construisez à l’aide d’images d’une version spécifique.
  • Analysez les images Docker pour détecter les failles de sécurité à l'aide de la commande docker scan. Déterminez si une image est suffisamment sécurisée pour votre application.

Docker est le logiciel de conteneurisation le plus populaire, mais tout le monde ne l'utilise pas efficacement. Si vous ne suivez pas les meilleures pratiques de Docker, vous pouvez laisser vos applications vulnérables à des problèmes de sécurité ou de performances.

Voici quelques bonnes pratiques que vous pouvez adopter pour utiliser les fonctionnalités de Docker avec ingéniosité. Ces mesures améliorent la sécurité et garantissent que vous créez des fichiers Docker maintenables.

instagram viewer

1. Utiliser les images Docker officielles

Lors de la conteneurisation de votre application, vous devez utiliser une image Docker. Vous pouvez créer une image avec une configuration personnalisée ou utiliser les images officielles de Docker.

Créer vos propres images nécessite que vous gériez vous-même toute la configuration. Par exemple, pour créer une image pour une application node.js, vous devez télécharger node.js et ses dépendances. Le processus prend du temps et peut ne pas aboutir à une configuration correcte.

Docker vous recommande d'utiliser une image node.js officielle fournie avec toutes les dépendances correctes. Les images Docker ont de meilleures mesures de sécurité, sont légères et sont testées pour divers environnements. Vous pouvez retrouver les images officielles sur Images officielles de Docker page.

2. Utiliser des versions spécifiques de Docker Image

Habituellement, lorsque vous extrayez une image officielle, c'est celle avec la dernière balise qui représente la dernière version mise à jour de cette image. Chaque fois que vous créez un conteneur à partir de cette image, il s'agit d'une version différente du dernier conteneur.

La création avec différentes versions d'image Docker peut entraîner un comportement imprévisible dans votre application. Les versions peuvent entrer en conflit avec d'autres dépendances et éventuellement provoquer l'échec de votre application.

Docker vous recommande d'extraire et de créer à l'aide d'images d'une version spécifique. Les images officielles contiennent également de la documentation et couvrent les cas d'utilisation les plus courants.

Par exemple, au lieu de docker pull alpin, utiliser docker pull alpin: 3.18.3. Docker extraira cette version spécifique. Vous pouvez ensuite l'utiliser dans des builds successifs, réduisant ainsi les erreurs dans votre application. Vous pouvez trouver les versions particulières des images sur la page officielle des images Docker, sous Balises prises en charge et liens Dockerfile respectifs:

3. Analyser les images pour détecter les vulnérabilités de sécurité

Comment pouvez-vous déterminer qu’une image avec laquelle vous souhaitez créer ne présente aucune faille de sécurité? En le scannant. Vous pouvez numériser des images Docker à l'aide de la commande docker scan. La syntaxe est la suivante :

docker scan [IMAGE]

Vous devez d'abord vous connecter à Docker pour numériser une image.

docker login

Ensuite, numérisez l'image spécifique que vous souhaitez vérifier :

docker scan ubuntu: latest

Un outil appelé Synchroniser analyse l'image, répertoriant les vulnérabilités en fonction de leur gravité. Vous pouvez voir le type de vulnérabilité et des liens vers des informations à ce sujet, y compris comment la corriger. L’analyse vous permet de savoir si l’image est suffisamment sécurisée pour votre application.

4. Utiliser des images Docker de petite taille

Lorsque vous extrayez une image Docker, elle est livrée avec tous les utilitaires système. Cela augmente la taille de l'image avec des outils dont vous n'avez pas besoin.

Les grandes images Docker occupent de l'espace de stockage et peuvent ralentir l'exécution des conteneurs. Ils présentent également un plus grand risque de failles de sécurité.

Tu peux réduire la taille des images Docker à l'aide d'images Alpine. Les images alpines sont légères et sont fournies uniquement avec les outils nécessaires. Ils réduisent l'espace de stockage, permettant à votre application de s'exécuter plus rapidement et plus efficacement.

Vous trouverez une version Alpine pour la plupart des images officielles sur Docker. Voici un exemple de versions Alpine pour PostgreSQL :

5. Optimiser les couches d'images de mise en cache

Chaque commande d'un Dockerfile représente un calque sur l'image. Les couches ont différents utilitaires et remplissent diverses fonctions. Si vous regardez les images officielles sur Docker Hub, vous verrez les instructions utilisées pour les créer.

Le Dockerfile comprend tout ce dont vous avez besoin pour créer l'image. C'est l'une des raisons pour lesquelles beaucoup les développeurs préfèrent Docker aux machines virtuelles.

Voici la structure d’un exemple d’image alpine :

Lorsque vous créez votre application basée sur une image, vous ajoutez davantage de calques à l'image. Docker exécute les instructions sur un fichier Docker de haut en bas, et si une couche change, Docker doit reconstruire les couches suivantes.

La meilleure pratique consiste à organiser votre Dockerfile des fichiers les moins changeants à ceux qui changent le plus souvent. Les instructions qui ne changent pas, comme l'installation, peuvent se trouver en haut du fichier.

Lorsque vous modifiez un fichier, Docker construit à partir des fichiers modifiés et met en cache les fichiers inchangés situés au-dessus. Le processus est donc plus rapide.

Regardez l'exemple illustré dans l'image ci-dessus. S'il y a un changement dans les fichiers de l'application, Docker construit à partir de là; il n'est pas nécessaire d'installer à nouveau les packages npm.

Si vous construisez à partir de l'image, le processus s'exécutera plus rapidement que la reconstruction de toutes les autres couches. La mise en cache accélère également l’extraction et la transmission des images depuis Docker Hub.

7. Utilisez un fichier .dockerignore

Lors de la création d'une image à l'aide d'un Dockerfile, vous souhaiterez peut-être garder certaines informations privées. Certains fichiers et dossiers peuvent faire partie du projet, mais vous ne souhaitez pas les inclure dans le processus de construction.

L'utilisation d'un fichier .dockerignore réduit considérablement la taille de l'image. En effet, le processus de construction inclut uniquement les fichiers nécessaires. Cela permet également de garder les fichiers privés et d’éviter d’exposer des clés secrètes ou des mots de passe.

Le fichier .dockerignore est un fichier que vous créez dans le même dossier que votre Dockerfile. C'est un fichier texte, un peu comme un fichier .gitignore, qui contient les noms de tous les fichiers que vous ne souhaitez pas inclure dans le processus de construction.

Voici un exemple :

8. Utiliser le principe de l'utilisateur le moins privilégié

Par défaut, Docker utilise l'utilisateur root en tant qu'administrateur pour obtenir l'autorisation d'exécuter des commandes, mais c'est une mauvaise pratique. S'il existe une vulnérabilité dans l'un des conteneurs, les pirates peuvent accéder à l'hôte Docker.

Pour éviter ce scénario, créez un utilisateur et un groupe dédiés. Vous pouvez définir les autorisations requises pour le groupe afin de protéger les informations sensibles. Si un utilisateur est compromis, vous pouvez le supprimer sans exposer l'ensemble du projet.

Voici un exemple montrant comment créer un utilisateur et définir ses autorisations :

Certaines images de base contiennent des pseudo-utilisateurs créés. Vous pouvez utiliser les utilisateurs installés au lieu des autorisations de l'utilisateur root.

Pourquoi devriez-vous adopter les meilleures pratiques de Docker

Les meilleures pratiques constituent un excellent moyen de réduire les vulnérabilités et d’écrire un code plus propre. Il existe de nombreuses bonnes pratiques que vous pouvez appliquer à chaque fonctionnalité Docker que vous utilisez.

Un projet bien organisé facilite la synchronisation avec d'autres outils d'orchestration comme Kubernetes. Vous pouvez commencer par ceux décrits dans l’article et en adopter davantage à mesure que vous apprenez Docker.