7ad1c95f2ee4b56f99b5535d5fd3f01ca98b4d89
Services/Docker.md
... | ... | @@ -2,28 +2,46 @@ |
2 | 2 | |
3 | 3 | # Généralités |
4 | 4 | |
5 | -[Docker](https://www.docker.com/) est un logiciel libre permettant de gérer le déploiement de containers. Ceci permet d'isoler des processus au sein d'un système hôte Linux. L'impact sur la performance est minimal grâce à l'utilisation des [control groups](https://en.wikipedia.org/wiki/Cgroups) du noyau Linux. |
|
5 | +[Docker](https://www.docker.com/) est un logiciel libre permettant de gérer le |
|
6 | +déploiement de containers. Ceci permet d'isoler des processus au sein d'un |
|
7 | +système hôte Linux. Au ResEl nous nous servons de Docker pour quelques services, |
|
8 | +ce qui permet de les tester facilement et de les déployer facilement sur les |
|
9 | +différentes marchines. |
|
6 | 10 | |
7 | -Au ResEl nous nous servons de Docker pour quelques services, ce qui permet de les tester facilement et de les déployer facilement sur les différentes marchines. |
|
8 | - |
|
9 | -Un registre docker interne au ResEl est disponible sur [Mobydick](Serveurs/mobydick). Il permet de partager les images docker du ResEl sans utiliser le registre publique (hub.docker.com), et sans devoir rebuilder depuis les sources (Dockerfile) à chaque fois. |
|
11 | +Un registre docker interne au ResEl est disponible sur |
|
12 | +[Mobydick](Serveurs/mobydick). Il permet de partager les images docker du ResEl |
|
13 | +sans utiliser le registre publique (hub.docker.com), et sans devoir rebuilder |
|
14 | +depuis les sources (Dockerfile) à chaque fois. |
|
10 | 15 | |
11 | 16 | # Motivations |
12 | 17 | |
13 | -Docker a commencé à être installé fin 2015 au ResEl pour notament isoler les services présents sur [Pégase](/Serveurs/Pegase). Après une longue période vide, le service a été amélioré afin de simplifier les tests des services. D'abord pour le [site ResEl](https://git.resel.fr/resel/myresel) ensuite pour d'autres services comme le LDAP. |
|
18 | +Docker a commencé à être installé fin 2015 au ResEl pour notament isoler les |
|
19 | +services présents sur [Pégase](/Serveurs/Pegase). Après une longue période vide, |
|
20 | +le service a été amélioré afin de simplifier les tests des différents services. |
|
21 | +D'abord pour le [site ResEl](https://git.resel.fr/resel/myresel) ensuite pour |
|
22 | +d'autres services comme le [LDAP](/Services/LDAP). |
|
14 | 23 | |
15 | -Si aujourd'hui il n'est pour des raisons évidentes pas présent pour tous les services, l'harmonisation des services ResEl tend à lui donner une grande importance pour le déploiement. |
|
24 | +Si aujourd'hui il n'est pour des raisons évidentes pas présent pour tous les |
|
25 | +services, l'harmonisation des services ResEl tend à lui donner une grande |
|
26 | +importance pour le déploiement. |
|
16 | 27 | |
17 | 28 | ### Terminologie |
18 | 29 | |
19 | -Cette terminologie est nécessaire pour bien comprendre les principes, cependant je vous conseille de lire [le glossaire officiel](https://docs.docker.com/engine/reference/glossary/). |
|
20 | - |
|
21 | -* *Conteneur :* Ensemble de ressources (système de fichier, mémoire, réseau) associées à un ou des processus. |
|
22 | -* *Image :* Modèle d'un conteneur. Dans le cas de Docker, un système de fichier (`/etc`, `/var`, ...) compressé. |
|
23 | -* *Dockerfile :* Fichier décrivant comment construire une image de façon automatique. |
|
24 | -* *Registre :* Serveur (optionnel) contenant les images. docker.resel.fr chez nous. |
|
30 | +Cette terminologie est nécessaire pour bien comprendre les principes, cependant |
|
31 | +je vous conseille de lire [le glossaire |
|
32 | +officiel](https://docs.docker.com/engine/reference/glossary/). |
|
33 | + |
|
34 | +* *Conteneur :* Ensemble de ressources (système de fichier, mémoire, réseau) |
|
35 | + associées à un ou des processus. |
|
36 | +* *Image :* Modèle d'un conteneur. Dans le cas de Docker, un système de fichier |
|
37 | + (`/etc`, `/var`, ...) compressé. |
|
38 | +* *Dockerfile :* Fichier décrivant comment construire une image de façon |
|
39 | + automatique. |
|
40 | +* *Registre :* Serveur (optionnel) contenant les images. docker.resel.fr chez |
|
41 | + nous. |
|
25 | 42 | * *Hôte* : marchine hébergeant un ou plusieurs containers |
26 | -* *Tag :* Identifiant d'une image. Généralement `registre/sercice:version`, par exemple `docker.resel.fr/myresel:latext`. |
|
43 | +* *Tag :* Identifiant d'une image. Généralement `registre/sercice:version`, par |
|
44 | + exemple `docker.resel.fr/myresel:latext`. |
|
27 | 45 | |
28 | 46 | |
29 | 47 | # Mise en place |
... | ... | @@ -32,7 +50,9 @@ Cette terminologie est nécessaire pour bien comprendre les principes, cependant |
32 | 50 | La mise en place d'un hote Docker sur n'importe quelle machine est très simple. |
33 | 51 | La méthode recommandée est d'utiliser le [playbook Ansible associé](https://git.resel.fr/confs/ansible/blob/master/playbooks/docker-host.yml) |
34 | 52 | |
35 | -Voici cepedant la méthode manuelle suivant la [documentation officielle](https://docs.docker.com/engine/installation/linux/debian/) avec quelques spécificités pour le ResEl : |
|
53 | +Voici cepedant la méthode manuelle suivant la [documentation |
|
54 | +officielle](https://docs.docker.com/engine/installation/linux/debian/) avec |
|
55 | +quelques spécificités pour le ResEl : |
|
36 | 56 | |
37 | 57 | Installez les dépendances nécéssaires : |
38 | 58 | ```bash |
... | ... | @@ -86,26 +106,82 @@ Pour utiliser le registre du ResEl (mobydick) vous devez faire un peu plus de |
86 | 106 | configuration. En effet celui-ci n'est pas accessible au public et il faut donc |
87 | 107 | s'y authentifier. |
88 | 108 | |
89 | -TODO : Comment s'auth au registre du ResEl |
|
109 | +La procédure est toute simple, vous devez créer un token pour la machine, pour |
|
110 | +cela connectez-vous en root et tapez la commande suivante : |
|
111 | +```bash |
|
112 | +docker login |
|
113 | +``` |
|
114 | + |
|
115 | +Docker va vous demander les identifiants du registre que vous devez connaître. |
|
116 | +Vous constaterez que la commande `docker login` a créé un fichier |
|
117 | +`/root/.docker/config.json` avec un token d'authentification dedans : |
|
118 | +```json |
|
119 | +{ |
|
120 | + "auths": { |
|
121 | + docker.resel.fr": { |
|
122 | + "auth": "cldfjnaor65edsdf2ef" |
|
123 | + } |
|
124 | + } |
|
125 | +} |
|
126 | +``` |
|
90 | 127 | |
91 | -## Registre Docker (mobydick) |
|
128 | +Vous pouvez désormais sur cet hôte vous connecter au registre du ResEl. |
|
129 | + |
|
130 | +## Installation du Registre Docker (mobydick) |
|
131 | + |
|
132 | +Comme c'est écrit partout, le registre docker est installé sur la machine |
|
133 | +mobydick. Comble du bonheur, celui-ci est installé grâce à `docker-composer` ce |
|
134 | +qui permet d'orchestrer plusieurs containers en même temps. |
|
135 | + |
|
136 | +Comme la plupart des services ResEl, la configuration se trouve dans le dossier |
|
137 | +`/srv/` et plus précisément dans `/srv/docker_registry`. |
|
138 | + |
|
139 | +Le système est composé de deux containers `nginx` et `registry`. La |
|
140 | +configuration est détaillée dans le fichier |
|
141 | +`/srv/docker_registry/docker-compose.yml` : |
|
142 | +```yaml |
|
143 | +nginx: |
|
144 | + image: "nginx:1.9" |
|
145 | + ports: |
|
146 | + - 443:443 |
|
147 | + links: |
|
148 | + - registry:registry |
|
149 | + volumes: |
|
150 | + - ./nginx/:/etc/nginx/conf.d:ro |
|
151 | + |
|
152 | +registry: |
|
153 | + image: registry:2 |
|
154 | + ports: |
|
155 | + - 127.0.0.1:5000:5000 |
|
156 | + environment: |
|
157 | + REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data |
|
158 | + volumes: |
|
159 | + - ./data:/data |
|
160 | +``` |
|
92 | 161 | |
93 | -TODO : installer un registre Docker au ResEl |
|
162 | +On notera que le volume contenant les données du registre est le dossier |
|
163 | +`data/`. Il est important de ne pas toucher à ce dossier. Également le dossier |
|
164 | +`nginx/` qui contient la configuration nginx (par exemple pour |
|
165 | +l'authentification). |
|
94 | 166 | |
95 | -# Utilisation |
|
96 | 167 | |
97 | -## Relancer le registre |
|
98 | 168 | |
99 | -Il arrive que le registre s'etteigne (pendant les mises à jour par exemple). |
|
100 | -Voici la procédure pour le relancer : |
|
169 | +Pour installer/démarrer le service rien de plus simple : |
|
101 | 170 | |
171 | +1. Installez le moteur Docker comme détaillé plus haut |
|
172 | +2. Installez docker-compose `apt install docker-compose` |
|
173 | +3. Créez/démarrez le registre : |
|
102 | 174 | ```bash |
103 | -cd /srv/docker_registry/ |
|
104 | -docker-compose up -d |
|
175 | +cd /srv/docker_register |
|
176 | +docker-compose up -d |
|
105 | 177 | ``` |
106 | 178 | |
179 | +N'oubliez pas de configurer le reverse proxy si vous désirez pouvoir accéder au |
|
180 | +registre depuis l'extérieur. |
|
107 | 181 | |
108 | -## Lancer un conteneur |
|
182 | +# Utilisation |
|
183 | + |
|
184 | +## Démarrer un conteneur |
|
109 | 185 | |
110 | 186 | Sur un hôte une image peut être récupérée sur le registre docker officiel |
111 | 187 | ```bash |
... | ... | @@ -123,7 +199,41 @@ git clone https://github.com/jwilder/nginx-proxy.git |
123 | 199 | docker build . --tag docker.resel.fr/nginx-proxy:latest |
124 | 200 | ``` |
125 | 201 | |
126 | -## Créer une image |
|
202 | +## Relancer le registre Docker |
|
203 | + |
|
204 | +Il arrive que le registre s'etteigne (pendant les mises à jour par exemple). |
|
205 | +Voici la procédure pour le relancer : |
|
206 | + |
|
207 | +```bash |
|
208 | +cd /srv/docker_registry/ |
|
209 | +docker-compose up -d |
|
210 | +``` |
|
211 | + |
|
212 | +## Créer une nouvelle image |
|
213 | + |
|
214 | +Créez un nouveau dossier qui contiendra tous les fichiers relatifs à l'image |
|
215 | +```bash |
|
216 | +mkdir wifi && cd wifi |
|
217 | +``` |
|
218 | + |
|
219 | +Créez un fichier `Dockerfile` et remplissez-le avec la configuration docker : |
|
220 | +```Dockerfile |
|
221 | +FROM docker.resel.fr/debian:latest |
|
222 | + |
|
223 | +RUN apt-get -qq upgrade && apt-get -qq install wifi |
|
224 | +``` |
|
225 | + |
|
226 | +Vous pouvez trouver toute la specification du fichier Dockerfile sur la |
|
227 | +[documentation officielle](https://docs.docker.com/engine/reference/builder/) |
|
228 | + |
|
229 | +Vous pouvez ensuite construire l'image et la pusher sur le registre: |
|
230 | +```bash |
|
231 | +docker build -r docker.resel.fr/wifi:latest . |
|
232 | +docker push docker.resel.fr/wifi:latest |
|
233 | +``` |
|
234 | + |
|
235 | +:notebook: N'oubliez pas de [versionner la |
|
236 | +configuration](https://git.resel.fr/docker) |
|
127 | 237 | |
128 | 238 | |
129 | 239 | ## Utilisation du Registry Interne : mobydick |
... | ... | @@ -154,16 +264,17 @@ Maintenant l’image peut-être récupérée sur les autres machines : |
154 | 264 | docker pull docker.resel.fr/sympa:6.2 |
155 | 265 | ``` |
156 | 266 | |
157 | -## Guides |
|
158 | - |
|
159 | -TODO |
|
160 | - |
|
161 | -## Ressources utiles |
|
267 | +# Ressources utiles |
|
162 | 268 | * [Site officiel](https://www.docker.com/) |
163 | 269 | * [Images ResEL](https://git.resel.fr/dockers/) |
270 | +* [Docker + Ansible](https://docs.docker.com/engine/admin/ansible) |
|
271 | + |
|
272 | +# Articles liés |
|
273 | +* [Serveur Mobydick](Serveurs/Mobydick) |
|
274 | + |
|
164 | 275 | |
165 | -## Articles liés |
|
166 | -TODO |
|
276 | +# TODO (rédacteur) |
|
277 | +* Corrections mineures et des détails |
|
167 | 278 | |
168 | -## TODO (rédacteur) |
|
169 | -* TODO |
|
279 | +# Modifications |
|
280 | +* 2017-04-10 : revamp complet de la page pour enfin être utile |