Catégorie : Docker

[Docker] Stopper et supprimer tous les containers et images Docker

Sources: Stop and remove all docker containers and images et I have a helper function to nuke everything so that our Continuous blah, cycle can be tested, erm… continuously.

To clear containers:

docker rm -f $(docker ps -a -q)

To clear images:

docker rmi -f $(docker images -a -q)

To clear volumes:

docker volume rm $(docker volume ls -q)

To clear networks:

docker network rm $(docker network ls | tail -n+2 | awk '{if($2 !~ /bridge|none|host/){ print $1 }}')

List all containers (only IDs)

Stop all running containers

Remove all containers

Remove all images

[Docker][NodeJS] Utiliser Docker pour créer un environnement de développement NodeJS

Source: Use Docker to Create a Node Development Environment et version PDF pour la postérité. Tutoriel (en anglais) extrêmement détaillé et très bien expliqué.

Repo Git: Use Docker to Create a Front-End Node JS Development Environment.

Ce tutoriel m’a permis:

  • d’exécuter NPM depuis un container Docker sans avoir à procéder à une installation locale de NodeJS (écarte les problèmes liés à l’obligation de jongler avec différentes version de Node/NPM en fonction de l’âge du projet).
  • de lancer un serveur Node JS via Express.
  • d’accéder à localhost dans un navigateur.

Pour aller encore plus loin (pas lu l’article en entier, mais il est ressorti dans mes résultats de recherche lorsque j’ai trouvé le tuto dont je parle juste au-dessus et me paraît intéressant à conserver pour améliorer ma pratique de Docker): A Better Way to Develop Node.js with Docker (I’ve seen a lot of articles lately suggesting how to use Docker for development. I haven’t seen one yet that does it correctly). Version PDF pour la postérité.

[Docker] Importer une base de données en copiant le fichier SQL dans le container DB avec docker cp

Nous allons utiliser la commande docker cp pour copier un fichier disponible sur notre host dans un dossier tmp du container guest:

Puis se connecter au container db et taper la commande:

ATTENTION: vous allez probablement obtenir un message mysql: [Warning] Using a password on the command line can be insecure.. Votre dump sera tout-de-même importé.

pour la petite histoire, les volumes ça s’exprime sous la forme host:guest. guest est toujours un chemin absolu. host peut être :

  • un path absolu (/bidule/…) ou relatif (./bidule, ../bidule) => un dossier ou un fichier du host est monté sur le path du guest
  • un nom (mysql-data, pas de référence absolue ou relative) => il s’agit d’un volume nommé, on n’interagit pas avec, c’est géré de manière transparente pour toi par docker. Tu peux le voir via docker volumes ls, c’est stocké normalement dans /var/lib/docker/filesystems/… ou un truc du genre

[Docker] Compiler les sources de Foundation (Zurb Template) dans un conteneur

Note: déprécié au profit de [Docker][NodeJS] Utiliser Docker pour créer un environnement de développement NodeJS.

Accès rapide aux commandes Docker utiles

Docker for Gulp Build Tasks et version PDF pour la postérité. Cet article m’a permis de mettre en place un Docker pour compiler mes sources Front-End via NPM (workflow utilisant Bower et Gulp). Et ça marche!!!


ATTENTION: ce Docker fonctionne bien (les sources en local sont compilées via le conteneur), à l’exception de Browsersync qui ne recharge pas l’aperçu dans le navigateur.

TODOs

  • Les fichiers compilés (dossier dist/) sont bien modifiés en local, mais on ne voit pas les modifications en front dans le navigateur. Hypothèse: on voit les fichiers présents dans le conteneur (qui eux ne sont pas modifiés) et pas les fichiers locaux.

    le truc c’est t’utilise pas du tout de volumes
    donc en gros t’es sources sont accessible dans l’image docker, que parce que y’a un copy dans ton Dockerfile
    ca arrive qu’une fois lors du build de l’image
    donc si tu modifie ton code après coup, ton image docker le verra pas, car le code updaté ne lui est pas fourni


Pourquoi Docker?

Par souci de portabilité de l’environnement de travail.

Problème de versions de nodeJS et de ses dépendances d’un poste de travail à l’autre…

Prérequis

Avoir Docker d’installé, avoir Git d’installé.

Conventions pour ce tutoriel

Nous partirons du principe que nos fichiers de travail se trouvent dans un dossier docker/fzt-master. Vous pouvez créer le dossier docker/ via la commande mkdir docker, mais ne créez pas le dossier fzt-master/ pour le moment.

Attention: si vous utilisez un IDE, il est important que les fins de lignes dans vos fichiers soient au format « Unix ». Dans Sublime Text 3 par exemple, menu View > Line endings > Unix.

Mon environnement de travail est un Ubuntu server dans une VM que je lance depuis un Windows 10 via Virtual Box.

Rapatriement des sources de Foundation

A la racine d’un dossier nommé docker/, exécuter la commande suivante pour récupérer les sources de Foundation Zurb Template (branche master) en local via Git dans un dossier fzt-master/: git clone https://github.com/zurb/foundation-zurb-template.git ftz-master

Se placer à la racine du dossier fzt-master (commande cd fzt-master), créer un fichier Dockerfile (commande touch Dockerfile) et l’éditer pour y placer les lignes de code suivantes (commande vim Dockerfile ou vi Dockerfile si vim n’est pas installé sur votre machine) :

Dans vim, on passe en mode « insertion » en tapant la touche Inser du clavier, ce qui nous permet d’éditer le fichier. La combinaison de touches :wq! nous permet ensuite de sauvegarder les modifications apportées au fichier et de quitter.

Dockerfile:

docker-compose.yml

De manière à pouvoir exploiter browser-sync et le live reload, il faut également créer un fichier docker-compose.yml qui va s’occuper de rediriger les ports du conteneur vers notre machine locale afin que nous ayons accès au résultat de nos fichiers compilés dans notre navigateur préféré (explication ici) :

Vos sources devraient être accessibles dans votre navigateur depuis l’URL: http://localhost:4000 ou ip.de.votre.vm:4000

Pour récupérer l’IP de votre VM, taper la commande ifconfig. Choisir celle qui commence par 192.168..

gulpfile.babel.js

Il faudra également éditer le fichier gulpfile.babel.js en local pour ajouter le paramètre open: false à la fonction server:

Initialiser le conteneur Docker

Builder le conteneur: docker build -t fzt-master . edit: la tâche de build sera effectuée par le docker-compose, juste en-dessous.

A la racine du dossier où se trouvent les fichiers Dockerfile et docker-compose.yml, exécuter la commande: docker-compose up -d

Puis (la première fois et à chaque modification du fichier package.json) installer, via le conteneur, les dépendances NPM en local: docker run --rm -v ~/docker/fzt-master:/home/app/ fzt-master npm install edit: la commande npm install a été ajoutée d’office dans le Dockerfile.

Image for service fzt-master was built because it did not already exist. To rebuild this image you must use docker-compose build or docker-compose up --build.

Exploiter le conteneur Docker

Lancer le conteneur afin qu’il exécute la commande par défaut (yarn start) : docker run --rm --pid=host -v ~/docker/fzt-master:/home/app/ fzt-master

L’argument --pid=host sert à stopper la tâche de compilation des sources dans votre conteneur en utilisant le traditionnel raccourci ctrl + c.


ATTENTION: ce billet est expérimental. Il ne garantit en rien que vous puissiez réellement être en mesure de compiler les sources de Foundation dans un conteneur en suivant les directives ci-dessous. Je suis en-train de mettre en place le Dockerfile qui permettra de le faire. Ce billet constitue des notes de travail. En fonction de mon avancement, vous arriverez peut-être à quelque chose. Je retirerai ce message lorsque le Dockerfile sera fonctionnel comme je l’entends.

Pour aller plus loin:

uwegerdes/frontend-development

Browsersync within a Docker container

How to run livereload with gulp within a docker container?

Le Dockerfile décortiqué

Pour paramétrer correctement le Dockerfile, il convient d’aller chercher quelques informations dans les fichiers readme.md et package.json du repo Git de Foundation que nous venons de cloner. Attention à bien chercher ces informations dans la branche que nous venons de cloner (v6.4). Le framework évolue sans arrêt et les informations, les paquets NPM (et leurs versions) et les commandes dont nous avons besoin pour, respectivement, constituer le Dockerfile et compiler notre code source sans erreurs sont différents d’une branche à l’autre du projet.

Embarquer la bonne version de nodeJS

Premièrement, vérifier la version de nodeJS à installer pour faire fonctionner correctement les dépendances utilisées lors de la compilation des sources. La section Installation du fichier readme.md nous renseigne sur ce point:

NodeJS (0.12 or greater)

Nous pourrons trouver ce fichier qui constitue le script d’installation de la version 0.12 de nodeJS sur le repository Git officiel du projet node. Il est à récupérer et à copier/coller dans le dossier fzt64, à la racine (au même niveau que le Dockerfile).

Pour d’autres versions du framework Foundation ou d’autres projets dont la compilation des sources reposent sur NPM, la liste des scripts d’installation de l’ensemble des distributions de nodeJS se trouve ici.

Edit: pour des raisons que j’ignore (quoique, peut-être un problème relatif à la version 16.04 d’ubuntu server que je déclare et qui serait trop récente… je n’ai pas testé avec une petite 14.04 mais je devrais…), le build du container semble ne pas fonctionner avec la version 0.12 de nodeJS préconisée dans la branche v6.4 de Foundation. Peut-être une erreur de mise à jour dans leur readme…

Step 9/13 : RUN /usr/bin/npm install -g babel-core
—> Running in 510dcfa93753
/bin/sh: 1: /usr/bin/npm: not found
The command ‘/bin/sh -c /usr/bin/npm install -g babel-core’ returned a non-zero code: 127

Je la remplace donc par la version 4.x qui lui succède chronologiquement.

Je pourrais tenter de la remplacer par la version en cours (11.x au moment où j’écris ces lignes…), mais je m’expose à des incompatibilités avec les versions de certains paquets NPM utilisés dans la branche v6.4 de la stack Zurb (trop grand gap de versions entre nodeJS et les paquets). C’est notamment ce problème que nous essayons d’éviter en mettant à profit Docker.

Troubleshooting et installation des applications et devDependencies manquantes

On ne peut pas toujours deviner quelles applications et devDependencies doivent être obligatoirement installées dans le conteneur. Il y a bien un fichier package.json dans le projet, mais toutes les devDependencies ne doivent pas obligatoirement être installées via le Dockerfile. Il faut y aller à tâtons et fixer une à une les erreurs retournées par le terminal lors du build du conteneur.

https://github.com/zurb/foundation-zurb-template/blob/v6.4/package.json#L16

$ docker run –rm -v ~/docker/fzt64:/home/app/ fzt64

> foundation-zurb-template@1.0.0 start /home/app
> gulp

[14:26:11] Failed to load external module @babel/register
[14:26:11] Failed to load external module babel-register
[14:26:11] Failed to load external module babel-core/register
[14:26:11] Failed to load external module babel/register
[14:26:11] Local gulp not found in /home/app
[14:26:11] Try running: npm install gulp

Step 9/11 : RUN /usr/bin/npm install
—> Running in 95a31683f7c9
npm ERR! git clone –template=/root/.npm/_git-remotes/_templates –mirror git@github.com:gulpjs/gulp.git /root/.npm/_git-remotes/git-github-com-gulpjs-gulp-git-ed33b0aa: undefined
npm ERR! git clone –template=/root/.npm/_git-remotes/_templates –mirror git@github.com:gulpjs/gulp.git /root/.npm/_git-remotes/git-github-com-gulpjs-gulp-git-ed33b0aa: undefined
npm WARN deprecated gulp-uncss@1.0.6: Use UnCSS through gulp-postcss instead.
npm WARN deprecated babel-preset-es2015@6.24.1: ???? Thanks for using Babel: we recommend using babel-preset-env now: please read babeljs.io/env to update!
npm ERR! Linux 4.4.0-57-generic
npm ERR! argv « /usr/bin/node » « /usr/bin/npm » « install »
npm ERR! node v4.9.1
npm ERR! npm v2.15.11
npm ERR! code ENOGIT

npm ERR! not found: git
npm ERR!
npm ERR! Failed using git.
npm ERR! This is most likely not a problem with npm itself.
npm ERR! Please check if you have git installed and in your PATH.

npm ERR! Please include the following file with any support request:
npm ERR! /home/app/npm-debug.log
The command ‘/bin/sh -c /usr/bin/npm install’ returned a non-zero code: 1

npm ERR! not found: git. Il faut ajouter Git à la liste des paquets à installer.

Step 8/10 : RUN /usr/bin/npm install
—> Running in f25efff29bd2
npm WARN deprecated gulp-uncss@1.0.6: Use UnCSS through gulp-postcss instead.
npm WARN deprecated babel-preset-es2015@6.24.1: ???? Thanks for using Babel: we recommend using babel-preset-env now: please read babeljs.io/env to update!
npm ERR! git rev-list -n1 4.0: fatal: ambiguous argument ‘4.0’: unknown revision or path not in the working tree.
npm ERR! git rev-list -n1 4.0: Use ‘–‘ to separate paths from revisions, like this:
npm ERR! git rev-list -n1 4.0: ‘git […] — […]’
npm ERR! git rev-list -n1 4.0:
npm ERR! git rev-list -n1 4.0: fatal: ambiguous argument ‘4.0’: unknown revision or path not in the working tree.
npm ERR! git rev-list -n1 4.0: Use ‘–‘ to separate paths from revisions, like this:
npm ERR! git rev-list -n1 4.0: ‘git […] — […]’
npm ERR! git rev-list -n1 4.0:
npm ERR! git clone –template=/root/.npm/_git-remotes/_templates –mirror git@github.com:gulpjs/gulp.git /root/.npm/_git-remotes/git-github-com-gulpjs-gulp-git-ed33b0aa: Cloning into bare repository ‘/root/.npm/_git-remotes/git-github-com-gulpjs-gulp-git-ed33b0aa’…
npm ERR! git clone –template=/root/.npm/_git-remotes/_templates –mirror git@github.com:gulpjs/gulp.git /root/.npm/_git-remotes/git-github-com-gulpjs-gulp-git-ed33b0aa: Host key verification failed.
npm ERR! git clone –template=/root/.npm/_git-remotes/_templates –mirror git@github.com:gulpjs/gulp.git /root/.npm/_git-remotes/git-github-com-gulpjs-gulp-git-ed33b0aa: fatal: Could not read from remote repository.
npm ERR! git clone –template=/root/.npm/_git-remotes/_templates –mirror git@github.com:gulpjs/gulp.git /root/.npm/_git-remotes/git-github-com-gulpjs-gulp-git-ed33b0aa:
npm ERR! git clone –template=/root/.npm/_git-remotes/_templates –mirror git@github.com:gulpjs/gulp.git /root/.npm/_git-remotes/git-github-com-gulpjs-gulp-git-ed33b0aa: Please make sure you have the correct access rights
npm ERR! git clone –template=/root/.npm/_git-remotes/_templates –mirror git@github.com:gulpjs/gulp.git /root/.npm/_git-remotes/git-github-com-gulpjs-gulp-git-ed33b0aa: and the repository exists.
npm ERR! Linux 4.4.0-57-generic
npm ERR! argv « /usr/bin/node » « /usr/bin/npm » « install »
npm ERR! node v4.9.1
npm ERR! npm v2.15.11
npm ERR! code 128

npm ERR! Command failed: git clone –template=/root/.npm/_git-remotes/_templates –mirror git@github.com:gulpjs/gulp.git /root/.npm/_git-remotes/git-github-com-gulpjs-gulp-git-ed33b0aa
npm ERR! Cloning into bare repository ‘/root/.npm/_git-remotes/git-github-com-gulpjs-gulp-git-ed33b0aa’…
npm ERR! Host key verification failed.
npm ERR! fatal: Could not read from remote repository.
npm ERR!
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.
npm ERR!
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!

npm ERR! Please include the following file with any support request:
npm ERR! /home/app/npm-debug.log
The command ‘/bin/sh -c /usr/bin/npm install’ returned a non-zero code: 1

Il faut ajouter gulp-cli à la liste des dépendances NPM à installer. Voir ici et .

Builder le container

Pour builder le container (que je vais appeler « fzt64 »), j’exécute la commande: docker build -t fzt64 .

Installer les paquets node en local, via le container

Then open the folder in your command line, and install the needed dependencies:

cd projectname
npm install
bower install

Commande à exécuter obligatoirement avant toute autre pour récupérer les dépendances NPM du projet (dossier node_modules) en local.

Pour exécuter la commande npm install à l’intérieur de mon container (et ainsi récupérer les dépendances node propres au projet Foundation en local sur ma machine, à la racine du dossier home/intlangf/docker/fzt64/ où se trouve le fichier package.json), j’exécute la commande docker run --rm -v ~/docker/fzt64:/home/app/ fzt64 npm install

Pareil pour Bower: docker run --rm -v ~/docker/fzt64:/home/app/ fzt64 bower install

Commande par défaut

La section Manual setup du fichier readme.md nous renseigne sur les différentes commandes fournies par la stack Zurb:

Finally, run npm start to run Gulp. Your finished site will be created in a folder called dist, viewable at this URL:
http://localhost:8000
To create compressed, production-ready assets, run npm run build.

La commande npm start est la commande par défaut dans notre Dockerfile.

Ceci signifie que lorsqu’on exécute la commande docker run --rm -v ~/docker/fzt64:/home/app/ fzt64 dans notre terminal, c’est en réalité la commande npm start qui sera exécutée dans notre container. Elle génèrera un dossier dist/ en local (à la racine du dossier docker/fzt64/) qui contiendra le résultat de la compilation des différentes sources de Foundation.

Exécuter une commande autre que celle par défaut

On voit que d’autres commandes sont disponibles au sein de la stack Zurb.

docker run --rm -v ~/docker/fzt64:/home/app/ fzt64 npm run build

Commandes utiles

Supprimer des images Docker

Lister les images disponibles: docker images -a.

Supprimer des images en utilisant leurs IDs ou leurs tags: docker rmi <Image> <Image>.

[Docker] Utiliser node, npm, grunt, gulp, webpack, bower, yarn, etc.

Docker for Gulp Build Tasks et version PDF pour la postérité. Cet article m’a permis de mettre en place un Docker pour compiler mes sources Front-End via NPM (workflow utilisant Bower et Gulp). Et ça marche!!!


Mes sources pour ce billet:


Avec Foundation Zurb Template

Création de la Dockerfile

Dans home/intlangf/docker/ je fais un git clone https://github.com/zurb/foundation-zurb-template.git fzt (pour récupérer les sources du framework CSS Foundation).

Ensuite, cd fzt pour entrer dans le dossier créé par Git. Puis touch Dockerfile et vim Dockerfile pour créer et éditer un fichier Dockerfile dans lequel je place le code ci-dessous:

Builder le container

Pour builder le container (que je vais appeler « fzt »), j’exécute la commande: docker build -t fzt .

Exécuter une commande à l’intérieur du container: récupérer les paquets NPM

Commande à exécuter obligatoirement avant toute autre pour récupérer les dépendances NPM du projet (dossier node_modules) en local.

Pour exécuter npm install à l’intérieur de mon container (et ainsi récupérer les dépendances node propres au projet Foundation en local sur ma machine, à la racine du dossier home/intlangf/docker/fzt/ où se trouve le fichier package.json), j’exécute la commande docker run --rm -v ~/docker/knacss:/home/app/ fzt npm install.

Exécuter une commande à l’intérieur du container: yarn start

Les sources dans Foundation se compilent via la commande yarn start qu’on exécute ainsi: docker run --rm -v ~/docker/knacss:/home/app/ fzt.

Ici on ne précise pas de commande à la suite du nom de l’image Docker, car la commande par défaut dans le fichier Dockerfile est CMD ["yarn", "start"].

Résultat: un dossier dist/ est généré en local avec les sources CSS, JS, etc, compilées via notre image Docker!


Avec KNACSS

Création de la Dockerfile

Dans home/intlangf/docker/ je fais un git clone https://github.com/alsacreations/KNACSS.git knacss (pour récupérer les sources du framework CSS Knacss).

Ensuite, cd knacss pour entrer dans le dossier créé par Git. Puis touch Dockerfile et vim Dockerfile pour créer et éditer un fichier Dockerfile dans lequel je place le code ci-dessous:

Builder le container

Pour builder le container (que je vais appeler « test »), j’exécute la commande: docker build -t test .

Exécuter une commande à l’intérieur du container

Pour exécuter npm install à l’intérieur de mon container (et ainsi récupérer les dépendances node propres au projet Knacss en local sur ma machine, à la racine du dossier home/intlangf/docker/knacss/ où se trouve le fichier package.json), j’exécute la commande docker run --rm -v ~/docker/knacss:/home/app/ test npm install.


Expériences plus anciennes

Avec une Dockerfile

Container with ready-to-run gulp-tasks sur hub.docker.com.

  1. copy the contents of the example directory to your project.
  2. change the gulpfile.js to meet your requirements (sass or less, copy included?)
  3. change the gulp_config.js to meet your requirements

4. make the gulp-File executable

Well you can make it by doing as chmod +x filename.sh so it will execute when you call it will ./filename.sh.

5. run ./gulp build:dev or ./gulp watch

see gulp running for you, without having to worry with nodejs, module dependencies, complex tasks configuration

Avec Docker Compose

Bonus:

How To Remove Docker Images, Containers, and Volumes

Remove all images and containers


[Docker] Mettre en place un container workflow de développement Front-End incluant NodeJS, NPM, Bower, Gulp, etc …

Note: déprécié au profit de [Docker][NodeJS] Utiliser Docker pour créer un environnement de développement NodeJS.

Docker for Gulp Build Tasks et version PDF pour la postérité. Cet article m’a permis de mettre en place un Docker pour compiler mes sources Front-End via NPM (workflow utilisant Bower et Gulp). Et ça marche!!!


Ressources en ligne

Tutoriels

Repositories

  • Le projet docker-npm de nkenney sous Git. Un node, npm, yarn, bower, grunt and gulp runner.

[Docker] Quelques notes de prise en main et résolution d’erreurs

Voir aussi: Résolution des problèmes et recommandations pour les troubleshooting.


Objectif : faire tourner un projet Change 3.x dans une VM Ubuntu 14.xx qui intègre une version de PHP (5.5.x) trop récente pour la solution. Le projet que nous essayons de faire tourner est alainflou.

Doc interne :

Déployer le projet sur la VM

Ce projet a été déployé sur la VM à l’aide de l’outil RBS cooking vers le chemin /home/<utilisateur_de_la_VM>/change30/alainflou. Les sources du projet sont accessibles depuis le repository git de Netapsys.

Les instructions principales pour la partie : Déployer le projet sur la VM

  • Stopper le serveur Apache : sudo service apache2 stop
  • Démarrer un conteneur Docker : docker-compose up -d
  • Stopper un conteneur Docker : docker-compose down -v
  • Visualiser les conteneurs Docker qui tournent : docker ps
  • Se logguer dans un conteneur Docker : docker exec -ti alainflou_change_1 bash (où alainflou_change_1 est le nom du Docker en question; on peut trouver ce nom en tapant la commande docker ps, sous la colonne NAMES).
  • Se logguer dans un conteneur Docker pour un projet déployé avec Cook : cook utf e:local m2.shell (ou utf est le nom du projet).

Utiliser le Docker dcompass

Deux pré-requis:

  • Le fichier config.rb doit se trouver à la racine du theme (exemple: projet/skin/frontend/package/theme/config.rb)
  • On exécute la commande depuis projet/skin/frontend/package/theme/

Liens d’accès rapide pour la partie : Déployer le projet sur la VM

Installer Docker sur la VM Ubuntu Server

Installer Docker pour Ubuntu à la racine de /home/<utilisateur_de_la_VM>/.

Récupérer les conteneurs Docker pour Change

Dans le dossier /home/intlangf/Docker, récupérer sur le Git Netapsys les images Docker mises à notre disposition. Celle qui nous intéresse plus particulièrement est /docker-images/change/35 mais on va les récupérer toutes.

Lancer le conteneur Docker Change35

Se rendre ensuite dans le dossier /home/intlangf/Docker/docker-images/change/35 et lancer la commande make.
Un message qui doit ressembler à :

…devrait apparaître suivi d’une succession d’étapes (Steps) pour enfin afficher un message qui ressemble à peu près à :

On peut ensuite vérifier que l’image Docker de Change35 a bien été lancée en tapant la commande docker ps qui affichera l’ensemble des images qui sont actuellement lancées. Normalement vous devriez avoir au moins celle-ci :

Relier le projet alainflou à l’image dockérisée de Change35

Retour à la racine du dossier Docker pour créer un dossier alainflou et y placer un fichier docker-compose.yml qui contient les informations suivantes (où intlangf est le nom d’utilisateur de la VM) :

Notez que le paramètre image (ligne 2) correspond au libellé de la colonne IMAGE dans la liste des Dockers actuellement en-train de tourner.

Lancer ensuite le conteneur en tapant la commande : docker-compose up -d. Normalement, un message Creating alainflou_change_1 s’affiche.
Taper dans la foulée la commande docker exec -ti alainflou_change_1 bash et vous voilà connecté sur votre conteneur (normalement et suivant comment votre VM est configurée, l’indicateur de commande de votre terminal doit passer de quelque chose comme intlangf@ubuntu2:~/docker/alainflou$ à quelque chose comme root@ad3f8ab33cea:/home/intlangf/change30/alainflou#).

Il est à noter que les commandes change seront à exécuter depuis le docker et non depuis l’instance Change installée dans la VM précédemment à l’aide de l’outil Cook.

De même, pour stopper une machine docker, lancer la commande docker-compose down -v.

Accèder au site en local via un navigateur

Récupérer les bonnes IPs et écrire les fichiers de configuration

L’URL pour accéder au site depuis un navigateur est (selon les données consignées dans notre fichier de configuration /alainflou/docker-compose.yml) alainflou.vmchange.rbs.fr. On le trouve ligne 5 - SERVER_NAME=alainflou.vmchange.rbs.fr.

Afin d’y accéder, il faut ajouter le site dans les hosts de la VM. Pour ce faire, taper un ifconfig et localiser l’IP de docker0 (la 2ème ligne normalement qui ressemble à :

Taper sudo vim /etc/hosts pour éditer les hosts et ajouter la ligne 172.17.0.1 alainflou.vmchange.rbs.fr.

Sous Windows, modifier les hosts également avec l’ip divulguée sous eth1, à savoir 192.168.56.110 alainflou.vmchange.rbs.fr.

Couper le serveur Apache de la VM et passer par un proxy dockerisé

Pour afficher notre projet Change dans un navigateur, il va falloir stopper le serveur Apache de notre VM et passer par un proxy dockerisé.

Sous /home/intlangf/Docker/</p>, créer un dossier <code>proxy et y placer un fichier docker-compose.yml (conf spécifique pour les projets Docker) dans lequel on écrira :

Il est possible que la création d’un dossier certs laissé vide dans /home/intlangf/Docker/proxy/ soit requise pour assurer le bon fonctionnement de notre proxy.

On peut ensuite vérifier que l’image Docker du proxy a bien été lancée en tapant la commande docker ps qui affichera l’ensemble des images qui sont actuellement lancées. A ce stade du tuto, vous devriez avoir au moins celles-ci :

A noter que l’image jwilder/nginx-proxy est téléchargée depuis le repo distant : https://hub.docker.com/explore/. Ce n’est pas nous qui nous occupons de la récupérer et de la stocker sur la VM comme celle de Change (vu tout en haut).

Couper Apache avec la commande sudo service apache2 stop. On y est presque… Encore un peu de config au niveau de Change et on pourra accéder à notre site en local depuis un navigateur.

Config au niveau de Change

Editer le fichier alainflou/config/project.intlangf.xml (où intlangf est votre propre user : ne modifiez pas le vrai fichier intlangf !!! – Pour connaître votre user, regardez dans le fichier profile présent à la racine de votre projet Change) et changer toutes les IPs en fonction de celle donnée pour docker0 lorsqu’on tape un ifconfig dans la VM (voir plus haut). Dans notre cas :

Dans notre conteneur dockerisé (accessible, pour rappel, en tapant la commande docker exec -ti alainflou_change_1 bash) taper les commandes :

Le site est désormais accessible en local dans un navigateur avec l’URL alainflou.vmchange.rbs.fr.

Résolution des problèmes et recommandations

disque plus visible dans l’explorateur, problèmes de droits d’écriture sur les fichiers du projet stockés sur la VM

Au cours du déploiement du projet, j’ai eu plusieurs fois des problèmes d’accès à ma VM sous Windows via Samba (disque plus visible dans l’explorateur, problèmes de droits d’écriture sur les fichiers du projet stockés sur la VM). Ne pas hésiter à redémarrer la VM dans ces cas là.

Le conteneur Change n’accède pas à la base de données stockée sur la VM

Il faut modifier les droits d’accès aux bases de données pour l’utilisateur admin-webedit.

Via la VM (et pas le conteneur), se connecter à mysql en root en tapant mysql -u root -p<mot_de_passe_de_votre_VM>.

Vérifier les droits : show grants for 'admin-webedit'@'%';

Taper à la suite les instructions :

  • GRANT USAGE ON *.* TO 'admin-webedit'@'%' IDENTIFIED BY 'admin-webedit';
  • FLUSH PRIVILEGES;
  • GRANT ALL ON *.* TO 'admin-webedit'@'%';

Le conteneur Change n’accède pas à la base de données stockée sur la VM (autre cas)

Se connecter au containter DB puis à mysql à l’intérieur de ce container:

Vous trouverez votre mot de passe root dans le fichier docker-compose.yml, sous:

Puis taper à la suite les instructions:

  • GRANT SUPER ON *.* TO 'admin-webedit'@'%' IDENTIFIED BY 'admin-webedit';
  • FLUSH PRIVILEGES;

Le conteneur Change n’accède pas à la base de données stockée sur la VM (autre cas)

  1. Vérifier la présence d’un fichier config/project.<user_profile_name>.xml à votre nom (intlangf pour moi, donc config/project.intlangf.xml) dans le repo git du projet.
  2. Checker la cohérence des hostnames et ports ouverts ci-dessous avec ce qui est déclaré dans le fichier docker-compose.yml du projet:

  3. Pusher le fichier config/project.intlangf.xml modifié dans la branche Git dont vous allez vous servir pour faire votre deploy avec cook.
  4. Lancez votre deploy en suivant les instructions du wiki.

Facultatif (parce que c’est probablement pas ça qui va résoudre le problème)

Faire $ docker ps pour obtenir la liste des containers.

Entrer dans le container qui concerne la base de données: $ docker exec -it <nom_du_container> bash.

Se logguer à mysql avec les infos retournées dans le message d’erreur obtenu, ici: $ mysql -u is-user -pis-password.

Faire un show databases; et vérifier la présence de la base de données retournée dans le message d’erreur (dans notre cas C4_aacall) et que son nom soit orthographié comme dans le fichier docker-compose.yml du projet. Sous:

ERROR 1049 (42000): Unknown database ‘C4_aacall’

Voir un point plus haut pour comparer le nom de la base de donnée dans le docker-compose.yml et dans le profile.intlangf.xml de Change (racine > dossier config).

ERROR: Get https://docker.netapsys.fr/v2/wfsolr/manifests/3.6: unknown: Authentication is required

Taper docker login docker.netapsys.fr puis renseigner username et password heldapp.

cat ~/.dockercfg

aufs au_opts_parse:1155:docker[ç_-]: unknow option dirperm1

Installer des extensions PHP supplémentaires dans un conteneur

J’ai une erreur de ce type en front : Fatal error: Class 'NumberFormatter' not found in /home/intlangf/change30/afflelou/modules/project/lib/services/PhysicalpropertytypeService.class.php on line 102. Comme expliqué ici, il faut installer une extension PHP intl.

Puis redémarer la VM et relancer le conteneur Docker.

En front: 503 Service Temporarily Unavailable nginx

Attention à ce qui est déclaré dans le fichier hosts de Windows. Le problème venait du fait que l’URL d’accès était déclaré&e à plusieurs reprises, mais avec une IP différente.

Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use

Une instance de mysql tourne sur la VM. Pour la stopper, taper la commande :

ERROR: for nginx-proxy Cannot start service nginx-proxy

Erreur complète :

Une instance d’Apache2 tourne sur la VM. Pour la stopper, taper la commande :

Site inaccessible (ERR_CONNECTION_REFUSED)

Vérifier que le conteneur proxy est lancé et qu’il tourne normalement.

Disparition de la base de données

Dans le dossier du projet (à la racine), pour vérifier la présence d’une base de données:

sudo ls -alh /var/lib/docker/volumes/euroairport_mysql-data/_data/euroairport

ERROR: {« message »: »Get https://docker.netapsys.fr/v2/wfsolr/manifests/3.6: unauthorized: BAD_CREDENTIAL »}

Lorsque je lance un docker-compose up -d et que j’ai ce type de message d’erreur:


intlangf@ubuntu:~/docker/euroairport$ docker-compose up -d
Pulling solr (docker.netapsys.fr/wfsolr:3.6)...
ERROR: {"message":"Get https://docker.netapsys.fr/v2/wfsolr/manifests/3.6: unauthorized: BAD_CREDENTIAL"}

Taper :

docker login docker.netapsys.fr

Et renseigner ses login/mdp.

[Docker] Les bases de l’utilisation de Docker

Lancer son Docker

A la racine du répertoire qui contient votre Docker :

Pour continuer à utiliser le même shell, ajouter un caractère & à la fin de la commande pour lancer le script en tâche de fond :

Si vous obtenez un message d’erreur de type : FATA[0000] Error response from daemon: Conflict. The name « [nom_de_votre_projet] » is already in use by container 0d615cabbd75. You have to delete (or rename) that container to be able to reuse that name., il faut supprimer le container 0d615cabbd75 en tapant :

Se connecter en shell à son conteneur

Une fois le dock lancé, dans un autre terminal :

Supprimer un volume Docker

Source, documentation officielle: docker volume rm

Depuis le terminal de votre VM : docker volume ls.

Pour supprimer un volume Docker : docker volume rm <nom_de_la_base>.

Supprimer tous les conteneurs persistants (exited containers)

Error response from daemon: Unable to remove volume, volume still in use:

Si, en voulant supprimer une base, vous obtenez un message de type Error response from daemon: Unable to remove volume, volume still in use: remove gpvmagento_mysql-data: volume is in use - [a2d529aed4f462276ac45e58849e983f26a72a9f51e2925603215813dbfc996a], faites un docker ps -a pour obtenir la liste des containers encore montés. Exemple:

Taper docker rm <ID_du_container_à_supprimer> pour supprimer le container.