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
portainerpour des raisons d’identification et de liaison. - La politique de redémarrage est définie sur
alwaysafin que le conteneur reste actif lors du démarrage. - Le paramètre
privileged: trueest 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
volumesmappe le dossier sur l’hôte aux dossiers dans le conteneur en utilisant des montages de liaison. Nous avons exposé le répertoire~/portainer/dataau conteneur pour stocker les données pertinentes et l’API du socket Docker pour la gestion des conteneurs. L’étiquette:Zindique à 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:// dans votre navigateur, et vous obtiendrez l’écran suivant.

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.

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

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

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.

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

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

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

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.

Cliquez sur le bouton Deploy the stack pour créer et démarrer le conteneur NPM.
Accéder à NPM
Ouvrez l’URL https:// 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.

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

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.

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.

Vous pourriez obtenir une erreur mais rafraîchissez la page, et vous devriez voir le conteneur ajouté au réseau 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.

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.

É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.

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

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.

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

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

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

Appuyez sur le bouton Connect pour lancer la console.

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.

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.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.