Docker Management · 13 min read · Sep 22, 2025

Comment installer et utiliser Portainer pour la gestion de Docker avec Nginx Proxy Manager

Portainer est une solution de gestion de conteneurs open-source pour Docker, Kubernetes et Nomad qui simplifie le démarrage, la création et l’exécution de conteneurs de manière simple. Il fournit un tableau de bord basé sur le web pour gérer les conteneurs, les images, les réseaux et les volumes.

Dans ce tutoriel, vous apprendrez à installer et configurer la solution de gestion de conteneurs Portainer sur un serveur Linux et à l’utiliser pour créer et gérer des conteneurs Docker pour exécuter différentes applications. Vous apprendrez également à placer ces conteneurs derrière Nginx en utilisant le gestionnaire de proxy Nginx.

Prérequis

  • Un serveur Linux exécutant Ubuntu / Debian / Cent OS / Rocky Linux 8 / Alma Linux.
  • Un utilisateur non-root avec des privilèges sudo.
  • Un nom de domaine entièrement qualifié (FQDN) pointant vers le serveur pour Portainer ( portrainer.example.com) et Nginx Proxy Manager ( npm.example.com).

Étape 1 - Configurer le pare-feu

Cent OS/Rocky Linux/Alma Linux

Vous devez avoir le pare-feu Firewalld installé. Vérifiez l’état du pare-feu.

$ sudo firewall-cmd --state
running

Ouvrez les ports 80, 9443 et 443. Portainer utilise le port 9443 pour exposer son interface web via HTTPS. Nginx Proxy Manager utilise le port 81 pour son interface.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --permanent --add-port=9443/tcp
$ sudo firewall-cmd --permanent --add-port=81/tcp

Rechargez le pare-feu pour activer les modifications.

$ sudo firewall-cmd --reload

Ubuntu/Debian

Les systèmes Ubuntu et Debian utilisent ufw (Uncomplicated Firewall) par défaut.

Vérifiez si le pare-feu est en cours d’exécution.

$ sudo ufw status

S’il est en cours d’exécution, ouvrez les ports 80, 9443 et 443.

$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw allow 9443
$ sudo ufw allow 81

Ouvrez le port SSH si le pare-feu n’est pas en cours d’exécution.

$ sudo ufw allow "OpenSSH"

Activez le pare-feu s’il n’est pas en cours d’exécution.

$ sudo ufw enable

S’il est en cours d’exécution, rechargez-le pour appliquer les modifications.

$ sudo ufw reload

Étape 2 - Installer Docker

Cent OS/Rocky Linux/Alma Linux

Exécutez la commande suivante pour installer Docker.

$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io

Ubuntu

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Debian

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Activez et démarrez le service Docker.

$ sudo systemctl start docker --now

Ajoutez votre nom d’utilisateur au groupe Docker.

$ sudo usermod -aG docker $USER

Déconnectez-vous du système et reconnectez-vous pour appliquer le changement.

Étape 3 - Installer Docker Compose

Téléchargez et installez le binaire Docker compose.

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Appliquez les permissions d’exécution au binaire.

$ sudo chmod +x /usr/local/bin/docker-compose

Étape 4 - Installer Portainer

Créez un répertoire pour Portainer.

$ mkdir ~/portainer

Passez au répertoire.

$ cd ~/portainer

Créez et ouvrez le fichier Docker Compose pour l’édition.

$ nano docker-compose.yaml

Collez le code suivant dedans.

version: "3.3"
services:
    portainer:
      image: portainer/portainer-ce:latest
      container_name: portainer
      restart: always
      privileged: true
      volumes:
        - ./data:/data:Z
        - /var/run/docker.sock:/var/run/docker.sock:Z
      ports:
        - 9443:9443

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsqu’on vous le demande.

Passons en revue le fichier Docker compose.

  • Nous tirons la dernière version de l’édition communautaire de Portainer depuis Docker Hub. L’édition communautaire de Portainer est gratuite à utiliser, tandis que leur édition professionnelle nécessite une licence payante. Vous pouvez tirer l’édition professionnelle, mais on vous demandera la clé de licence pour l’utiliser.
  • Nous avons nommé notre conteneur portainer pour des raisons d’identification et de liaison.
  • La politique de redémarrage est définie sur always afin que le conteneur reste actif lors du démarrage.
  • Le paramètre privileged: true est pour que Portainer puisse accéder au socket Docker et s’exécuter dans un contexte privilégié puisque nous utilisons SELinux. Si vous n’utilisez pas SELinux, vous pouvez supprimer ce paramètre. Ce paramètre donne au conteneur Portainer accès à tout sur le système hôte, y compris l’accès au matériel. Donc, activez ce paramètre uniquement lorsque vous savez ce que vous faites.
  • La section volumes mappe le dossier sur l’hôte aux dossiers dans le conteneur en utilisant des montages de liaison. Nous avons exposé le répertoire ~/portainer/data au conteneur pour stocker les données pertinentes et l’API du socket Docker pour la gestion des conteneurs. L’étiquette :Z indique à Docker que nous exécutons SELinux sur notre hôte. Si vous n’avez pas SELinux activé, vous devriez supprimer l’étiquette.

Démarrez Portainer.

$ docker-compose up -d

Vérifiez l’état du conteneur.

$ docker ps
CONTAINER ID   IMAGE                           COMMAND        CREATED         STATUS         PORTS                                                           NAMES
916411e8d12e   portainer/portainer-ce:latest   "/portainer"   5 seconds ago   Up 4 seconds   8000/tcp, 9000/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp   portainer

Étape 5 - Accéder et configurer Portainer

Ouvrez l’URL https://:9443 dans votre navigateur, et vous obtiendrez l’écran suivant.

Écran d'installation de Portainer

On vous demandera de créer un nouvel utilisateur administrateur. Ajoutez vos coordonnées utilisateur. Décochez la case Autoriser la collecte de statistiques anonymes si vous vous souciez de la confidentialité. Cliquez sur le bouton Créer un utilisateur pour commencer l’installation et créer un nouveau compte administrateur.

Ensuite, vous serez dirigé vers l’écran de tableau de bord suivant.

Tableau de bord Portainer

Après quelques secondes, il se rafraîchira automatiquement et vous montrera l’écran suivant.

Accueil de Portainer

Il vous montrera l’environnement local dans lequel Portainer fonctionne. Cliquez sur l’environnement local pour commencer.

Page d'accueil de l'environnement Portainer

La plupart des sections sont explicites. La section Stacks aide à créer des conteneurs en utilisant des fichiers Docker compose. Vous pouvez déployer des conteneurs directement en utilisant la catégorie Containers dans la barre latérale. Vous pouvez configurer l’environnement Docker actuel via la section Hosts. La section App Templates est livrée avec des fichiers Docker compose pré-installés pour installer les applications les plus courantes. Vous pouvez également créer des modèles personnalisés.

La section Settings vous permet de configurer divers paramètres tels que l’ajout de registres Docker personnalisés, l’ajout de plusieurs hôtes pour Docker swarm, la configuration de l’accès utilisateur, la sauvegarde des données et la personnalisation de Portainer.

Étape 5 - Mettre Portainer derrière un proxy inverse en utilisant Nginx Proxy Manager (NPM)

Avant de continuer, mettons Portainer derrière un proxy inverse en utilisant Nginx Proxy Manager. Nginx Proxy Manager est une application Docker qui fournit une interface de gestion web pour configurer Nginx en tant qu’hôte de proxy inverse. Il peut également être utilisé comme un hôte de redirection ou de streaming.

Installer NPM

La première étape consiste à créer un réseau pour Nginx Proxy Manager (NPM). Ouvrez la section Networks et cliquez sur le bouton Add Network pour créer un nouveau réseau.

Liste des réseaux Portainer

Donnez un nom au réseau et laissez tous les paramètres inchangés. Cliquez sur le bouton Create the network pour terminer.

Page de création de réseau Portainer

Visitez les Stacks et créez une nouvelle pile en utilisant le bouton Add stack.

Page des piles Portainer

Nommez la pile nginx-proxy-manager et collez le code suivant dedans.

version: "3.3"
services:
  npm-app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm-app
    restart: unless-stopped
    ports:
      - '80:80' # Port HTTP public
      - '443:443' # Port HTTPS public
      - '81:81' # Port Web Admin
      # Ajoutez tout autre port de streaming que vous souhaitez exposer
      # - '21:21' # FTP
    environment:
      DB_MYSQL_HOST: "npm-db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
      DB_MYSQL_NAME: "npm"
      # Décommentez la ligne ci-dessous si IPv6 n'est pas activé sur votre hôte
      # DISABLE_IPV6: 'true'
    volumes:
      - ./npm-data:/data:Z
      - ./letsencrypt:/etc/letsencrypt:Z
    depends_on:
      - npm-db
    networks:
      - npm-network
      - npm-internal

  npm-db:
    image: 'mariadb:latest'
    container_name: npm-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
    volumes:
      - ./npm-data/mysql:/var/lib/mysql:Z
    networks:
      - npm-internal

networks:
  npm-internal:
  npm-network:
    external: true

Page d'ajout de pile Portainer

Nous avons défini deux variables d’environnement pour définir les mots de passe de la base de données et de l’utilisateur root MySQL. Portainer peut être utilisé pour définir des secrets en utilisant des variables d’environnement. Faites défiler la page et cliquez sur le bouton Add environment variable pour ajouter des mots de passe forts.

Variables d'environnement de la pile Portainer

Cliquez sur le bouton Deploy the stack pour créer et démarrer le conteneur NPM.

Accéder à NPM

Ouvrez l’URL https://:81 dans votre navigateur, et vous obtiendrez l’écran suivant. Entrez les identifiants par défaut suivants pour vous connecter.

Adresse e-mail : [email protected] Mot de passe : changeme

Ensuite, on vous demandera immédiatement de définir un nom et une adresse e-mail. Cliquez sur le bouton Save, et on vous demandera de créer un nouveau mot de passe. Cliquez à nouveau sur le bouton Save pour commencer.

Tableau de bord Nginx Proxy Manager

Visitez Hosts >> Proxy Hosts et cliquez sur le bouton Add Proxy Host.

Ajouter Portainer en tant qu'hôte proxy

Entrez le nom de domaine comme portainer.example.com. Choisissez le schéma comme https. Entrez le nom du conteneur comme Forward Hostname et 9443 comme Forward port. Cochez les options Block Common Exploits et Websockets Support.

Options SSL Portainer NPM

Passez à l’onglet SSL et sélectionnez Request a new SSL Certificate dans le menu déroulant. Cochez les options Force SSL et HTTP/2 Support pour sécuriser et optimiser votre connexion SSL. Entrez l’adresse e-mail pour recevoir des notifications de renouvellement et acceptez les conditions de service. Cliquez sur le bouton Save pour terminer la configuration de l’hôte proxy pour Portainer.

Connecter Portainer au conteneur NPM

Nous avons configuré l’hôte proxy, mais le conteneur n’est toujours pas connecté au réseau NPM. Retournez au tableau de bord Portainer, visitez la section Containers, et sélectionnez le conteneur portainer.

Sélectionnez npm-network dans le menu déroulant sous la section Connected networks et cliquez sur le bouton Join network pour ajouter le conteneur Portainer au réseau du gestionnaire de proxy.

Réseaux connectés Portainer

Vous pourriez obtenir une erreur mais rafraîchissez la page, et vous devriez voir le conteneur ajouté au réseau NPM.

Portainer connecté à NPM

Vous devriez pouvoir accéder à Portainer en utilisant l’URL https://portainer.example.com dans votre navigateur.

Vous pouvez suivre une procédure similaire pour mettre NPM derrière une URL accessible publiquement comme https://npm.example.com comme discuté dans notre tutoriel sur Nginx Proxy Manager.

Maintenant que vous avez défini une URL publique pour Portainer, vous pouvez supprimer le port 9443 exposé. Pour ce faire, retournez au terminal et passez au répertoire portainer.

$ cd ~/portainer

Ouvrez le fichier Docker compose pour l’édition.

$ nano docker-compose.yaml

Supprimez la section des ports en la commentant, comme montré ci-dessous.

version: "3.3"
services:
    portainer:
      image: portainer/portainer-ce:latest
      container_name: portainer
      restart: always
      privileged: true
      volumes:
        - ./data:/data:Z
        - /var/run/docker.sock:/var/run/docker.sock:Z
      #ports:
      #  - 9443:9443
      networks:
        - npm-network

networks:
  npm-network:
    external: true

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsqu’on vous le demande.

Ici, nous avons ajouté les détails du réseau NPM car nous devrons redémarrer le conteneur Portainer.

Arrêtez le conteneur Portainer.

$ docker-compose down --remove-orphans

Démarrez à nouveau le conteneur avec la configuration mise à jour.

$ docker-compose up -d

Étape 6 - Déployer un conteneur en utilisant un modèle d’application

Portainer fournit plusieurs modèles prédéfinis pour lancer des applications directement avec une configuration minimale.

Modèles d'application Portainer

Visitez la section App Templates et sélectionnez n’importe quel modèle. Donnez-lui un nom et sélectionnez le réseau à utiliser. Utilisez la section des options avancées pour déployer des ports, réseaux et montages de volumes personnalisés.

Cliquez sur le bouton Deploy the container pour terminer le déploiement de votre application. Ici, nous déployons le conteneur Redis.

Déploiement de l'application Redis Portainer

Étape 7 - Gérer les conteneurs

Gérons un conteneur existant. Ouvrez la page des conteneurs, et vous verrez tous les conteneurs en cours d’exécution.

Liste des conteneurs Portainer

Cliquez sur le conteneur hw-redis récemment créé pour continuer.

Actions du conteneur Portainer

En haut, vous pouvez voir une liste d’actions que vous pouvez effectuer sur un conteneur en cours d’exécution. Vous pouvez arrêter et tuer le conteneur. Recréer créera le conteneur à partir de zéro. L’option Duplicate/Edit vous permettra de créer un autre conteneur identique vous permettant de modifier les paramètres avant de le lancer.

Le statut du conteneur montre le temps d’exécution, l’adresse IP et d’autres détails sur le conteneur.

L’option Logs montre la sortie de la commande docker logs. Comme la sortie de la commande n’est pas mise en cache, chaque fois que vous rafraîchissez la page, la commande est exécutée à partir de zéro.

Logs du conteneur Portainer

L’option Inspect exécute la commande docker inspect sur le conteneur et montre sa sortie.

Inspection du conteneur Portainer

L’option Stats vous montre l’utilisation du conteneur en temps réel.

Statistiques du conteneur Portainer

Vous pouvez lancer la console du conteneur en utilisant l’option Console. On vous demandera la commande et l’utilisateur système à exécuter.

Configuration de la console du conteneur Portainer

Appuyez sur le bouton Connect pour lancer la console.

Console du conteneur Portainer

L’option Attach exécute la commande docker attach.

Il y a d’autres options sur la page des détails du conteneur. Vous pouvez créer une image à partir d’un conteneur existant. D’autres options incluent le changement de la politique de redémarrage d’un conteneur et la connexion ou la déconnexion d’un réseau à un conteneur existant.

Attacher un conteneur extérieur à Portainer

Créer un conteneur en dehors de Portainer apparaîtra à l’intérieur tant qu’il est créé sur le même système que Portainer. Cela est possible car Portainer est connecté à Docker via le websocket.

Testons en exécutant le conteneur Docker Hello World.

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Vérifiez la liste des conteneurs dans le terminal. Nous utilisons le drapeau -a pour montrer la liste de tous les conteneurs, y compris ceux arrêtés. Vous pouvez voir le nom du conteneur comme sad_williamson.

$ docker ps -a
CONTAINER ID   IMAGE                             COMMAND                  CREATED         STATUS                     PORTS                                                                                  NAMES
5fa46b85d594   hello-world                       "/hello"                 3 minutes ago   Exited (0) 3 minutes ago                                                                                          sad_williamson
.....

Maintenant, vérifiez la page des conteneurs Portainer, et le conteneur hello world apparaîtra comme arrêté dans la liste avec le même nom.

Conteneur Hello World Portainer

Conclusion

Cela conclut notre tutoriel sur l’installation et l’utilisation de Portainer pour la gestion de Docker et Nginx Proxy Manager. Nous explorerons la création d’images Docker, la création de conteneurs personnalisés et l’utilisation de Portainer avec Docker swarm dans un prochain tutoriel. Si vous avez des questions, posez-les dans les commentaires ci-dessous.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.