From a0bd8f7756b6e96ced2a4b5a27cff0639b507a06 Mon Sep 17 00:00:00 2001 From: Florentin Labelle <florentin.labelle@student-cs.fr> Date: Sun, 5 Jun 2022 14:34:12 +0200 Subject: [PATCH] Docker updates --- Docker.md | 18 ++++++++++++++++++ README.md | 18 ++++++++++++++++-- solutions/dockerfiles/Dockerfile.back.alpine | 4 +++- solutions/dockerfiles/Dockerfile.back.debian | 4 +++- 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/Docker.md b/Docker.md index 099be0e..332bc49 100644 --- a/Docker.md +++ b/Docker.md @@ -59,6 +59,24 @@ ENTRYPOINT ma commande 1 && ma commande 2 ``` nécessaire lorsque l'on a plusieurs commande à faire tourner de façon séquentielle. + +### Le multi-stage build +Parfois on a pas besoin d'une image différent pour pouvoir build l'application et pour distribuer cette application. On utilise alors un multi-stage build. Voilà un petit exemple. +```Dockerfile +FROM golang:1.16 +WORKDIR /go/src/github.com/alexellis/href-counter/ +RUN go get -d -v golang.org/x/net/html +COPY app.go ./ +RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . + +FROM alpine:latest +RUN apk --no-cache add ca-certificates +WORKDIR /root/ +COPY --from=0 /go/src/github.com/alexellis/href-counter/app ./ +CMD ["./app"] +``` +Seul le dernier stage est conservé dans l'image construite. + ## Construire une image à partir d'un Dockerfile Une image se construit à partir d'un Dockerfile et d'un contexte (c'est un dossier qui correspond au **.** que tu as mis dans to Dockerfile). Souvent le contexte c'est `.` et il n'y a pas besoin de spécifier l'emplacement du Dockerfile, si il s'appelle `Dockefile` et est à la racine du contexte. Pour constuire l'image on utilise alors: ```bash diff --git a/README.md b/README.md index 717a2c0..28de28c 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,11 @@ Le front est fait en React: vous deverez donc faire un **multi-stage** build: - Stage 1: Servir le site avec une image Nginx. #### Tester l'image -Test ton image Docker (docker run...) +Test ton image Docker: +```bash +docker run -p 8080:80 vroum-front +``` +Vérifie ensuite dans ton navigateur que tu peux bien voir le front de Vroum #### Challenge supplémentaire (Facultatif) Il est souvent considéré comme une mauvaise pratique d'avoir des conteneurs qui tournent avec l'utilisateur **root** en production. @@ -85,7 +89,17 @@ Ton objectif est de créer un Dockerfile et de construire une image avec pour en Le back est fait en Django: je te souhaite bon courage. #### Tester l'image -Test l'image Docker et tout avec MySQL... +Pour tester que le back fonctionne bien il va falloir d'abord mettre en place une base de donnée mysql, pour que le back s'y connecte. +``` +docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql +``` +Puis faire tourner le back: +``` +docker run -p 8000:8000 --env-file .env vroum-back +``` +Attention à bien remplir le .env avec les bonnes valeur pour se connecter à la BDD. + +Faire des curl pour tester que tout marche à peu près bien. #### Challenge supplémentaire (Facultatif et plus dur que pour le front) Il est souvent considéré comme une mauvaise pratique d'avoir des conteneurs qui tournent avec l'utilisateur **root** en production. diff --git a/solutions/dockerfiles/Dockerfile.back.alpine b/solutions/dockerfiles/Dockerfile.back.alpine index 573ac01..f235325 100644 --- a/solutions/dockerfiles/Dockerfile.back.alpine +++ b/solutions/dockerfiles/Dockerfile.back.alpine @@ -12,4 +12,6 @@ RUN pip install -r requirements.txt RUN apk del build-deps COPY ./ /back/ -ENTRYPOINT python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:8000 +ENTRYPOINT python3 manage.py makemigrations \ + && python3 manage.py migrate \ + && python3 manage.py runserver 0.0.0.0:8000 \ No newline at end of file diff --git a/solutions/dockerfiles/Dockerfile.back.debian b/solutions/dockerfiles/Dockerfile.back.debian index c65e434..8930872 100644 --- a/solutions/dockerfiles/Dockerfile.back.debian +++ b/solutions/dockerfiles/Dockerfile.back.debian @@ -5,4 +5,6 @@ COPY requirements.txt /back/ RUN pip install -r requirements.txt COPY ./ /back/ -ENTRYPOINT python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:8000 +ENTRYPOINT python3 manage.py makemigrations \ + && python3 manage.py migrate \ + && python3 manage.py runserver 0.0.0.0:8000 -- GitLab