Conteneur Nginx

Exercice

L'objectif de cet exercice est de créer votre propre conteneur Docker Nginx personnalisé. Pour cela, nous allons dans un premier temps construire notre propre image Nginx puis dans un second temps la personnaliser en y ajoutant un le contenu d'un site web

Question

Construisez une image Nginx en se basant sur l'image de base de debian en version stretch

Indice

L'instruction FROM permet de sélectionner l'image de base

Indice

Il est nécessaire de modifier le fichier /etc/nginx/nginx.conf pour faire fonctionner nginx dans un conteneur.

1
daemon off;
2
user www-data;
3
worker_processes  1;
4
5
error_log  stderr error;
6
events {
7
    worker_connections  1024;
8
}
9
10
http {
11
    include       mime.types;
12
    default_type  application/octet-stream;
13
    sendfile        on;
14
    keepalive_timeout  65;
15
    access_log stdout;
16
17
    server {
18
        listen 80;
19
20
        root /var/www/html;
21
        index index.php index.html index.htm index.nginx-debian.html;
22
23
        client_max_body_size 100M;
24
        client_body_buffer_size 128k;
25
26
        location ~ /\.ht {
27
            deny all;
28
        }
29
30
        location ~ /(data|conf|bin|inc|config|lib)/ {
31
            deny all;
32
        }
33
    }
34
}

Indice

On utilise l'instruction COPY pour remplacer le fichier.

Indice

Pour lancer nginx, on utilise la commande /usr/sbin/nginx

Solution

1
FROM debian:stretch
2
3
RUN apt-get update && \
4
    apt-get install -y nginx
5
6
COPY nginx.conf /etc/nginx/nginx.conf
7
8
EXPOSE 80
9
10
CMD ["/usr/sbin/nginx"]
1
docker build -t nginx .

On peut maintenant lancer notre nouvelle image et vérifier son bon fonctionnement

docker run --rm -p 80 :80 nginx

On peut maintenant ouvrir son navigateur à l'adresse http://127.0.0.1:80 et vérifier que l'on a bien accès à la page d'accueil d'nginx

Question

Nous avons développé une nouvelle application web que nous souhaitons héberger dans notre conteneur nginx. https://github.com/abarbare/api-run-app

Faites un nouveau Dockerfile utilisant en image de base l'image Nginx que nous venons de construire

Indice

Vous pouvez télécharger l'application sur votre ordinateur puis la copier dans le conteneur. Il est aussi possible de télécharger l'app directement dans votre Dockerfile à l'aide de la commande git

Indice

L'application est à ajouter dans le dossier /var/www/html.

Indice

Les fichiers de l'application doivent appartenir à l'utilisateur www-data:www-data

Solution

1
FROM nginx
2
COPY --chown=www-data:www-data api-run-app/ /var/www/html/
1
FROM nginx
2
ARG APP=https://github.com/abarbare/api-run-app.git
3
RUN apt-get update && \
4
    apt-get install -y git && \
5
    rm -Rf /var/www/html/ && \
6
    git clone $APP /var/www/html/ && \
7
    chown -R www-data:www-data /var/www/html/

L'utilisation de la directive ARG permet de construire une image différente sans avoir à modifier le Dockerfile. Si l'on souhaite construire une image pour une application similaire https://github.com/abarbare/ansible-meetup-app il suffit de construire l'image avec la commande suivante

1
docker build -t mon-app --build-arg APP=https://github.com/abarbare/ansible-meetup-app.git .

docker run --rm -p 80 :80 app

On peut maintenant ouvrir son navigateur à l'adresse http://127.0.0.1:80 et vérifier que l'on a bien accès à notre application