tuto2 corrected and ready
This commit is contained in:
parent
2c5317f4f9
commit
15236db9af
14 changed files with 124 additions and 136 deletions
|
|
@ -11,14 +11,20 @@ bien, faites les modifications nécessaire dans votre `Dockerfile`.
|
|||
Dans la plupart des cas, vos `Dockerfile` seront dans des dossiers contenant
|
||||
beaucoup de fichiers qui ne sont pas nécessaire à la construction de votre
|
||||
conteneur (par exemple, vous pouvez avoir un `Dockerfile` placé à la racine
|
||||
d'un dépôt git : il va avoir besoin des binaires compilés, mais pas des
|
||||
sources).
|
||||
d'un dépôt git).
|
||||
|
||||
Afin d'améliorer les performances lors de la construction, vous pouvez exclure
|
||||
les fichiers et dossiers inutiles au conteneur en ajoutant un fichier
|
||||
`.dockerignore` dans le répertoire de votre `Dockerfile`.
|
||||
|
||||
Ce fichier fonctionne de la même manière que le `.gitignore` : vous pouvez
|
||||
Vous pouvez exclure les produits intermédiaires de compilation (`*.o`, ...) si
|
||||
vous utilisez un langage compilé, excluez également les produits de compilation
|
||||
si votre image construit le binaire. Dans le cas de NodeJS, vous allez sans
|
||||
doute vouloir exclure le dossier `node_modules` et faire un `npm install` dans
|
||||
votre `Dockerfile`. Cela permettra au passage de s'assurer que toutes les
|
||||
dépendances ont bien été enregistrée.
|
||||
|
||||
Ce fichier fonctionne de la même manière que le `.gitignore` : vous pouvez
|
||||
utiliser du globing.
|
||||
|
||||
Pour plus d'informations, vous pouvez consulter la documentation accessible à
|
||||
|
|
@ -28,7 +34,7 @@ Pour plus d'informations, vous pouvez consulter la documentation accessible à
|
|||
### N'installez rien de superflu
|
||||
|
||||
Afin de réduire la quantité de dépendances à installer, n'installez pas de
|
||||
paquets dont vous n'avez pas vraiment l'utilité : il n'y a pas de raison par
|
||||
paquets dont vous n'avez pas vraiment l'utilité : il n'y a pas de raison par
|
||||
exemple d'avoir un éditeur de texte dans un environnement qui sera utilisé
|
||||
comme serveur web. Un autre conteneur pourra contenir cet éditeur de texte dans
|
||||
les cas où vous avez besoin de modifier des données.
|
||||
|
|
@ -56,14 +62,14 @@ place.
|
|||
|
||||
### Ordonnez vos lignes de commandes complexes
|
||||
|
||||
#### Allez à la ligne pour séparer les longues lignes de commandes complexes
|
||||
#### Allez à la ligne pour séparer les longues lignes de commandes complexes\
|
||||
|
||||
Aérez vos `Dockerfile` !
|
||||
|
||||
N'hésitez pas à commenter et séparer les blocs logiques ensemble, comme lorsque
|
||||
vous codez.
|
||||
|
||||
Lorsqu'une ligne devient complexe, allez à la ligne :
|
||||
Lorsqu'une ligne devient complexe, allez à la ligne :
|
||||
|
||||
<div lang="en-US">
|
||||
```dockerfile
|
||||
|
|
@ -75,10 +81,10 @@ RUN apt-get update && apt-get install -y \
|
|||
|
||||
Notez les backslashs à la fin des lignes, indiquant qu'elle n'est pas terminée.
|
||||
|
||||
#### Triez les arguments par ordre alphabétique
|
||||
#### Triez les arguments par ordre alphabétique\
|
||||
|
||||
Lorsque c'est possible, ordonnez vos lignes suivant un ordre logique. Par
|
||||
exemple :
|
||||
exemple :
|
||||
|
||||
<div lang="en-US">
|
||||
```dockerfile
|
||||
|
|
@ -99,7 +105,7 @@ votre Dockerfile dans l'ordre. Pour chaque instruction, Docker va essayer de
|
|||
trouver si une image n'est pas déjà disponible dans le cache (plutôt que de
|
||||
créer une nouvelle image identique).
|
||||
|
||||
Il y a un certain nombre de règles à connaître pour bien utiliser ce mécanisme :
|
||||
Il y a un certain nombre de règles à connaître pour bien utiliser ce mécanisme :
|
||||
|
||||
- En démarrant d'une image de base déjà présente dans le cache (`docker
|
||||
images`), l'instruction suivante est comparée avec toutes les autres images
|
||||
|
|
@ -119,7 +125,7 @@ Il y a un certain nombre de règles à connaître pour bien utiliser ce mécanis
|
|||
|
||||
### Concevez des conteneur éphémères
|
||||
|
||||
Les conteneurs que vous générez doivent être aussi éphémères que possible : ils
|
||||
Les conteneurs que vous générez doivent être aussi éphémères que possible : ils
|
||||
devraient pouvoir être arrêtés, détruits et recréés sans nécessiter d'étape de
|
||||
reconfiguration. La configuration devrait se faire au lancement du conteneur ou
|
||||
lors de sa construction.
|
||||
|
|
@ -139,14 +145,14 @@ lors de sa construction.
|
|||
|
||||
### Exposez les ports standards
|
||||
|
||||
La commande `EXPOSE`{.dockerfile} vous permet d'indiquer les ports sur lesquels
|
||||
La commande `EXPOSE`{.dockerfile} permet d'indiquer les ports sur lesquels
|
||||
votre conteneur s'attend à recevoir des paquets venant de l'extérieur. Ces
|
||||
ports ne sont pas partagés avec l'hôte ou les autres conteneur, donc vous
|
||||
ports ne sont pas partagés avec l'hôte ou les autres conteneurs, donc vous
|
||||
n'avez pas de raison de ne pas utiliser les ports standards.
|
||||
|
||||
Si vous faites cela, il y a de forte chance qu'il n'y ait pas besoin de
|
||||
modifier la configuration des autres logiciels contenu dans d'autres conteneurs
|
||||
puis qu'ils sont généralement configurés pour se connecter aux ports standards.
|
||||
puisqu'ils sont généralement configurés pour se connecter aux ports standards.
|
||||
|
||||
S'il y a un conflit sur la machine hôte, il sera toujours temps de créer une
|
||||
redirection à ce moment là.
|
||||
|
|
@ -154,11 +160,12 @@ redirection à ce moment là.
|
|||
|
||||
### La bonne utilisation de l'`ENTRYPOINT`
|
||||
|
||||
L'entrypoint peut être utilisé de deux manières différentes :
|
||||
L'*entrypoint* (on le verra plus en détail dans la partie suivante) peut être
|
||||
utilisé de deux manières différentes :
|
||||
|
||||
- Vous pouvez l'utiliser de telle sorte que la commande passée au `docker run`,
|
||||
après le nom de l'image, corresponde aux arguments attendu par le programme
|
||||
indiqué dans l'entrypoint. Par exemple pour nginx :
|
||||
indiqué dans l'*entrypoint*. Par exemple pour nginx :
|
||||
|
||||
<div lang="en-US">
|
||||
```dockerfile
|
||||
|
|
@ -170,7 +177,7 @@ CMD ["-g", "daemon", "off;"]
|
|||
- Vous pouvez aussi utiliser un script qui servira à faire les initialisations
|
||||
ou les configurations nécessaire au bon fonctionnement du conteneur
|
||||
(rappelez-vous, il doit être éphémère !). Par exemple, le `Dockerfile` pour
|
||||
l'image de PostgreSQL possède cet entrypoint :
|
||||
l'image de PostgreSQL possède cet entrypoint :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
|
@ -195,22 +202,22 @@ exec "$@"
|
|||
### `[""]`, `'` et sans `[]`
|
||||
|
||||
Les instructions `ENTRYPOINT`{.dockerfile} et `CMD`{.dockerfile} peuvent
|
||||
prendre deux formes :
|
||||
prendre deux formes :
|
||||
|
||||
- `["cmd", "arg1", "arg2"]` : ici, un simple `execve` sera effectué avec ces
|
||||
- `["cmd", "arg1", "arg2"]` : ici, un simple `execve` sera effectué avec ces
|
||||
arguments. Si d'éventuels variables se trouve dans les arguments, elles ne
|
||||
seront pas remplacées.
|
||||
- `cmd arg1 arg2` : ici l'exécution se fera au sein d'un `sh -c`, donc les
|
||||
- `cmd arg1 arg2` : ici l'exécution se fera au sein d'un `sh -c`, donc les
|
||||
variables seront remplacés et étendues.
|
||||
|
||||
Les commandes sous forme de tableau étant parsées par un parser JSON, vous ne
|
||||
pouvez pas utiliser les simple quotes.
|
||||
pouvez pas utiliser les *simples quotes*.
|
||||
|
||||
|
||||
### Volumes
|
||||
|
||||
L'instruction `VOLUME`{.dockerfile} doit être utilisée pour exposer tous les
|
||||
espaces de stockage de données, configuration,\ ...
|
||||
espaces de stockage de données, configuration, ...
|
||||
|
||||
|
||||
### Réduisez les privilèges
|
||||
|
|
@ -218,7 +225,7 @@ espaces de stockage de données, configuration,\ ...
|
|||
Utilisez l'instruction `USER`{.dockerfile} dès que vous le pouvez, lorsqu'un
|
||||
service ne réclame pas de privilège particulier.
|
||||
|
||||
Il vous faudra sans doute créer l'utilisateur et son groupe dans le Dockerfile.
|
||||
Il vous faudra sans doute créer l'utilisateur et son groupe dans le `Dockerfile`.
|
||||
|
||||
|
||||
### Profitez du système de liaison et de résolution de nom
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue