Code source wiki de Containers et Portainer
Modifié par john le 2026/09/20 20:10
Masquer les derniers auteurs
| author | version | line-number | content |
|---|---|---|---|
![]() |
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 | |||
![]() |
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 | |||
![]() |
1.1 | 11 | == Déployer Portainer == |
| 12 | |||
![]() |
2.1 | 13 | Portainer permet d’administrer Docker via une interface web. |
![]() |
1.1 | 14 | |
![]() |
2.1 | 15 | === Exemple de stack === |
![]() |
1.1 | 16 | |
| 17 | {{code language="yaml"}} | ||
| 18 | services: | ||
| 19 | portainer: | ||
![]() |
2.1 | 20 | image: portainer/portainer-ce:lts |
![]() |
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 | |||
![]() |
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. |
![]() |
1.1 | 34 | |
![]() |
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 | |||
![]() |
1.1 | 37 | == Sécuriser l’accès à Portainer == |
| 38 | |||
![]() |
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 | ||
![]() |
1.1 | 43 | |
![]() |
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 | |||
![]() |
1.1 | 48 | == Déployer une application avec Docker Compose == |
| 49 | |||
![]() |
2.1 | 50 | Exemple pour XWiki : |
![]() |
1.1 | 51 | |
| 52 | {{code language="yaml"}} | ||
| 53 | services: | ||
| 54 | xwiki: | ||
![]() |
2.1 | 55 | image: xwiki:lts-mariadb-tomcat |
![]() |
1.1 | 56 | ports: |
| 57 | - "8080:8080" | ||
| 58 | environment: | ||
![]() |
2.1 | 59 | - DB_USER=${DB_USER} |
| 60 | - DB_PASSWORD=${DB_PASSWORD} | ||
| 61 | - DB_DATABASE=${DB_DATABASE} | ||
![]() |
1.1 | 62 | - DB_HOST=db |
| 63 | volumes: | ||
| 64 | - xwiki_data:/usr/local/xwiki | ||
| 65 | |||
| 66 | db: | ||
![]() |
2.1 | 67 | image: mariadb:11.4 |
![]() |
1.1 | 68 | environment: |
![]() |
2.1 | 69 | - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD} |
| 70 | - MYSQL_DATABASE=${DB_DATABASE} | ||
| 71 | - MYSQL_USER=${DB_USER} | ||
| 72 | - MYSQL_PASSWORD=${DB_PASSWORD} | ||
![]() |
1.1 | 73 | volumes: |
| 74 | - db_data:/var/lib/mysql | ||
| 75 | |||
| 76 | volumes: | ||
| 77 | xwiki_data: | ||
| 78 | db_data: | ||
| 79 | {{/code}} | ||
| 80 | |||
![]() |
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 | |||
![]() |
1.1 | 85 | == HTTPS sans domaine en local == |
| 86 | |||
| 87 | === Avec mkcert === | ||
| 88 | |||
| 89 | {{code language="bash"}} | ||
![]() |
2.1 | 90 | mkcert -install |
| 91 | mkcert <IP_SERVEUR> <NOM_HOTE> | ||
![]() |
1.1 | 92 | {{/code}} |
| 93 | |||
![]() |
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. |
![]() |
1.1 | 95 | |
| 96 | == Superviser ses conteneurs == | ||
| 97 | |||
![]() |
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 | ||
![]() |
1.1 | 102 | |
![]() |
2.1 | 103 | == Astuce : voir les ports utilisés == |
![]() |
1.1 | 104 | |
| 105 | {{code language="bash"}} | ||
| 106 | docker ps --format "table {{.Names}}\t{{.Ports}}" | ||
| 107 | {{/code}} | ||
| 108 | |||
![]() |
2.1 | 109 | == Astuce : nettoyer == |
![]() |
1.1 | 110 | |
| 111 | {{code language="bash"}} | ||
![]() |
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 | ||
![]() |
1.1 | 114 | {{/code}} |
| 115 | |||
![]() |
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 | |||
![]() |
1.1 | 120 | == Liens utiles == |
| 121 | |||
![]() |
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]] | ||
![]() |
1.1 | 125 | |
| 126 | == Liens internes == | ||
| 127 | |||
| 128 | * [[Retour à l’accueil>>doc:Wiki Batcave John.WebHome]] | ||
![]() |
2.1 | 129 | * [[Retour à Tutos Linux>>doc:Wiki Batcave John.TutosLinux.WebHome]] |
| 130 | * [[Portainer (installation en place)>>doc:Wiki Batcave John.Infrastructure.Portainer.WebHome]] |
