Apprendre l'utilisation du gestionnaire de conteneurs Docker en programmation avec le framework PHP mkframework
Un tutoriel de Michael Bertocchi
Le 2017-01-11 22:26:00, par imikado, Rédacteur
Certains d'entre vous connaissent déjà le célèbre gestionnaire de conteneur Docker qui permet de faire tourner des services sans nécessiter le lancement d'une machine virtuelle complète.
Dans ce tutoriel, vous allez apprendre à programmer en PHP avec Docker et le framework PHP .
Dans un premier temps, nous installerons le gestionnaire de conteneur Docker et verrons ses commandes principales, puis nous installerons mkframework dans un conteneur.
Lien du tutoriel : http://imikado.developpez.com/tutori...ionAvecDocker/
Forum Docker
Forum du mkramework
Les meilleurs cours et tutoriels pour apprendre à programmer en PHP
Dans ce tutoriel, vous allez apprendre à programmer en PHP avec Docker et le framework PHP .
Dans un premier temps, nous installerons le gestionnaire de conteneur Docker et verrons ses commandes principales, puis nous installerons mkframework dans un conteneur.
-
RiklesMembre habituéSalut,
Super ton tutoriel, facile à suivre et "concret", c'est cool !
J'aimerai juste faire une petite remarque :
C'est bien de prévenir que toutes les modifications apportée au container sont perdu quand on l'éteint, ça mets en garde l'utilisateur mais ce n'est pas juste. Si on redémarre le container (et non si on relance une nouvelle fois un conteneur à partir de l'image), les modifications sont toujours là :Code : 1
2
3
4
5
6
7
8
9
10
11
12
13docker run -it debian:jessie /bin/bash echo "test" > /tmp/test exit docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3dedd278996e debian:jessie "/bin/bash" 3 minutes ago Exited (0) About a minute ago clever_joliot docker start clever_joliot docker exec -it clever_joliot /bin/bash cat /tmp/test test
En revanche, lorsqu'on supprime le container (docker rm <containerId>), là oui, les données sont perdue !
Après ce n'est peut-être pas dans le niveau visé par ce tutoriel, mais ce que j'ai dis juste avant est à nuancer car il y a 3 "types de stockage" en fait :
- celui de base sur le principe de "l'oignon" : on perd les données si on supprime le container
- le volume "interne" : on perd les données si on supprime le volume (docker rm -v <containerId> ou docker volume rm <volumeId>)
- le volume mappé (sur un répertoire de l'hôte ou sur un autre container) : on perd les données en supprimant la source où est mappé le volume
Merci en tout cas d'avoir fait ce tutoriel et du temps que tu y as consacréle 18/01/2017 à 8:45 -
imikadoRédacteurMerci pour l'information, en effet, le tutoriel ici est vraiment orienté: "developper avec docker", il n'est pas "poussé" sur l'utilisation du gestionnaire de conteneur
Par-contre, dans votre exemple, quand on éteins/redemarre le pc, on perd les données, non ? à moins que docker mette en "pause" à l'extinction..le 18/01/2017 à 9:00 -
RiklesMembre habituéDésolé, encore quelques petites choses...
Dans certaines commandes, tu mets "identifiantImage" au lieu de "identifiantContainer" (commandes stop, pause, exec, commit). Ces commandes travaillent au niveau container et pas image.
Tu lances une commande Docker (avec un "D" majuscule au lieu d'une minuscule) dans le dernier bloc de code.
Personnellement, je préfère séparer les différents services d'une application dans des containers séparés (ici, apache et mysql) et j'utilise docker-compose pour les faire collaborer et les lancer.
J'y trouve pas mal d'avantages, comme, par exemple :
- si tu travailles à plusieurs sur un projet, tu peux créer la base de données et faire un export de l'image (commit + save) pour la donner aux autres dev sans embarquer apache et tout le reste...
- tu peux faire évoluer les images indépendamment les unes des autres (si seul le schéma de la DB évolue, pas besoins de repackager le tout, seulement l'image de la DB)
le 18/01/2017 à 9:08 -
imikadoRédacteurPour imageId / imageContainer + la majuscule à Docker, je vais corriger (mais il faudra attendre pour la correction en ligne qui prend un peu de temps et rend l'article indisponible pendant un instant)
Pour le multi-container, là encore, comme je le disais précédemment: ce n'est pas un article sur docker, mais un article pour coder avec docker, on utilise ici le gestionnaire de container comme un "outil" simple à mettre en place pour un développeur
Donc j'ai présenté le plus simple
L'utilisation de "docker compose" rajouterai de la complexité à l'article
note: je vais ajouter une "note" pour le signaler tout de mêmele 18/01/2017 à 9:22 -
RiklesMembre habituéC'est bien ce dont je me doutais
Donc je pense qu'effectivement, il n'est pas nécessaire de parler des différents "types de stockage".
Mais je pense qu'une petite précision sur le fait que les données du container ne sont supprimées qu'à la suppression du container et non à l'arrêt peut rassurer les utilisateurs
PS : Du coup, ma remarque sur docker-compose dans mon deuxième post est un peu too much aussi...Par-contre, dans votre exemple, quand on éteins/redemarre le pc, on perd les données, non ? à moins que docker mette en "pause" à l'extinction..le 18/01/2017 à 9:31 -
imikadoRédacteurPour l'histoire de la "persistence" des données:
Dans mon tuto j'indique que les paquets installés seront perdus, ça c'est le cas,non ?
j'ai déja eu le cas la semaine dernière où j'installai vim pour faire 2-3 modif en "live", et je les perdais à chaque foisle 18/01/2017 à 9:47 -
JaroddMembre expérimentéBonjour
Merci pour le tuto, c'est concrêt et facile à suivre, très utile
J'ai une erreur à la partie des vhosts. J'ai créé le mien ainsi :Code : 1
2
3
4
5
6
7
8
9
10
11
12<VirtualHost *:80> ServerName docker.dev DocumentRoot /var/www/docker/monAppli/public <Directory /var/www/html/data/genere/monAppli/public> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/docker.dev.error.log CustomLog ${APACHE_LOG_DIR}/docker.dev.access.log combined </VirtualHost>
Mais quand je vais sur docker.dev, j'ai cette erreur :Code : 1
2
3[Wed Jan 18 17:31:58.989229 2017] [:error] [pid 21795] [client 127.0.0.1:40356] PHP Warning: include(../../../../lib/framework//class_root.php): failed to open stream: No such file or directory in /var/www/docker/monAppli/public/index.php on line 23 [Wed Jan 18 17:31:58.989323 2017] [:error] [pid 21795] [client 127.0.0.1:40356] PHP Warning: include(): Failed opening '../../../../lib/framework//class_root.php' for inclusion (include_path='.:/usr/share/php') in /var/www/docker/monAppli/public/index.php on line 23 [Wed Jan 18 17:31:58.989623 2017] [:error] [pid 21795] [client 127.0.0.1:40356] PHP Fatal error: Uncaught Error: Class '_root' not found in /var/www/docker/monAppli/plugin/plugin_autoload.php:8\nStack trace:\n#0 [internal function]: plugin_autoload::autoload('_root')\n#1 /var/www/docker/monAppli/public/index.php(36): spl_autoload_call('_root')\n#2 {main}\n thrown in /var/www/docker/monAppli/plugin/plugin_autoload.php on line 8
Ca ressemble à des erreurs du framework, non à des erreurs de ma config... Je suis censé faire quoi ? (je ne connais pas ce framework)le 18/01/2017 à 17:39