docker exec -it myName /bin/bash : entrer dans un container démarré
docker logs -tf myName : afficher les logs d'un container
La Toolbox : Un Dockerfile à son Image
Une présentation
La Registry comme écrin
L'Engine au cœur de l'écosystème
Un Dockerfile a son image
La Toolbox : Un Dockerfile à son Image
Qu'est-ce qu'une image ?
Un ensemble de commandes d'installation
Identifié par un tag organisation/nom:tag
Un empilement de couches de filesystems
Se configure avec un fichier Dockerfile
Qui peut utiliser le contenu du répertoire du Dockerfile
Qui doit se trouver dans un répo git
La Toolbox : Un Dockerfile à son Image
Syntaxe d'un Dockerfile
FROM <image> : image utilisée comme base de la future image
MAINTAINER <name> : auteur de l'image
ENV <key> <value> : variable d'environnement
RUN <command> : exécute la commande d'installation sur l'image
COPY <src> <dest> : ajoute un fichier local dans l'image
VOLUME ["/<dir>"] : répertoire externe monté au démarrage
EXPOSE <port>] : port réseau exposé par le conteneur
CMD ["executable", "param1",...] : commande lancée au démarrage
WORKDIR ["/<dir>"] : devient le répertoire interne courrant
USER <user> : utilisateur Linux utilisé lors du démarrage
ONBUILD <command> : commande executée dans l'image fille
ARG <name>[=<default value>] : argument utilisé lors du build (http_proxy)
LABEL <key>=<value> : étiquette associée à l'image
La Toolbox : Un Dockerfile à son Image
Un example de Dockerfile
# Se base sur l'image ubuntu version 14.04
FROM ubuntu:14.04
MAINTAINER Docker-Noumea
RUN apt-get update & \
apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
VOLUME ["/usr/share/nginx/html/"]
EXPOSE 80
CMD ["nginx"]
La Toolbox : Un Dockerfile à son Image
Quelques astuces pour bien constuire son Dockerfile
Préciser la version de l'image de base
Choisir une image de base légère (Alpine)
Supprimer les caches d'installation
N'installer que le strict nécessaire
Placer en haut les instructions les plus longues
Placer en bas les instructions qui changent le plus
Regrouper les instructions cohérentes
En séparant les instructions sur plusieurs lignes
Utiliser un .dockerignore
Ne lancer qu'un process par container
Utiliser la barre espace ou les flèches pour se déplacer