Installation de Docker sur un serveur dédié Kimsufi OVH sous Debian et chargement d'un conteneur

Mise en place et installation de Docker sur la distribution Linux Debian fournie par OVH sur les serveurs Kimsufi.

Publié le 11/07/2014

1 - Activation des Cgroups et recompilation du Noyau Linux Debian sur serveur OVH Kimsufi

La distribution Debian 7.5 sur le serveur OVH Kimsufi ne permet pas d'exécuter les Cgroup nécessaires au fonctionnement des conteneurs lxc sur lesquels se base Docker. On va pour cela télécharger un noyau plus récent et activer les options nécessaires au bon fonctionnement de lxc et Docker.

Configuration des locales :

dpkg-reconfigure locales

On décoche les locales suivantes avec la barre d’espace :

  • • en_US.UTF-8 UTF-8

On coche celles-ci :

  • • fr_FR ISO-8859-1
  • • fr_FR.UTF-8 UTF-8
  • • fr_FR.UTF-8@euro
  • • fr_FR@euro ISO-8859-15

On indique au système la langue à utiliser :


echo "LC_ALL=fr_FR.UTF-8" >> /etc/environmentecho "LANG=fr_FR.UTF-8" >> /etc/environment
echo "LANGUAGE=fr_FR.UTF-8" >> /etc/environment 

On met à jour le système :


apt-get update
apt-get upgrade

Pour compiler notre noyau, nous allons avoir besoin d’installer les outils suivants :


apt-get install make gcc libncurses5-dev lzma dpkg-dev wget

On créé un répertoire pour compiler le noyau :


mkdir /root/noyau
cd /root/noyau

On récupère la version 3.14.10 du noyau sur https://www.kernel.org/ dont on pourra trouver le fichier de configuration sur ftp://ftp.ovh.net/made-in-ovh/bzImage.

wget -P /root/noyau -c --no-check-certificate https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.14.10.tar.xz

On décompresse l’archive :


tar -Jxvf linux-3.14.10.tar.xz
cd /root/noyau/linux-3.14.10

Nous allons devoir récupérer le fichier de configuration du noyau d’OVH :


wget -P /root/noyau/linux-3.14.10 -c ftp://ftp.ovh.net/made-in-ovh/bzImage/3.14.10/config-3.14.10-xxxx-std-ipv6-64
mv config-3.14.10-xxxx-std-ipv6-64 .config

On lance l’utilitaire de configuration :

make menuconfig

Activer les options suivantes :

  • General setup ---> [*]
  • Control Group support ---> [*]
  • Example debug cgroup subsystem [*]
  • Freezer cgroup subsystem [*]
  • Device controller for cgroups [*]
  • Cpuset support [*]
  • Include legacy /proc//cpuset file [*]
  • Simple CPU accounting cgroup subsystem [*]
  • Resource counters [*]
  • Memory Resource Controller for Control Groups [*]
  • Memory Resource Controller Swap Extension [*]
  • Memory Resource Controller Swap Extension enabled[...] [*]
  • Memory Resource Controller Kernel Memory accountin[...] [*]
  • Enable perf_event per-cpu per-container group (cgrou[...] [*]
  • Group CPU scheduler ---> [*]
  • Group scheduling for SCHED_OTHER (NEW) [*]
  • CPU bandwidth provisioning for FAIR_GROUP_SCHED [*]
  • Group scheduling for SCHED_RR/FIFO [*]
  • Block IO controller [*]
  • Enable Block IO controller debugging -*- Namespaces support ---> [*]
  • UTS namespace [*]
  • IPC namespace [*]
  • User namespace [*]
  • PID Namespaces [*]
  • Network namespace [*]
  • Enable loadable module support Networking support --->
  • Networking options ---> <*>
  • 802.1d Ethernet Bridging [*]
  • IGMP/MLD snooping [*]
  • VLAN filtering <*>
  • 802.1Q/802.1ad VLAN Support [*]
  •  
  • GVRP (GARP VLAN Registration Protocol) support Device Drivers ---> [*]
  • Network device support ---> <*>
  • MAC-VLAN support <*>
  • MAC-VLAN based tap driver <*>
  • Virtual ethernet pair device Character devices ---> -*- Unix98 PTY support [*]
  •  

Une fois la configuration terminée, enregistrer les modifications : puis . Quitter menuconfig : . Compilation avec argument --jobs 4 pour définir le nombre de threads utilisés :

make KDEB_PKGVERSION=3.14.10.cgroups.1.0 deb-pkg --jobs 4 | tee -a compil.log

La compilation devrait durer une bonne demi-heure, voir plus, selon la puissance de votre machine. Une fois la compilation terminée, on va trouver notre nouveau noyau dans /root/noyau : linux-image-3.14.10-xxxx-std-ipv6-64_3.14.10.cgroups.1.0_amd64.deb. On déplace le noyau actuel :


mv /boot/bzImage-3.10.23-xxxx-std-ipv6-64 /tmp
mv /boot/System.map-3.10.23-xxxx-std-ipv6-64 /tmp
mv /etc/grub.d/06_OVHkernel /tmp

Nous pouvons à présent installer le noyau que nous venons de compiler :

dpkg -i /root/noyau/linux-image-3.14.10-xxxx-std-ipv6-64_3.14.10.cgroups.1.0_amd64.deb

Si l’installation s’est bien déroulée, on redémarre le serveur :

reboot

2 - Installation de Docker

Créer le fichier /etc/apt/sources.list.d/docker.list :

nano /etc/apt/sources.list.d/docker.list

Ajouter la ligne suivante dans le fichier :

deb http://get.docker.io/ubuntu docker main

Installer le package :


apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

apt-get update
apt-get install lxc-docker

* Important : Si la clé n'es plus valide, cela fonctionnera en autorisant d'installer les paquets non authentifiés lors de l'installation.

3 - Export du conteneur depuis la VM Virtual box avec Vagrant

Sur notre poste de développement, ici sur Mac OS X 10.9 avec Vagrant dans VM Debian disposant d'un conteneur Docker (cf le tutorial sur Mac OS X, Vagrant et Docker > http://www.foulquier.info/tutoriaux/installation-application-symfony-2-et-lamp-via-virtualbox-vagrant-et-docker-sur-mac-osx-10-9-mavericks/). Nous allons exporter le conteneur jobmanager/lamp vers le serveur dédié chez OVH. On récupère l'id de notre conteneur :

docker ps -a

On exporte ce dernier, puis on le copie vers le serveur distant :


docker save jobmanager/lamp > jobmanager.tar
scp jobmanager.tar root@machine-ovh.domaine.tld:/home

4 - Import du conteneur sur le serveur dédié

Importation du conteneur :

docker load < /home/jobmanager.tar

5 - Exécution du conteneur

On lance le conteneur avec un port-forwarding sur Apache et MySQL :

docker run -t -i -p 80:80 -p 3306:3306 jobmanager/lamp /bin/bash

On se retrouve alors logué sur notre conteneur et on peut alors démarrer nos services Apache et MySQL :

service mysql start service apache2 start

Notre application sera disponible à l'adresse définie dans le VHOST apache de notre application web. Bien entendu l'adresse aura été enregistrée dans un serveur DNS où dans le ficher host de votre poste client.

Sources : http://blog.blaisethirard.com/creer-des-serveurs-virtuels-debian-7-wheezy-avec-lxc-sur-un-dedie-ovh-kimsufi-2/