Image de développement docker

Une installation peut-être plus rapide et plus simple (ou pas)

Le problème exposé dans ce sujet a été résolu.

Salut,

J'ai créé des images pour Docker, pour construire le site. Je trouve l'installation, plus facile à faire donc je partage avec vous.

C'est en test donc :°) .

Attention: Les images suivantes ne sont pas faite pour de la production. Elle nécessite de taper des commandes dans une console, le cas d'utilisation visé par ses images sont principalement les développeurs de Zeste de Savoir.

Avant de pouvoir commencer, il faut au minimum avoir d'installé:

  • Docker et savoir ouvrir une console "docker"
  • Une copie en local du dépôt zeste de savoir.
  • 1 giga d'espace libre sur votre disque dur

Installation de l'image front

  • Récupérer l'image zds_front grâce à la commande docker pull arhenion/zds_front dans un terminal "docker".
  • Taper la commande suivante dans la console docker docker run -it --privileged -v <Dossier ou est situé les sources>:/code/ arhenion/zds_front /bin/bash. Par exemple, sous linux, si les sources sont situé dans le dossier, /home/clem/zds-site/, la commande à éxécuter sera docker run -it --privileged -v /home/clem/zds-site/:/code/ arhenion/zds_front /bin/bash. Sur windows uniquement, vous devez faire précéder le chemin par un /<nom du disque>/, si le code source était dans C:/Users/clem/zds-site de l'utilisateur, on aurait éffectué la commande suivante: docker run -it --privileged -v /c/Users/clem/zds-site:/code/ arhenion/zds_front /bin/bash.

  • Vous arrivez sur un interpréteur de commande bash, utiliser la commande npm run gulp watch pour builder le front régulièrement pendant vos développement.

Installation de l'image back

  • Récupérer l'image zds_back grâce à la commande docker pull arhenion/zds_back dans un terminal "docker".
  • Taper la commande suivante dans la console docker docker run -it -p 8000:8000 -v <Dossier ou est situé les sources>:/code/ arhenion/zds_back /bin/bash.
  • Vous arrivez sur un interpréteur de commande bash, utiliser la commande python manage.py runserver 0.0.0.0:8000 pour démarrer le serveur.

Tout en haut de la console, juste en dessous de la baleine, si vous ête sous windows ou mac, vous avez d'affiché une adresse ip. Sous Linux, vous pouvez utiliser localhost.

Ouvrer votre navigateur et taper l'adresse ip trouvé précédemment et tenter de vous connecter sur le port 8000.

Lien Dépôt GitHub

License: Public Domain

FAQ

  • Au lancement du conteneur front, j'obtient l'erreur sh: gulp not found, que puis je faire ?

ça arrive de temps en temps, allez dans le dossier code (cd /code/) puis taper la commande mount -o bind /tmp/zdsfront/node_modules/ node_modules/ et retenter la commande npm run gulp build

+8 -0

C'est juste que j'imaginais (question de point de vue) qu'un développeur front préférerai avoir ses outils d'installé, plutôt que d'avoir un conteneur. Pareil pour quelqu'un qui code avec le back. Du coup, chacun utilise à sa préférence.

On pourrait en faire qu'un seul en utilisant docker-compose et du coup plus qu'une ligne à taper.

+0 -0

J'écris la documentation sur Sphinx et je propose comme méthode d'installation officielle (en plus des autres) ?

Si on fait ça, faut créer un compte sur DockerHub pour Zeste de Savoir, faudrait que je fasse un beau mail au président de l'association. Ramener mon dépôt sur le compte Zeste de Savoir.

+0 -0

Si on fait ça, faut créer un compte sur DockerHub pour Zeste de Savoir, faudrait que je fasse un beau mail au président de l'association

Pas besoin de passer par les mails, je suis là. Si le DTC me valide ça (par principe, c'est lui le responsable technique), moi j'ai pas d'objection. Lui ou moi pouvons créer le compte via le mail de l'asso.

L'image docker, c'est vraiment super cool. J'y vois un gros intérêt, surtout dans de la QA. Mais dans quelle mesure peux-tu développer avec tes images ou comment est-ce que ça s'intègre dans notre environnement de travail (PyCharm par exemple) ?

+0 -0

Pas besoin de passer par les mails, je suis là. Si le DTC me valide ça (par principe, c'est > lui le responsable technique), moi j'ai pas d'objection. Lui ou moi pouvons créer le compte > via le mail de l'asso.

Ok, cool. Je pense qu'il y'aura un mail de confirmation et comme j'ai pas accés à la boite mail, je vais laisser Spacefox au moins valider le mail. De toute manière, ce n'est pas urgent donc pas de souci, on fait ça quand on a tout les deux le temps.

L'image docker, c'est vraiment super cool. J'y vois un gros intérêt, surtout dans de la QA.

Je suis pas sur que ces images soit adapté pour de la QA. Le cas d'utilisation était vraiment, les développeurs. Faut quand même, taper 6 lignes de commandes dans un terminal, ce qui est acceptable pour un dev, moins pour un mec qui fait de la QA. Y'a vraiment moyen de faire mieux.

C'est pas super facile de faire des images Docker pour la QA car il faut trouver le moyen de moyen de créer automatiquement une image à chaque PR.

Si on le fait pas, y'a deux solutions :

  • Le gentil testeur créé son image et l'exécute. Mais ça risque de prendre du temps à build, j'ai pas pris mon chrono avec moi, mais y'en a pour minimum 10-15 minutes (npm install toussa).
  • On lui fournis une image avec tout d'installé et un script qui met automatiquement à jours les sources (git checkout), met à jours la base de donnée, fait un npm install dans la branche, .... .

. Mais dans quelle mesure peux-tu développer avec tes images ou comment est-ce que ça s'intègre dans notre environnement de travail (PyCharm par exemple) ?

Tu peux avoir l'environnement de travail que tu veux. Sur ta machine de développement avant d'utiliser Docker, il faut cloner le code source. Le code source est dans un dossier que tu choisi sur ton ordinateur. Les images Docker à l'exécution, vont juste monter le dossier et s'en servir pour builder le front et lancer le site. Si tu fais une modification d'un fichier depuis le dossier sur ton environnement de bureau, par-exemple, c'est automatiquement répercuté dans les deux conteneurs sans aucune procédure de ta part. Un peu comme si tu montait un dossier avec la commande mount de Linux. Tu es pas censé installer un autre logiciel dans les conteneurs, c'est vraiment pas le but.

Tu peux donc éditer le code avec tous les éditeurs que tu veux, ça n'a vraiment pas d'importance.

Le workflow est le suivant:

  • Tu clone le code
  • Tu lance deux terminal Docker, tu lance les deux conteneurs
  • Tu lance ton navigateur et navigue sur la bonne adresse.
  • à partir de cette étape, tu peux oublier Docker. Tu es libre.
  • Tu peux lancer Pycharm normallement, tu fait les modifs que tu veux. Les deux conteneurs sont impactés en direct et te permette de voir en direct les changements dans ton navigateur.

Edit: Pycharm intégre un plugin pour docker mais il est pas génial … :)

+1 -0

Ça me fait très plaisir que dise ça ! Ça me donne envie d'écrire la documentation que j'ai jamais écrite :) !

Juste par curiosité, tu utilise quoi comme os ? windows ou linux ?

Bravo, pour l'installation, car j'ai pas fait de doc (honte à moi !), tu t'en es bien tiré !

Fait attention, c'est pas du tout le top au niveau sécurité, utilisation de –privileged et j'utilise le compte root, je gére pas les dépendences toussa. Mais si tu l'utilise pour ton poste de dev, y'a pas de souci ;) .

+0 -0

Juste par curiosité, tu utilise quoi comme os ? windows ou linux ?

J'utilise Linux. Concernant Windows, une personne est récemment passée sur IRC, et apparemment, l'installation est impossible. Mais ce serait lie à Docker lui-même.

Bravo, pour l'installation, car j'ai pas fait de doc (honte à moi !), tu t'en es bien tiré !

Ce n'était pas trop difficile, ça va. :p

Juste par curiosité, tu utilise quoi comme os ? windows ou linux ?

J'utilise Linux. Concernant Windows, une personne est récemment passée sur IRC, et apparemment, l'installation est impossible. Mais ce serait lie à Docker lui-même.

Je sais pas si c'était ça son souci mais y'a deux méthodes "d'utilisation" de docker sur Windows, il faut en prendre une des deux :

Les prérequis pour utiliser la version Hyper V (en natif) sont les suivantes:

  • Windows 10 (pro, entreprise, éducation )
  • Avoir un build de Windows (< 1511). Pour avoir un build de Windows récent, il faut souscrire à la beta de Microsoft ou attendre août. Pour participer à la béta, rien de plus simple, il suffit d'aller dans le menu "Windows update" du panneau de configuration, aller dans option avancées puis dans la section "obtenir des builds Insider Preview". Il faut attendre 24h avant de pouvoir télécharger son premier build qui sera automatiquement proposé comme maj de l'os.
  • Activer Hyper V, pour cela, il suffit de se rendre dans "désintaller un programme" puis dans "Activer ou désactiver des fonctionnalités de Windows", cocher la base "Hyper V", puis redémarrer.
  • Avoir de l'espace sur son C

Les prérequis pour utiliser la version Docker Toolbox sont les suivantes:

  • Aucun mais c'est pas natif :D .

Docker sur Linux, c'est quand même un peu plus simple ^^ !

+0 -0

Juste par curiosité, combien de temps as-tu mis pour installer le tout ? J'ai du mal à me rendre compte de combien de temps, ça peut prendre pour quelqu'un qui l'a jamais fait.

Je ne saurais te dire, mais vraiment pas longtemps....

PS: On y crois pour demain !

Plus que jamais ! :magicien:

Hello,

C'est moi la personne qui est récemment passée sur IRC ;)

La première fois, je n'avais pas pu démarrer Docker. Par contre j'ai réessayé hier et aujourd'hui en réinstallant le tout et maintenant Docker tourne chez moi. Très content de ce succès, j'ai donc suivit les instructions du premier message de ce sujet.

Au niveau du front, tout fonctionne, gulp watch à l'air de tourner et aucune erreurs n'est présente.

Par contre niveau back, les deux premières lignes passent sans problème :

1
2
docker pull arhenion/zds_back
docker run -it -p 8000:8000 -v /c/Dev/zds:/code/ arhenion/zds_back /bin/bash

Mais dès que je dois démarrer le serveur python il me crache cette erreur :

 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
33
34
35
bash-4.3# python manage.py runserver 0.0.0.0:8000
Performing system checks...

System check identified no issues (0 silenced).
Unhandled exception in thread started by <function wrapper at 0x7fb0025c5de8>
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/django/utils/autoreload.py", line 229, in wrapper
    fn(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 116, in inner_run
    self.check_migrations()
  File "/usr/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 168, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
  File "/usr/lib/python2.7/site-packages/django/db/migrations/executor.py", line 19, in __init__
    self.loader = MigrationLoader(self.connection)
  File "/usr/lib/python2.7/site-packages/django/db/migrations/loader.py", line 47, in __init__
    self.build_graph()
  File "/usr/lib/python2.7/site-packages/django/db/migrations/loader.py", line 191, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "/usr/lib/python2.7/site-packages/django/db/migrations/recorder.py", line 59, in applied_migrations
    self.ensure_schema()
  File "/usr/lib/python2.7/site-packages/django/db/migrations/recorder.py", line 53, in ensure_schema
    editor.create_model(self.Migration)
  File "/usr/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 93, in __exit__
    self.atomic.__exit__(exc_type, exc_value, traceback)
  File "/usr/lib/python2.7/site-packages/django/db/transaction.py", line 225, in __exit__
    connection.commit()
  File "/usr/lib/python2.7/site-packages/django/db/backends/base/base.py", line 173, in commit
    self._commit()
  File "/usr/lib/python2.7/site-packages/django/db/backends/base/base.py", line 142, in _commit
    return self.connection.commit()
  File "/usr/lib/python2.7/site-packages/django/db/utils.py", line 98, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/usr/lib/python2.7/site-packages/django/db/backends/base/base.py", line 142, in _commit
    return self.connection.commit()
django.db.utils.OperationalError: database is locked

J'ai passé un moment avec vhf et spacefox hier sur IRC mais on a rien pu faire.

Voilà. En espérant que quelqu'un puisse m'éclairer sur le sujet afin de commencer (enfin) à contribuer à zeste ;)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte