J'ai décidé de changer de config pour des petits dév web, dans la précédente config, j'utilisais kvm-qemu avec samba et sur la machine hôte firejail pour isoler le navigateur web et tester en local le fonctionnement d'un site web semi statique avec un peu de php. Garder une vm en fonctionnement continu avec les interfaces réseaux, je trouvais ça un peu trop contraignant
Maintenant, j'ai essayé de tester les conteneurs avec podman qui n'utilise pas un processus permanent. Je me suis rendu compte quand la config tourne que je n'ai pas documenté toutes les étapes et que au cas où il faut refaire les manips, ça serait du temps à reprendre toutes les étapes. Et puis je voudrais voir à partir s'il y des améliorations possibles, les technos évoluent et je ne suis pas au courant de tout. Surtout pour la partie config réseau sur podman, ça a l'air un peu casse tête
Ces infos complètent les infos sur ce site
Pour podman, utilisation en tant qu'utilisateur standard... Il faut prévoir plusieurs go d'espaces libre dans le répertoire utilisateur sur debian c'est dans:
/home/utilisateur/.local/share/containers/storage
🟨 verif que podman est installé
ou
si c'est pas installé
pour debian
1 2
| sudo apt update
sudo apt install podman |
ou combiné avec podman compose
1 2
| sudo apt update
sudo apt install podman podman-compose |
si c'est installé, regarder s'il n'y a pas déjà des images parce que ça prend de l'espace disque
🟠 lire les discussions suivantes parce que sur debian pour la version linux 6.1 il faut installer un package supplémentaire pour modifier le mode de stockage des images. Si cette étape est ignorée, les images peuvent occuper des dizaines de go au lieu de quelques go
Eventuellement enregistrer les images existantes dans un fichier archive, voir après la partie commit
regarder s'il pas un conteneur en cours de fonctionnement
sinon arrêter les conteneurs actifs
podman stop -a && podman rm -a
téléchargement de l'image php avec le serveur httpd
podman pull php:8.2-apache
téléchargement de l'image mysql 8
téléchargement de l'image phpmyadmin
podman pull phpmyadmin:5.2.2
voir l'espace disque occupé par les conteneurs
démarrage du conteneur avec l'image de php-apache
podman run -d --name web_server -p 8080:80 docker.io/library/php:8.2-apache
ouvrir le navigateur web ou curl et il doit y avoir "it works" sur http://locahost:8080
il peut aussi il y avoir une erreur de permission... sur l'expérience, de ce tuto, possible d'ignorer cette erreur et de passer aux étapes suivantes et de modifier le fichier de config pour autoriser option indexes dans le directory listing...
on peut entrer dans le conteneur sur le shell bin bash avec l'alias web_server de la commande run
podman exec -it web_server /bin/bash
ou avec l'id du conteneur
89b...ci-dessous correspond à l'id du conteneur en 1ère colonne de la cde précédente
podman exec -it 89b... /bin/bash
création d'un fichier html simple, comme il n'y a pas d'éditeur de texte, la commande cat peut servir à écrire dans un fichier à partir de la mémoire tampon (buffer) jusqu'à la saisie de 'EOL'
cat > index_s1.html<< EOL
1 2
| <html><body><h1>Conteneur/image podman html<h1>
</h1></body></html> |
on termine la saisie avec EOL
on fait la meme chose pour tester php
1 2 3 4 5 6 7
| <html><body><h1>Conteneur/image podman php</h1>
<h2>config php</h2>
<br>
<?php phpinfo(); ?>
</h1></body></html> |
EOL termine le buffer
on est toujours dans le shell bin/bash du conteneur mais on peut vérifier dans le navigateur que les fichiers index_s1.html et index_s2.php sont acccessibles
http://localhost:8080/index_s1.html
http://localhost:8080/index_s2.php
si c'est bon, on continue
ici, c'est pour modifier le fichier de configuration du serveur avec un affichage du répertoire web
toujours dans le bin bash du conteneur, attention à ne pas être sur le fichier de config de la machine hôte ou d'une éventuelle vm!!!
cd /etc/apache2/sites-available
copier le contenu ci dessous dans un éditeur de texte de la machine hote
ajouter ou remplacer en dessous de documentroot
1 2 3 4 5 6 7 8
|
<Directory /var/www/html>
Options +Indexes
AllowOverride all
Order allow,deny
Allow from all
Require all granted
</Directory> |
la commande ci-dessous va effacer le fichier de config et il sera possible de le remplacer par copie avec le fichier de config modifier. Ne pas tenir compte de l'affichage, appuyer sur enter après la copie et saisir EOL pour terminer le buffer
cat > 000-default.conf << EOL
copier la totalité du fichier de config, attention à ne pas copier autre chose
tester la configuration
dans le navigateur
il devrait s'afficher
index_s1.html
index_s2.php
si c'est bon on peut sortir du shell bin/bash du conteneur maintenant avec exit ou continuer et installer des modules php
📦 config de php dans le conteneur
pour les modules suivants (cde php -m avec transpo en ligne):
1 2 3 4
| ctype curl date dom fileinfo filter gd hash iconv json libxml
mbstring mysqli mysqlnd openssl pcre PDO pdo_mysql pdo_pgsql pdo_sqlite
pgsql Phar posix random readline Reflection session SimpleXML
sodium SPL sqlite3 standard tokenizer xml xmlreader xmlwriter Zend OPcache zlib |
Toujours dans le conteneur de l'image httpd exec -it
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| docker-php-ext-install mysqli
docker-php-ext-enable mysqli
apache2ctl restart
docker-php-ext-install intl opcache pgsql pdo pdo_mysql pdo_pgsql gd mbstring zip
docker-php-ext-install intl
docker-php-ext-install intl
docker-php-ext-install opcache
docker-php-ext-install opcache
docker-php-ext-enable opcache
docker-php-ext-enable opcache
docker-php-ext-install intl
docker-php-ext-enable intl
docker-php-ext-install pgsql
docker-php-ext-enable pgsql
/usr/local/bin/docker-php-ext-enable gd mysqli
/usr/local/bin/docker-php-ext-enable pdo pdo_mysql
/usr/local/bin/docker-php-ext-enable pgsql
docker-php-ext-install pdo
docker-php-ext-enable pdo
docker-php-ext-install pdo_mysql
docker-php-ext-enable pdo_mysql
docker-php-ext-install pdo_pgsql
docker-php-ext-enable pdo_mysql
docker-php-ext-install gd
docker-php-ext-enable gd
/usr/local/bin/docker-php-ext-enable gd
docker-php-ext-enable gd
docker-php-ext-install mbstring
docker-php-ext-enable mbstring
docker-php-ext-install zip
docker-php-ext-enable pdo_pgsql
docker-php-ext-enable zip |
Les modules gd et pgsql ne se sont pas installés alors il faut maj le conteneur
1 2 3 4 5 6 7 8 9 10 11
| apt update
docker-php-ext-install gd
docker-php-ext-enable gd
docker-php-ext-install pgsql
docker-php-ext-enable pgsql
docker-php-ext-install pgsql
docker-php-ext-install pdo_pgsql
ou
docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql && docker-php-ext-install pgsql pdo_pgsql
apt-get install -y libpq-dev && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql && docker-php-ext-install pdo pdo_pgsql |
pour voir les modules installés
php -m
ou php-info avec http://localhost:8080/index_s2.php
si c'est bon on peut sortir du shell bin/bash du conteneur maintenant avec exit ou continuer ...
et on peut enregistrer le conteneur dans une nouvelle image
d'abord, récupérer l'id du conteneur en 1ère colonne ou le nom alias de la cde run
enregistrement avec l'id
podman commit f580f66abe50 localhost/httpd-php:8.2
enreg avec l'alias
podman commit web_server localhost/httpd-php:8.2
on arrête les conteneurs actifs
podman stop -a && podman rm -a
📍️si l'image a bcp été modifiée ou pour déplacer sur une autre machine il est possible d'enregistrer l'image modifiée dans une archive ou d'enregistrer n'importe quelle image pour éviter podman pull...il est également possible d'enregistrer plusieurs images dans la même archive, il faut juste séparer les images par un espace
par exemple dans le répertoire courant pour l'image docker.io/library/mariadb:latest
podman save --output image_mariadb_12_0.tar docker.io/library/mariadb:latest
on peut supprimer l'image pour par exemple économiser de l'espace disque
podman rmi docker.io/library/mariadb:latest
et plus tard recharger l'image depuis le répertoire d'enregistrement
podman load --input image_mariadb_12_0.tar
test de la nouvelle image
podman run -d --name serveur_web -p 8080:80 localhost/httpd-php:8.2
dans le navigateur
🟢il est possible de supprimer la première image pour économiser de l'espace disque avec la commande "podman rmi"
cette commande map un répertoire web avec le serveur web php de podman
podman run -d --name php-dev -v /media/DOSSIER_WEB_ORDI_HOTE:/var/www/html:Z localhost/httpd-php:8.2
normalement les fichiers web s'affichent dans le navigateur
avec podman run pour lancer un serveur lamp
1 2 3 4 5 6 7
| podman pod create --name db0 --publish 8080:80 &&
podman run -d --name php8-dev --pod db0 -v /media/DOSSIER_WEB_ORDI_HOTE:/var/www/html:Z httpd-php:8.2 &&
podman pod create --name db1 --publish 8000:80 --publish 3306:3306 && podman run --name mysql-dev --pod db1 -v /media/DOSSIER_BDD_HOTE:/var/lib/mysql:Z -e MYSQL_ROOT_PASSWORD="mdp" -e MYSQL_USER="utilisateur_bdd" -e MYSQL_PASSWORD="mdpbdd" -d mysql:8 &&
podman run --name pma --pod db1 -d -e PMA_HOST=127.0.0.1 -e PMA_PORT=3306 phpmyadmin:latest &&
echo -e '\n' && podman pod ps &&
echo -e '\n' && podman ps &&
echo -e '\n' |
phpmyadmin sur port 8000
mais avec podman-compose le réseau fonctionne mieux
il faut installer podman-compose et créer des fichier yml
pour installer podman compose
sur debian
1 2 3
|
sudo apt update
sudo apt install podman-compose |
ci-dessous le fichier podman-compose.yml équivalent à podman run mais fonctionne mieux au niveau du réseau, accès possible simultanément au web, bdd et pma
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| version: '3.8'
services:
php-apache-environment:
image: httpd-php:8.2
container_name: httpd-php8
volumes:
- /media/DOSSIER_WEB_ORDI_HOTE:/var/www/html
ports:
- 8080:80
db:
image: mysql:8
container_name: db-mysql8
environment:
MYSQL_ROOT_PASSWORD: mdp
MYSQL_DATABASE: demo
MYSQL_USER: utilisateur_bdd
MYSQL_PASSWORD: mdpbdd
restart: unless-stopped
volumes:
- /media/DOSSIER_BDD_HOTE:/var/lib/mysql
ports:
- "3306:3306"
phpmyadmin:
image: phpmyadmin:5.2.2
container_name: pma
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: rootpassword
ports:
- "8000:80" |
dans le répertoire du fichier yml podman-compose.yml , démarrer avec
et éteindre avec
Il est aussi possible d'utiliser podman-desktop mais en ligne de cde on peut voir pas mal de chose d'un coup
Pascal
info2gestion📍️
Partager