Pour la création de notre premier conteneur nous allons imaginer ce type de contexte :
On souhaite rendre accessible un site statique écrit en HTML et nous voulons savoir si mettre en place un serveur Nginx répondrait favorablement à cette problématique sans pour la peine de devoir installer une machine virtuelle qui prendrai de la place inutilement.
L'usage de docker est une bonne idée et il y a deux manière d'y parvenir. Soit on procède avec des fichiers de configuration que l'on pourra partager ensuite ou alors on agit uniquement en ligne de commande.
Dans tous les cas, on a besoin de ces outils :
sudo curl -sSL get.docker.com |sh sudo curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
On définit quel utilisateur aura le droit de les utiliser :
usermod -aG docker mon_utilisateur
Admettons que nous travaillons dans le répertoire de notre utilisateur courant et que le code source est le suivant :
mkdir ~/code nano ~/code/index.html
<h1>Nous sommes dans le conteneur Nginx!</h1>
Réalisons maintenant l'image qui va contenir le logiciel Nginx :
nano Dockerfile
FROM debian:jessie-slim RUN apt-get update && apt-get install -f nginx-light -y && unlink /var/www/html/index.nginx-debian.html CMD ["nginx", "-g", "daemon off;"]
Ces directives également présenté dans la documentation officielle signifie :
docker build -t nginx .
–squash (pour compresser l'image et qu'il ait plus qu'une seule couche)
L'option -t permet de donner un nom à l'image que l'on peut voir ci-dessous:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest a9f0a1c8198d 54 minutes ago 95.11 MB <none> <none> 5d9cf49643fb 55 minutes ago 79.95 MB debian jessie-slim a3a956e095f3 2 weeks ago 79.95 MB
Il nous reste plus qu'a déployer le conteneur en lui attribuant des options qui sont également présent dans la documentation officielle :
version: '2' services: web: image: nginx ports: - "80:80" volumes: - ./code:/var/www/html
On décrit ici :
docker-compose up -d
Après avoir lancé cette commande avec l'option -d qui indique que l'on lance le conteneur en arrière plan ; on doit voir le conteneur tourner :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f5da801cfa9b nginx "nginx -g 'daemon off" About an hour ago Up 2 seconds 0.0.0.0:80->80/tcp nginx_web_1
Il est bien sur accessible sur notre machine !
Ces manipulations sont plus destiné à des personnes expérimenté ou qu'il y a besoin de lancer un nouveau conteneur rapidement. Dans notre cas, ça va nous prendre une seule commande mais avant on peut choisir l'image qui contiendra Nginx sur le Hub.
Ce site contient toutes les images que les internautes partages. Faites attention à bien la choisir car il s'y trouve des configurations presque similairesn basé sur des système de fichiers différents dont le poids de l'image est variable. De ce fait, on va rester simple en se basant sur l'image officiel de Nginx.
Ainsi, en reprenant l'organisation du dossier de notre projet :
ls
code code/index.html
On a besoin de juste lancer cette commande :
docker run --name web -v $(pwd)/code:/usr/share/nginx/html -d -p 80:80 nginx
Ces options veulent dire :
On obtient bien encore une fois la même interface :