397 liens privés
Building good, clean Docker container images is a bit of an art, and there is a lotof conflicting advice out there ab...
Soit un petit script maven.sh pour lancer un maven jetable avec persistance du cache, dans le répertoire courant, et un client docker dedans bindé sur le host (pratique pour tester docker-maven-plugin https://github.com/spotify/docker-maven-plugin)
#!/bin/bash
docker run --rm -ti -v ${PWD}:/srv -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/.m2:/root/.m2 jeekajoo/maven-dind $@
Appelé sans argument il lance un bash intéractif, et sinon on peut l'utiliser comme cela
$ maven.sh mvn --version
$ maven.sh mvn clean docker:removeImage package docker:build docker:push
doc maven: https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
LaTeX c'est bien, mais il y a une grosse pelletée de paquets à installer pour commencer à bosser avec. Du coup, perso, j'utilise docker qui me permet de récupérer cette base de travail très rapidement. C'est l'avantage du COW (https://jeekajoo.eu/links/?VmYuDA).
Mettons que vous souhaitez convertir CV.tex en CV.pdf, voici le one-liner:
"""
$ docker run --rm -i --user="$(id -u):$(id -g)" --net=none -v $PWD:/data jeekajoo/latex /bin/sh -c "pdflatex CV.tex && pdflatex CV.tex"
"""
--rm: On souhaite supprimer le container après son lancement
--user="$(id -u):$(id -g)": Préservation de l'utilisateur courant
-v $PWD:/data : On monte le répertoire courant dans container:/data qui est notamment le répertoire de travail (https://github.com/jeekajoo/latex-docker/blob/master/Dockerfile#L10). Votre fichier à convertir doit être présent dans le répertoire courant.
jeekajoo/latex: Nom de l'image à lancer. Elle est présente sur dockerhub qui est le registry par défaut utilisé par docker.
/bin/sh -c "pdflatex CV.tex && pdflatex CV.tex": La commande à lancer. Elle fait appel au programme "pdflatex"
Si l'image n'est pas présente sur votre systeme, docker se chargera de faire le pull. Voici le console output de la conversion: http://paste.jeekajoo.eu/?270cfd356e051641#tJxdS18SZ/nmushG1w3k4hoXzuL+UdP7CGLrj0C808o=
Une fois que j'ai terminé de travailler, je peux libérer de l'espace disque et virer l'image (jeekajoo/latex) qui pèse tout de même 3.946 GB.
"""
$ docker rmi jeekajoo/latex
Untagged: jeekajoo/latex:latest
Deleted: 585b88a9035b5efb9bcaca5338612361fb353290805f3fa5ab606f1e32183747
Deleted: d312f2566aac20e90a13cda82b4989cebb295d977e8a351b0b8b2202a69db1c7
Deleted: 5ae54909a616dba9fe1dd6a877a41829298c77c08ef3bc9fa7676f3504c23529
Deleted: bf514599bad5b0fae754f6b9fcde2ad522afba26529c189eb042fa47d4684197
Deleted: 6238f8e56117da5ad074a90699d3cbaddce4e7f71c0b6dede5d8aed2f01aa901
Deleted: 960c3dc97b266ffcdb2560ddc01338470713b12f4cb6c48afd56a2c8ba4764b1
Deleted: e53ad46635f41b1b3f5ebf512d0941a75eb2da036dfb794e2289122d06cf66c2
Deleted: 38b7a359008411c4aa72dd1f370dc9321f661dd4bb5fbee79f4a8007e53afd29
Deleted: f05335696a9b8807d5e4d4d4179f9676b52c2bd71ff6d2afaf802276b96679b8
Deleted: 26b82ec3311dc20e9536447bbe431f30de4b9b6dce691758890422e92ad66569
"""
Sources de l'image docker: https://github.com/jeekajoo/latex-docker. Notez qu'on y installe notamment le fameux paquet "texlive-full".
Dans cette vidéo, Jérôme Petazzoni explique le Copy-On-Write au niveau mémoire en prenant l'exemple de redis. Il approfondit ensuite le COW disque, en faisant remarquer, qu'à l'origine, on s'est intéressé à cette stratégie d'optimisation dans le but d'économiser de l'espace disque. C'est ce qu'on appele le "thin provisioning" (https://en.wikipedia.org/wiki/Thin_provisioning).
Le COW disque qu'utilise docker est intéressant du point de vue de la rapidité avec laquelle on va pouvoir lancer un container basé sur une image, quelque soit la taille de cette dernière. Sans lui, le succès de docker n'existerait pas.
Jérôme détaille ensuite le fonctionnement des différents systèmes de fichier et de leur storage driver docker associé: aufs, devicemapper, btrfs, overlayfs et vfs. Il liste des avantages/inconvénients de chacun en production, et il donne également quelques infos pour les troubleshooter.
L'orateur possède de très bonnes capacités à faire passer des connaissances sur des concepts qui sont loins d'être faciles à aborder. Respect à toi Jérôme!
Bon petit plugin jenkins pour construire des images docker et les pousser sur un registry.
"""
Let's take a step back here. Do you really want Docker-in-Docker? Or do you just want to be able to run Docker (specifically: build, run, sometimes push containers and images) from your CI system, while this CI system itself is in a container?
I'm going to bet that most people want the latter. All you want is a solution so that your CI system like Jenkins can start containers.
"""
bonnes pratiques pour les entrypoints docker
"""
In the following post, we’re going to take a tour of two of the leading Docker orchestration frameworks out there: ECS (Elastic Container Service) by AWS, and Kubernetes, an orchestration framework which began at Google and became open source later.
"""
We got a winner.
Un article qui tape juste.
Presentation de Borg, cluster de conteneur conçu/utilisé par google en interne et utilisant lmctfy (https://github.com/google/lmctfy) pour le moteur de conteneur. Ils utilisent Borg sur du bare-metal. D'après https://speakerdeck.com/jbeda/containers-at-scale, ils lancent 2 milliards de conteneurs par semaine.
De Borg, ils ont pondu Kubernetes qui est open-source et qui est basé cette fois-ci sur Docker.
Il propose d'ailleurs un Kubernetes intégré, avec "Google Container Engine". Ce dernier tourne sur des VM Google Cloud Engine, dont l'hyperviseur est KVM.
Rien ne dit s'ils vont utiliser Kubernetes pour leur propres besoin... rien ne dit non plus quelles sont les différences à part le moteur de conteneur, car Borg n'est pas open-source.
Cette présentation a eu lieu lors de DotScale 2015 (http://2015.dotscale.io/).
"""
Docker managed the unikernels just like Linux containers but without needing to deploy a traditional operating system!
"""
Meet unikernels, meet the future.
"Nousmotards" explique son utilisation de git + jenkins + ansible + packer + docker + docker registry + consul + consul template + haproxy.
/!\ Je préfère préciser que je ne soutiens en aucun cas leur pauvre conception de la femme. Ni les motos d'ailleurs /!\
"""
In this article, we will review how Docker container achieves its security and isolation utilizing native container features of Linux such as namespaces, cgroups, capabilities, etc.
"""
Un peu de révision grâce à cet article dûment référencé.
Lire aussi "Docker: Differences between Container and Full VM" http://xmlandmore.blogspot.fr/2015/11/docker-difference-between-container-and.html
PS: ne pas se fier au titre du blog :)
"""
bane - Custom AppArmor profile generator for docker containers
"""
Générateur de profil AppArmor pour contraindre les permissions, par exemple d'éxécution ou d'écriture, à l'intérieur des containers.
AppArmor agit au niveau de ce que l'on appele les "capabilities" [1] au niveau kernel donc. Comme le host et les containers partagent le même, le profil est chargé niveau host.
Il est automatiquement parsé (syntax check) et sauvegardé dans /etc/apparmor.d/containers/.
Démo (vidéo dégueulasse nécessitant flash) par l'auteure de cet outil, Jessie, qui est core dev chez Docker: https://www.periscope.tv/w/1djGXbgzbvRxZ
Le plus simple est de lire le README.md.
"""
Docker’s default storage driver on most Ubuntu installs is AUFS.
Don’t use it. Use Overlay instead. Here’s why.
"""
A ne pas confondre avec Overlay Networks (shaarlink précédent).
Explication de la nouvelle couche réseau apparue dans docker 1.9.
En complément si vous utilisez swarm, voici un article qui détaille 'Overlay Networks' qui est le driver réseau par défaut https://medium.com/on-docker/docker-overlay-networks-that-was-easy-8f24baebb698
Indispensable.
Oh, et si vous voulez comprendre la différence entre COPY et ADD, et savoir lequel il vaut mieux utiliser c'est dans cette même page http://docs.docker.com/engine/articles/dockerfile_best-practices/#add-or-copy
Kubernetes permet de faire des rolling updates, pour passer d'une version à une autre d'un code, sans interruption.
Cela consiste à remplacer un ensemble de conteneur d'une version X par une version Y, et ce de façon fluide. Ils s'occupent du connection draining. On peut également annuler le rollout et faire des rollbacks. C'est d'ailleurs la grande force de ce type d'infra immutable: pas de surprise. L'appli est packagée dans un tout : une image. Cette image aura été testé en amont et on sait exactement l'état du système qu'on souhaite déployer.
Magnifique.
Exemple de code: https://github.com/kubernetes/kubernetes/tree/release-1.0/docs/user-guide/update-demo
Démo vidéo (j'ai calé la vidéo au bon moment): https://www.youtube.com/watch?v=Bcs-inRnLDc&&t=4769 . La vidéo entière vaut vraiment le détour.
"""
Kubernetes includes a cool feature called namespaces, which enable you to manage different environments within the same cluster. For example, you can have different test and staging environments in the same cluster of machines, potentially saving resources. You can also run different types of server, batch, or other jobs in the same cluster without worrying about them affecting each other.
"""
http://kubernetes.io/v1.0/docs/user-guide/namespaces.html