Code source wiki de Containers et Portainer
Modifié par john le 2026/09/20 20:10
Afficher les derniers auteurs
| author | version | line-number | content |
|---|---|---|---|
| 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 | |||
| 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 | |||
| 11 | == Déployer Portainer == | ||
| 12 | |||
| 13 | Portainer permet d’administrer Docker via une interface web. | ||
| 14 | |||
| 15 | === Exemple de stack === | ||
| 16 | |||
| 17 | {{code language="yaml"}} | ||
| 18 | services: | ||
| 19 | portainer: | ||
| 20 | image: portainer/portainer-ce:lts | ||
| 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 | |||
| 33 | Interface accessible sur ##https:~/~/<IP_SERVEUR>:9443##. Le compte administrateur doit être créé dans les minutes qui suivent le premier démarrage. | ||
| 34 | |||
| 35 | Le tag ##lts## est préférable à ##latest## : les versions de longue durée reçoivent les correctifs sans changement de comportement. | ||
| 36 | |||
| 37 | == Sécuriser l’accès à Portainer == | ||
| 38 | |||
| 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 | ||
| 43 | |||
| 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 | |||
| 48 | == Déployer une application avec Docker Compose == | ||
| 49 | |||
| 50 | Exemple pour XWiki : | ||
| 51 | |||
| 52 | {{code language="yaml"}} | ||
| 53 | services: | ||
| 54 | xwiki: | ||
| 55 | image: xwiki:lts-mariadb-tomcat | ||
| 56 | ports: | ||
| 57 | - "8080:8080" | ||
| 58 | environment: | ||
| 59 | - DB_USER=${DB_USER} | ||
| 60 | - DB_PASSWORD=${DB_PASSWORD} | ||
| 61 | - DB_DATABASE=${DB_DATABASE} | ||
| 62 | - DB_HOST=db | ||
| 63 | volumes: | ||
| 64 | - xwiki_data:/usr/local/xwiki | ||
| 65 | |||
| 66 | db: | ||
| 67 | image: mariadb:11.4 | ||
| 68 | environment: | ||
| 69 | - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD} | ||
| 70 | - MYSQL_DATABASE=${DB_DATABASE} | ||
| 71 | - MYSQL_USER=${DB_USER} | ||
| 72 | - MYSQL_PASSWORD=${DB_PASSWORD} | ||
| 73 | volumes: | ||
| 74 | - db_data:/var/lib/mysql | ||
| 75 | |||
| 76 | volumes: | ||
| 77 | xwiki_data: | ||
| 78 | db_data: | ||
| 79 | {{/code}} | ||
| 80 | |||
| 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 | |||
| 85 | == HTTPS sans domaine en local == | ||
| 86 | |||
| 87 | === Avec mkcert === | ||
| 88 | |||
| 89 | {{code language="bash"}} | ||
| 90 | mkcert -install | ||
| 91 | mkcert <IP_SERVEUR> <NOM_HOTE> | ||
| 92 | {{/code}} | ||
| 93 | |||
| 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. | ||
| 95 | |||
| 96 | == Superviser ses conteneurs == | ||
| 97 | |||
| 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 | ||
| 102 | |||
| 103 | == Astuce : voir les ports utilisés == | ||
| 104 | |||
| 105 | {{code language="bash"}} | ||
| 106 | docker ps --format "table {{.Names}}\t{{.Ports}}" | ||
| 107 | {{/code}} | ||
| 108 | |||
| 109 | == Astuce : nettoyer == | ||
| 110 | |||
| 111 | {{code language="bash"}} | ||
| 112 | docker image prune # images intermédiaires sans nom | ||
| 113 | docker system prune # conteneurs arrêtés, réseaux inutilisés, cache de build | ||
| 114 | {{/code}} | ||
| 115 | |||
| 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 | |||
| 120 | == Liens utiles == | ||
| 121 | |||
| 122 | * [[Documentation Portainer>>https://docs.portainer.io/]] | ||
| 123 | * [[Docker Cheat Sheet>>https://dockerlabs.collabnix.com/docker/cheatsheet/]] | ||
| 124 | * [[mkcert>>https://github.com/FiloSottile/mkcert]] | ||
| 125 | |||
| 126 | == Liens internes == | ||
| 127 | |||
| 128 | * [[Retour à l’accueil>>doc:Wiki Batcave John.WebHome]] | ||
| 129 | * [[Retour à Tutos Linux>>doc:Wiki Batcave John.TutosLinux.WebHome]] | ||
| 130 | * [[Portainer (installation en place)>>doc:Wiki Batcave John.Infrastructure.Portainer.WebHome]] |