0 Votes

Code source wiki de Containers et Portainer

Modifié par john le 2026/09/20 20:10

Masquer les derniers auteurs
john 1.1 1 {{toc/}}
2
3 Cette section regroupe mes notes autour de l’utilisation de **conteneurs Docker**, la gestion via **Portainer**, le déploiement d’applications auto-hébergées, et la configuration d’un accès sécurisé même en local.
4
5 Docker est aujourd’hui un outil incontournable pour isoler, déployer et gérer des services légers. Combiné à Portainer, on dispose d’une interface web pour piloter facilement ses conteneurs.
6
john 2.1 7 {{info}}
8 Pour l'installation réellement en place sur mes deux machines, voir [[Portainer>>doc:Wiki Batcave John.Infrastructure.Portainer.WebHome]].
9 {{/info}}
10
john 1.1 11 == Déployer Portainer ==
12
john 2.1 13 Portainer permet d’administrer Docker via une interface web.
john 1.1 14
john 2.1 15 === Exemple de stack ===
john 1.1 16
17 {{code language="yaml"}}
18 services:
19 portainer:
john 2.1 20 image: portainer/portainer-ce:lts
john 1.1 21 container_name: portainer
22 restart: always
23 ports:
24 - "9443:9443"
25 volumes:
26 - /var/run/docker.sock:/var/run/docker.sock
27 - portainer_data:/data
28
29 volumes:
30 portainer_data:
31 {{/code}}
32
john 2.1 33 Interface accessible sur ##https:~/~/<IP_SERVEUR>:9443##. Le compte administrateur doit être créé dans les minutes qui suivent le premier démarrage.
john 1.1 34
john 2.1 35 Le tag ##lts## est préférable à ##latest## : les versions de longue durée reçoivent les correctifs sans changement de comportement.
36
john 1.1 37 == Sécuriser l’accès à Portainer ==
38
john 2.1 39 * Accès en HTTPS (port 9443) uniquement
40 * Mot de passe fort, et double authentification si possible
41 * Restreindre l’accès par pare-feu (##nftables##, ##ufw##) aux adresses de confiance
42 * Ne publier le port 8000 que si des agents Edge sont utilisés
john 1.1 43
john 2.1 44 {{warning}}
45 Monter ##/var/run/docker.sock## dans un conteneur revient à lui donner un accès root à l'hôte : quiconque atteint cette interface contrôle la machine. Pour un service qui n'a besoin que de lire l'état des conteneurs, utiliser un proxy filtrant plutôt que le socket directement.
46 {{/warning}}
47
john 1.1 48 == Déployer une application avec Docker Compose ==
49
john 2.1 50 Exemple pour XWiki :
john 1.1 51
52 {{code language="yaml"}}
53 services:
54 xwiki:
john 2.1 55 image: xwiki:lts-mariadb-tomcat
john 1.1 56 ports:
57 - "8080:8080"
58 environment:
john 2.1 59 - DB_USER=${DB_USER}
60 - DB_PASSWORD=${DB_PASSWORD}
61 - DB_DATABASE=${DB_DATABASE}
john 1.1 62 - DB_HOST=db
63 volumes:
64 - xwiki_data:/usr/local/xwiki
65
66 db:
john 2.1 67 image: mariadb:11.4
john 1.1 68 environment:
john 2.1 69 - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
70 - MYSQL_DATABASE=${DB_DATABASE}
71 - MYSQL_USER=${DB_USER}
72 - MYSQL_PASSWORD=${DB_PASSWORD}
john 1.1 73 volumes:
74 - db_data:/var/lib/mysql
75
76 volumes:
77 xwiki_data:
78 db_data:
79 {{/code}}
80
john 2.1 81 Les mots de passe ne sont jamais écrits dans le compose : ils viennent des variables d'environnement de la stack, ou d'un fichier ##.env## non versionné.
82
83 Choisir une version de base de données encore supportée par son éditeur, et l'épingler sur une version majeure plutôt que ##latest##, pour éviter une montée de version majeure automatique.
84
john 1.1 85 == HTTPS sans domaine en local ==
86
87 === Avec mkcert ===
88
89 {{code language="bash"}}
john 2.1 90 mkcert -install
91 mkcert <IP_SERVEUR> <NOM_HOTE>
john 1.1 92 {{/code}}
93
john 2.1 94 Le certificat est valide pour l'IP locale, à condition que l'autorité de mkcert soit installée sur les postes clients. Il peut ensuite être monté dans nginx, Traefik ou un service qui gère lui-même son TLS.
john 1.1 95
96 == Superviser ses conteneurs ==
97
john 2.1 98 * Utiliser des volumes nommés ou des dossiers montés pour la persistance
99 * Épingler les images des bases de données, laisser ##latest## aux applications
100 * Limiter les droits : ##no-new-privileges##, réseaux séparés, ports non publiés quand c'est possible
101 * Sauvegarder les bases par un export SQL, jamais en copiant leurs fichiers pendant qu'elles tournent
john 1.1 102
john 2.1 103 == Astuce : voir les ports utilisés ==
john 1.1 104
105 {{code language="bash"}}
106 docker ps --format "table {{.Names}}\t{{.Ports}}"
107 {{/code}}
108
john 2.1 109 == Astuce : nettoyer ==
john 1.1 110
111 {{code language="bash"}}
john 2.1 112 docker image prune # images intermédiaires sans nom
113 docker system prune # conteneurs arrêtés, réseaux inutilisés, cache de build
john 1.1 114 {{/code}}
115
john 2.1 116 {{warning}}
117 ##docker system prune -a## supprime toutes les images qu'aucun conteneur en cours n'utilise, y compris les images construites localement, qui devront être reconstruites. Vérifier d'abord ce qui serait supprimé avec ##docker image ls##.
118 {{/warning}}
119
john 1.1 120 == Liens utiles ==
121
john 2.1 122 * [[Documentation Portainer>>https://docs.portainer.io/]]
123 * [[Docker Cheat Sheet>>https://dockerlabs.collabnix.com/docker/cheatsheet/]]
124 * [[mkcert>>https://github.com/FiloSottile/mkcert]]
john 1.1 125
126 == Liens internes ==
127
128 * [[Retour à l’accueil>>doc:Wiki Batcave John.WebHome]]
john 2.1 129 * [[Retour à Tutos Linux>>doc:Wiki Batcave John.TutosLinux.WebHome]]
130 * [[Portainer (installation en place)>>doc:Wiki Batcave John.Infrastructure.Portainer.WebHome]]