Outils pour utilisateurs

Outils du site


issue107:c_c

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue107:c_c [2016/04/16 18:03] erlevoissue107:c_c [2016/04/18 09:06] (Version actuelle) auntiee
Ligne 1: Ligne 1:
 **After having set up my intel NUC (see last month’s article for more information), I started using NGINX and Apache to serve my in-progress web projects. However, setting up various virtual hosts, managing it, and a complicated series of dependencies, had me abandon that plan relatively quickly. Instead, I switched to Vagrant for a few projects. Unfortunately, while setting up a Vagrant system is pretty quick, it’s also heavier than it needs to be resource-wise. Instead, I looked into Docker. This month, I’d like to cover what Docker is, and how I’ve set it up to manage my various web projects.** **After having set up my intel NUC (see last month’s article for more information), I started using NGINX and Apache to serve my in-progress web projects. However, setting up various virtual hosts, managing it, and a complicated series of dependencies, had me abandon that plan relatively quickly. Instead, I switched to Vagrant for a few projects. Unfortunately, while setting up a Vagrant system is pretty quick, it’s also heavier than it needs to be resource-wise. Instead, I looked into Docker. This month, I’d like to cover what Docker is, and how I’ve set it up to manage my various web projects.**
  
-Après avoir installé mon NUC intel (pour plus d'information, voir l'article du mois dernier), j'ai commencé à utiliser NGINX et Apache comme serveur de mes projets internet en développement. Toutefois, installer différents hôtes virtuelsles gérer avec un ensemble de dépendances compliquées m'ont assez rapidement incité à abandonner cette méthode. À la place, je suis passé à Vagrant pour quelques projets. Malheureusement, alors que l'installation d'un système Vagrant est assez rapide, il est bien plus lourd que nécessaire en ce qui concerne les ressources. À la place, j'ai considéré Docker. Ce mois-ci j'aimerais traiter de ce qu'est Dockeret comment je l'ai paramétré pour gérer mes différents projets web.+Après avoir installé mon NUC Intel (pour plus d'informations, voir l'article du mois dernier), j'ai commencé à utiliser NGINX et Apache comme serveur de mes projets Internet en cours de développement. Toutefois, installer différents hôtes virtuels et les gérer avec un ensemble de dépendances compliquéesm'ont assez rapidement incité à abandonner cette méthode. À la place, je suis passé à Vagrant pour quelques projets. Malheureusement, alors que l'installation d'un système Vagrant est assez rapide, il est bien plus lourd que nécessaire en ce qui concerne les ressources. J'ai donc envisagé Docker. Ce mois-ci, je vais parler de ce qu'est Docker et de comment je l'ai paramétré pour gérer mes différents projets Web.
  
 **What is Docker? **What is Docker?
Ligne 13: Ligne 13:
 Qu'est-ce que Docker ? Qu'est-ce que Docker ?
  
-Docker est une façon de créer des conteneurs virtualisés pour faire tourner des logiciels et des services. La grande différence entre Docker et Vagrant est que Docker partage la base de la virtualisation avec tous les conteneurs. Ainsi, alors que Vagrant crée une  véritable VM (machine virtuelle) indépendante, Docker crée à la place une VM qui utilise un noyau commun partagé par toutes les autres VM et basé sur LXC. +Docker est une façon de créer des conteneurs virtualisés pour faire tourner des logiciels et des services. La grande différence entre Docker et Vagrant est que Docker partage la base de la virtualisation avec tous les conteneurs. Ainsi, alors que Vagrant crée une véritable VM (machine virtuelle) indépendante, Docker crée à la place une VM qui utilise un noyau commun partagé par toutes les autres VM et basé sur LXC. 
-Alors qu'il est difficile d'expliquer la différence entre Vagrant et Docker en termes simples (l'essentiel des différences réside dans les détails), on peut relever certaine choses. Par exemple que Docker démarre généralement plus rapidement et consomme moins de ressources (puisqu'il partage certain noyaux des invités). + 
-Il doit fonctionner sur une machine Linux mais Docker fournit des outils pour l'installer facilement sur Windows ou Mac (en utilisant une machine virtuelle de base qui fournit le noyau Linux).+Alors qu'il est difficile d'expliquer la différence entre Vagrant et Docker en termes simples (l'essentiel des différences réside dans les détails), on peut relever certaines choses. Par exempleque Docker démarre généralement plus rapidement et consomme moins de ressources (puisqu'il partage le noyau de l'hôte). 
 +Il doit fonctionner sur une machine Linuxmais Docker fournit des outils pour s'installer facilement sous Windows ou Mac (en utilisant une machine virtuelle de base qui fournit le noyau Linux).
  
  
Ligne 31: Ligne 32:
 Installation Installation
  
-Docker peut être affecté à différents réseaux virtuels, « exposer » des ports, faire tourner des images spécifiques et peut partager des fichiers ou dossiers avec l'hôte et les invités. Ma configuration actuelle est : +Docker peut être affecté à différents réseaux virtuels, « exposer » des ports, faire tourner des images spécifiqueset partager des fichiers ou dossiers avec l'hôte et les invités. Ma configuration actuelle est : 
-un réseau privé privé (appelé « webnet ») +• Un réseau privé (appelé « webnet »). 
-un conteneur Docker utilisant HAProxy et « exposant » le port 80. Il inclut également une IP statique sur webnet.  +• Un conteneur Docker utilisant HAProxy et « exposant » le port 80. Il inclut également une IP statique sur webnet.  
-De nombreux conteneurs Docker utilisant l'image nickistre/Ubuntu-lamp et partageant avec les invités un dossier hôte à /var/www/html (le dossier d'Apache par défaut). Chacun d'eux dispose d'une IP statique sur le réseau webnet mais n'expose aucun port (puisque les communications passent par HAProxy). +• De nombreux conteneurs Docker utilisant l'image nickistre/Ubuntu-lamp et partageant avec les invités un dossier hôte à /var/www/html (le dossier d'Apache par défaut). Chacun d'eux dispose d'une IP statique sur le réseau webnetmais n'expose aucun port (puisque les communications passent par HAProxy). 
-J'ai installé un dnsmasq avec une entrée DNS attrape-tout pour tous les sousdomaines de home.lan. Ils sont ensuite redirigés vers la machine locale au port 80 (qui à son tour le passe au HAProxy de la machine Docker). HAProxy vérifie alors de quel domaine il s'agit et (s'il est configuréle renvoie vers l'IP statique du conteneur Docker correspondant. + 
-Pour illustrer (pelican est un générateur de sites statiques) : pelican.home.lan pointe vers 192.168.1.16 (machine locale) au travers  de dnmasq. Une fois que la requête arrive, HAProxy vérifie le fichier de configuration et envoie la requête à 172.18.0.4:80 (l'instance de Docker dans laquelle tourne le site pelican). Si HAProxy ne connaît pas le domaine, il s'arrête simplement à 172.18.0.2 (la machine du HAProxy).+J'ai installé un dnsmasq avec une entrée DNS attrape-tout pour tous les sous-domaines de home.lan. Ils sont ensuite redirigés vers la machine locale au port 80 (qui à son tour le passe au HAProxy de la machine Docker). HAProxy vérifie alors de quel domaine il s'agit ets'il est configuréle renvoie vers l'IP statique du conteneur Docker correspondant. 
 + 
 +Pour illustrer (pelican est un générateur de sites statiques) : pelican.home.lan pointe vers 192.168.1.16 (machine locale) au travers de dnmasq. Une fois que la requête arrive, HAProxy vérifie le fichier de configuration et envoie la requête à 172.18.0.4:80 (l'instance de Docker dans laquelle tourne le site pelican). Si HAProxy ne connaît pas le domaine, il s'arrête simplement à 172.18.0.2 (la machine du HAProxy).
  
 **What first? **What first?
Ligne 48: Ligne 51:
 The reason why we need the custom network, is simply because the default networks from docker don’t allow assigning static IPs.** The reason why we need the custom network, is simply because the default networks from docker don’t allow assigning static IPs.**
  
-Par quoi commencer ?+Par où commencer ?
  
 Il faut d'abord créer le réseau que l'on souhaite utiliser. Il faut d'abord créer le réseau que l'on souhaite utiliser.
 +
 docker network create --subnet=172.18.0.0/16 webnet docker network create --subnet=172.18.0.0/16 webnet
-Cela crée un nouveau réseau appelé webnet avec des adresses IP allant de 172.18.0.0 jusqu'à 172.168.255.254. Je ne vais pas entrer dans les particularités du format utilisé ici. Si vous voulez utiliser une plage différente d'IP, modifiez simplement la partie 172.18 – il est peu probable que vous ayez jamais besoin de plus de 65534 adresses possible pour des conteneurs Docker. J'ai choisi 172.18 parce que la plage par défaut des IP docker (qui est allouée dynamiquement dans le réseau par défaut) est 172.17. Ainsi, je serai toujours capable de dire que l'IP correspond à Docker. Ne choisissez pas la même plage d'IP que votre réseau réel (typiquement 192.168).+ 
 +Cela crée un nouveau réseau appelé webnet avec des adresses IP allant de 172.18.0.0 jusqu'à 172.168.255.254. Je ne vais pas entrer dans les particularités du format utilisé ici. Si vous voulez utiliser une plage différente d'IP, modifiez simplement la partie 172.18 – il est peu probable que vous ayez jamais besoin de plus de 65 534 adresses possibles pour des conteneurs Docker. J'ai choisi 172.18 parce que la plage par défaut des IP docker (qui est allouée dynamiquement dans le réseau par défaut) est 172.17. Ainsi, je serai toujours capable de dire que l'IP correspond à Docker. Ne choisissez pas la même plage d'IP que votre réseau réel (typiquement 192.168). 
 La raison pour laquelle nous avons besoin d'un réseau particulier vient simplement du fait que le réseau par défaut de Docker ne permet pas  d'affecter des IP statiques. La raison pour laquelle nous avons besoin d'un réseau particulier vient simplement du fait que le réseau par défaut de Docker ne permet pas  d'affecter des IP statiques.
  
Ligne 72: Ligne 78:
 Comment s'y prendre pour créer mes machines ? Comment s'y prendre pour créer mes machines ?
  
-La commande standard de Docker sera en gros toujours la même.+La commande standard de Docker sera toujours à peu près la même. 
 docker run -d -v {SHARE} --net webnet --ip 172.18.0.X --name {NAME} {IMAGE} docker run -d -v {SHARE} --net webnet --ip 172.18.0.X --name {NAME} {IMAGE}
 +
 Ce qu'elle fait : Ce qu'elle fait :
-« docker run » crée un conteneur +• « docker run » crée un conteneur. 
--d détache le conteneur créé (sinon toutes les sorties du conteneur seront automatiquement envoyées vers le terminal et la fermeture du terminal va fermer l'instance de docker). +• -d détache le conteneur créé (sinon toutes les sorties du conteneur seront automatiquement envoyées vers le terminal et la fermeture du terminal fermera l'instance de docker). 
--v{SHARE} donne l'adresse du dossier partagé sous la forme /local/path:/remote/path. Par exemple : -v/home/lswest/web/pelican:/var/www/html +• -v{SHARE} donne l'adresse du dossier partagé sous la forme /local/path:/remote/path. Par exemple : -v /home/lswest/web/pelican:/var/www/html. 
---net webnet configure le réseau que doit utiliser le conteneur. +• --net webnet configure le réseau que doit utiliser le conteneur. 
---ip 172.18.0.X il s'agit de l'IP statique que je donne. J'aime les avoir en ordre basique de façon à rendre plus facile l'ajout d'entrée au HAProxy. Si vous choisissez une  plage différente dans cette étape, modifiez en fonction+• --ip 172.18.0.X il s'agit de l'IP statique que je donne. J'aime les avoir bien organisés de façon à rendre plus facile l'ajout d'entrées au HAProxy. Si vous choisissez une plage différente dans cette étape, adaptez en conséquence
---name{name} c'est le nom sous lequel l'instance du docker sera reconnue. Par exemple –namepelican. On peut l'utiliser dans les commandes start/stop/restart/rm et il apparaît dans la liste des docker ps. +• --name{name} c'est le nom sous lequel l'instance du docker sera reconnue. Par exemple -–namepelican. On peut l'utiliser dans les commandes start/stop/restart/rm et il apparaît dans la liste de docker ps. 
-{IMAGE} il s'agit de l'image à utiliser comme base du conteneur. J'aime l'image nickistre/Ubuntu-lamp qui contient Ubuntu 14.04 et LAMP. Il existe d'autres images (telles que ArchLinux) mais, puisque mes serveurs Digital Ocean tournent de base sous Ubuntu, j'essaie de rester aussi proche que possible de l'environnement réel. L'image du HAProxy que j'utilise est HAProxy:1.5 (l'image officielle de HAProxy, version 1.5)+• {IMAGE} il s'agit de l'image à utiliser comme base du conteneur. J'aime l'image nickistre/Ubuntu-lamp qui contient Ubuntu 14.04 et LAMP. Il existe d'autres images (telles que ArchLinux) mais, puisque mes serveurs Digital Ocean tournent habituellement sous Ubuntu, j'essaie de rester aussi proche que possible de l'environnement réel. L'image du HAProxy que j'utilise est HAProxy:1.5 (l'image officielle de HAProxy, version 1.5)
  
 **In the case of the HAProxy image (which should be created first), the command will look like this: **In the case of the HAProxy image (which should be created first), the command will look like this:
Ligne 91: Ligne 99:
 • -v - in the command above, I just like the actual HAProxy.cfg file into the location for the config for HAProxy. NOTE: editing this file with some text editors (such as vim) will result in HAProxy not accepting the changes. This is due to the inode changing. To fix, just restart the machine with ‘docker restart proxy’. Nano appears to avoid this problem.** • -v - in the command above, I just like the actual HAProxy.cfg file into the location for the config for HAProxy. NOTE: editing this file with some text editors (such as vim) will result in HAProxy not accepting the changes. This is due to the inode changing. To fix, just restart the machine with ‘docker restart proxy’. Nano appears to avoid this problem.**
  
-Dans le cas de l'image du HAProxy (qui doit être créée en premier), la commande ressemblera à cela :+Dans le cas de l'image du HAProxy (qui devrait être créée en premier), la commande ressemblera à cela : 
 config/haproxy/haproxy:/usr/local/etc/haproxy/haproxy.cfg:ro --net webnet –ip 172.18.0.2 -p 80:80  --name proxy haproxy:1.5 config/haproxy/haproxy:/usr/local/etc/haproxy/haproxy.cfg:ro --net webnet –ip 172.18.0.2 -p 80:80  --name proxy haproxy:1.5
 +
 Différences principales : Différences principales :
--p 80:80 expose le port invité 80 au port hôte 80 (donc en allant à l'adresse 172.18.0.2 à l'aide d'un navigateur, on devrait récupérer une erreur 503 du HAProxy+• -p 80:80 expose le port invité 80 au port hôte 80 (donc en allant à l'adresse 172.18.0.2 à l'aide d'un navigateur, HAProxy devrait renvoyer une erreur 503) 
--v dans la commande ci-dessus, j'aime bien avoir le fichier de configuration HAProxy original à l'endroit prévu pour la configuration du HAProxy. NOTE : si vous éditez ce fichier avec un éditeur de texte quelconque (tel que vim), HAProxy n'acceptera pas les changements. C'est dû à un changement d'inode (fichier d'index : ndt). Pour corriger, redémarrer simplement la machine avec « docker restart proxy ». Il semblerait que l'usage de Nano évite ce problème.+• -v dans la commande ci-dessus, j'aime bien avoir le fichier de configuration HAProxy original à l'endroit prévu pour la configuration du HAProxy. NOTE : si vous éditez ce fichier avec un éditeur de texte quelconque (tel que vim), HAProxy n'acceptera pas les changements. C'est dû à un changement d'inode [Ndt : fichier d'index]. Pour corriger, redémarrer simplement la machine avec « docker restart proxy ». Il semblerait que l'usage de Nano évite ce problème.
  
 **Autostarting **Autostarting
Ligne 106: Ligne 116:
  
 Démarrage automatique Démarrage automatique
-Si vous voulez que les conteneurs Docker soient toujours en fonction (après un crash, un redémarrage du système ou  de session), vous pouvez ajouter –restart=always à la commande run. Ce doit être fait en créant le conteneur. Donc, si vous en avez déjà créé un, vous devez l'arrêter, l'effacer (rm) et le re créer.+ 
 +Si vous voulez que les conteneurs Docker soient toujours en fonction (après un crash, un redémarrage du système ou de session), vous pouvez ajouter –restart=always à la commande run. Ceci doit être fait à la création du conteneur. Donc, si vous en avez déjà créé un, vous devez l'arrêter, l'effacer (rm) et le recréer.
  
 Cela ne fonctionne-t-il que pour le port 80 ? Cela ne fonctionne-t-il que pour le port 80 ?
-Les réglages du HAProxy ne devraient jamais (pendant le fonctionnement de Docker). Toutefois, si vous voulez pointer un domaine particulier, par exemple une application NodeJS tournant sur le 8000, réglez simplement l'adresse IP dans la configuration du HAProxy (voir ci-dessous). Par exemple, 172.18.0.6:8000. 
  
-HAProxy Config+Les réglages du HAProxy ne devraient jamais changer (pendant le fonctionnement de Docker). Toutefois, si vous voulez pointer un domaine particulier, par exemple, une application NodeJS tournant sur le 8000, réglez simplement l'adresse IP dans la configuration du HAProxy (voir ci-dessous). Par exemple, 172.18.0.6:8000. 
 + 
 +**HAProxy Config
  
 I’ve saved an example of my configuration here: http://pastebin.com/1M5DMkF3  I’ve saved an example of my configuration here: http://pastebin.com/1M5DMkF3 
  
-Basically, adding new containers is as simple as copying the acl line (#33), the use_backend line (#36), and the backend block (#39-43). Be sure to keep increasing the index numbers (host_test1 would become host_test2, etc.). And give each backend a unique name (and adjust the IP!).+Basically, adding new containers is as simple as copying the acl line (#33), the use_backend line (#36), and the backend block (#39-43). Be sure to keep increasing the index numbers (host_test1 would become host_test2, etc.). And give each backend a unique name (and adjust the IP!).**
  
-How do I make a wildcard dnsmasq entry?+Configuration du HAProxy
  
-You can add a single line to your dnsmasq.conf file (typically found at /etc/dnsmasq.conf). It looks like this:+J'ai sauvegardé un exemple de ma configuration ici : http://pastebin.com/1M5DMkF3 
  
-address=/home.lan/192.168.1.16+Pratiquement, pour ajouter de nouveaux conteneurs on n'a qu'à copier la ligne acl (#33), la ligne use_backend (#36) et le bloc backend (#39-43)Assurez-vous de l'incrémentation des numéros d'étiquettes (host-test1 devient host-test2, etc.)Et donnez à chaque backend un nom unique (et réglez bien l'IP !).
  
-Replace the IP with your own, and the home.lan portion with the domain you’d like (minus any subdomains - so instead of www.google.com, it would be google.com). Note, also, that using real domain here isn’t a good idea, as any requests will be directed to your local machine. So if using google, you’ll never reach the Google homepage again. Hence why I use home.lan.+**How do I make wildcard dnsmasq entry?
  
-I hope this article was helpful to anyone wondering about Docker, who has been looking for better way to host local projects while in developmentIf you have any questions, or want to share a docker trick of your own, feel free to email me at lswest34+fcm@gmail.com.+You can add single line to your dnsmasq.conf file (typically found at /etc/dnsmasq.conf)It looks like this:
  
 +address=/home.lan/192.168.1.16
  
 +Replace the IP with your own, and the home.lan portion with the domain you’d like (minus any subdomains - so instead of www.google.com, it would be google.com). Note, also, that using a real domain here isn’t a good idea, as any requests will be directed to your local machine. So if using google, you’ll never reach the Google homepage again. Hence why I use home.lan.**
  
 +Comment faire une entrée générique pour DNSMASQ ?
  
 +Vous pouvez ajouter une simple ligne à votre fichier dnsmasq.conf (que vous trouverez normalement à /etc/dnmasq.conf). Ça ressemble à ça : 
  
 +address=/home.lan/192.168.1.16
  
 +Remplacez l'IP par la vôtre et la partie home.lan avec le domaine de votre choix (sans les sous-domaines, ainsi, à la place de www.google.com, il faudra mettre google.com). Notez également qu'il est préférable de ne pas utiliser ici un nom de domaine existant car toute requête sera redirigée vers votre machine locale. Ainsi, si vous utilisez google, il ne vous sera plus possible d'atteindre la page d'accueil de Google. C'est pour cela que j'utilise home.lan.
  
 +**I hope this article was helpful to anyone wondering about Docker, who has been looking for a better way to host local projects while in development. If you have any questions, or want to share a docker trick of your own, feel free to email me at lswest34+fcm@gmail.com.**
  
 +J'espère que cet article sera utile à ceux qui veulent en savoir un peu plus sur Docker ou ceux qui cherchent une meilleure façon d'héberger des projets locaux en phase de développement. Pour quelque question que ce soit, ou si vous voulez partager vos propres astuces de Docker, n'hésitez pas à m'envoyer un courriel à : lswest34+fcm@gmail.com.
  
  
 +**Further Reading
  
 +https://en.wikipedia.org/wiki/LXC
 +LXC
  
 +https://www.quora.com/What-is-the-difference-between-Docker-and-Vagrant-When-should-you-use-each-one
 +Docker VS Vagrant
  
-Further Reading+https://www.docker.com/enterprise 
 +Docker** 
 + 
 +Pour aller plus loin
  
 https://en.wikipedia.org/wiki/LXC https://en.wikipedia.org/wiki/LXC
Ligne 145: Ligne 173:
  
 https://www.quora.com/What-is-the-difference-between-Docker-and-Vagrant-When-should-you-use-each-one https://www.quora.com/What-is-the-difference-between-Docker-and-Vagrant-When-should-you-use-each-one
-Docker VS Vagrant+Comparaison entre Docker et Vagrant
  
 https://www.docker.com/enterprise https://www.docker.com/enterprise
 Docker Docker
  
issue107/c_c.1460822582.txt.gz · Dernière modification : 2016/04/16 18:03 de erlevo