18 octobre 2014

Upgrade to Docker 1.3.0

Après une chouette journée passé à bdx.io (je laisse le soin à d'autres de vous faire un résumé, parce que je suis  une grosse faignasse), retour à Rennes avec 6h de transport en TGV.

Pendant que Laurent bricole son nouveau jouet je récupère l'installer de Docker 1.3.0 tout juste publié (merci la 4G en gare de Bordeaux).

Parmi les nouveautés de Docker 1.3.0, la sécurisation de la communication entre un client et le démon docker est un point majeur. 

Jusqu'ici, pour parler à un démon distant on avait une simple interface HTTP, sans aucune sécurisation pas même un login/password. Pratique sur un poste de développement mais un peu léger pour vos serveurs de production :P

Docker 1.3.0 corrige ce défaut en utilisant une authentification par certificat client sur SSL.


Au passage, le port par défaut du démon docker change en 2376 (jusqu'ici 2375). Si vous installez cette version pensez donc à mettre à jour votre .bash_profile avec les variables d'environnement :

DOCKER_HOST=tcp://boot2docker:2376
DOCKER_TLS_VERIFY=1
FORWARD_DOCKER_PORTS=1
DOCKER_CERT_PATH=/Users/nicolas/.boot2docker/certs/boot2docker-vm

boot2docker up vous l'indique également, mais si vous êtes comme moi vous ne faites pas trop attention à ce genre de message :-\

J'ai ensuite voulu faire mumuse avec l'API client, sans passer par le client docker natif. 

J'ai rapidement renoncé à mettre à niveau docker-java car je n'y connais rien en jersey ni à sa configuration avancée pour assurer ce type d'authentification sur https (et sans Net entre Bordeaux et Paris c'est pas facile à deviner)

La documentation officielle suggère une commande curl utilisant les clés générées automatiquement pour nous par l'installateur boot2docker. Et là "oups". 

➜ ~ curl --insecure --cert ~/.boot2docker/certs/boot2docker-vm/cert.pem --key ~/.boot2docker/certs/boot2docker-vm/key.pem https://boot2docker:2376/images/json
curl: (35) Unknown SSL protocol error in connection to boot2docker:-9825

Comme la version OSX de curl est ancienne est un peu customisée à la sauce Apple, j'ai aussi essayé avec la version homebrew ... qui ne marche pas non plus mais par pour la même raison !

➜ ~ /usr/local/Cellar/curl/7.38.0/bin/curl --insecure --cert ~/.boot2docker/certs/boot2docker-vm/cert.pem --key ~/.boot2docker/certs/boot2docker-vm/key.pem https://boot2docker:2376/images/json
curl: (58) SSL: Can't load the certificate "/Users/nicolas/.boot2docker/certs/boot2docker-vm/cert.pem" and its private key: OSStatus -25299

J'ai pu vérifier que les certificats sont corrects, car wget - lui - s'en sort sans soucis

➜ ~ wget --no-check-certificate --certificate=~/.boot2docker/certs/boot2docker-vm/cert.pem --private-key=~/.boot2docker/certs/boot2docker-vm/key.pem https://boot2docker:2376/images/json -O - -q
[{"Created":1413235207,"Id":"9cbaf023786cd79dfba46f49d9a04b2fe9f18017db1257094d1d4cbe7ccb00f1","ParentId":"03db2b23cf0332af20d600e1e0306a629235f4d3b2cfcab2cad0bc3d3443b2b7","RepoTags":["ubuntu:14.04"],"Size":0,"VirtualSize":192754576}


J'ai poussé une pull-request pour documenter cette commande alternative, au cas où je ne serais pas un cas isolé.

Si vous voulez passer en Docker 1.3.0 vous risquez de tomber sur des soucis de ce type. Et surtout si vous utilisez des librairies cliente docker dans vos outils (typiquement, le plugin jenkins docker qui est une aberration mais ça c'est un autre débat) vous êtes cuits. Ce qui m'encourage dans mon plugin à moi (qui lui est une merveille, qui en douterait) à continuer à utiliser le client docker officiel.