## Mise en pratique - Docker Application Express JS
### 1. Compléter le Dockerfile afin de builder correctement l’application contenu dans src/
```
# Dockerfile
FROM node:12-alpine3.9
ENV NODE_ENV=production
WORKDIR /app
COPY src/ ./src/
COPY package.json .
RUN npm install --production
CMD ["node", "src/index.js"]
```
### a. Une option de npm vous permet de n’installer que ce qui est nécessaire. Quelle est cette option ? Quelle bonne pratique Docker permet t-elle de respecter ?
Pour installer seulement ce qui est nécéssaire :
```
RUN npm install --production
```
Utiliser cette commande permet d'éviter d'installer des fichiers inutiles dans le conteneur et peut donc aussi améliorer les perfomances.
### 2. A l’aide de la commande docker build, créer l’image ma_super_app
```
docker build . --tag ma_super_app
[+] Building 11.9s (7/7) FINISHED
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ma_super_app latest 8c7515d07f3a 16 minutes ago 88.5MB
```
### 3. Compléter le fichier docker-compose.yml afin d’éxécuter ma_super_app avec sa base de données./!\ Utiliser correctement les variables d’environnement afin de configurer la base de données et l’application /!\
```
# docker-compose.yml
version: '3.9'
services:
node:
image: ma_super_app
container_name: node-app
ports:
- 3000:3000
environment:
DATABASE_HOST: db
DATABASE_PORT: 3306
DATABASE_USERNAME: user1
DATABASE_PASSWORD: P@ssw0rd
DATABASE_NAME: test
depends_on:
- db
db:
image: mysql:5.7
container_name: mysqldb
restart: always
ports:
- 3306:3306
environment:
MYSQL_USER: user1
MYSQL_ROOT_PASSWORD: P@ssw0rd
MYSQL_PASSWORD: P@ssw0rd
MYSQL_DATABASE: test
```
#### Vérifier l'éxécution des deux conteneurs
```
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a21b582d88cc ma_super_app "docker-entrypoint.s…" 6 seconds ago Up 4 seconds 0.0.0.0:3000->3000/tcp node-app
e349e19b7358 mysql:5.7 "docker-entrypoint.s…" 7 seconds ago Up 6 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysqldb
```
#### Voir les logs du conteneur
```
docker logs -f node-app
Running on port 3000
```
#### Vérifier sur le navigateur web
