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.