Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Apprendre l'utilisation du gestionnaire de conteneurs Docker en programmation avec le framework PHP mkframework
Un tutoriel de Michael Bertocchi

Le , par imikado

12PARTAGES

6  0 
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

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Rikles
Membre habitué https://www.developpez.com
Le 18/01/2017 à 8:45
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 : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
docker 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
Et c'est bien pour ça que la commande docker commit fonctionne et est utile
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 :
  1. celui de base sur le principe de "l'oignon" : on perd les données si on supprime le container
  2. le volume "interne" : on perd les données si on supprime le volume (docker rm -v <containerId> ou docker volume rm <volumeId>)
  3. 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é
1  0 
Avatar de imikado
Rédacteur https://www.developpez.com
Le 18/01/2017 à 9:00
Merci 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..
1  0 
Avatar de Rikles
Membre habitué https://www.developpez.com
Le 18/01/2017 à 9:08
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)
0  0 
Avatar de imikado
Rédacteur https://www.developpez.com
Le 18/01/2017 à 9:22
Pour 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ême
0  0 
Avatar de Rikles
Membre habitué https://www.developpez.com
Le 18/01/2017 à 9:31
Citation Envoyé par imikado Voir le message
Merci 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
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..
Normalement, on ne perd pas les modifications à l’arrêt du système (si on l'arrête proprement) car à l'extinction du démon docker, les containers sont stoppés.
0  0 
Avatar de imikado
Rédacteur https://www.developpez.com
Le 18/01/2017 à 9:47
Pour 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 fois
0  0 
Avatar de Jarodd
Membre expérimenté https://www.developpez.com
Le 18/01/2017 à 17:39
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 : Sélectionner tout
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>
Avec la modif du /etc/hosts et le reload d'Apache qui vont bien.

Mais quand je vais sur docker.dev, j'ai cette erreur :

Code : Sélectionner tout
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
Je précise qu'à l'adresse http://localhost:81/data/genere/monAppli/public/, j'ai bien le rendu du MKFramework, donc le docker est bien configuré et tourne bien...

Ca ressemble à des erreurs du framework, non à des erreurs de ma config... Je suis censé faire quoi ? (je ne connais pas ce framework)
0  0