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