Bonjour à tous ! 👋
Nous allons aborder ici un petit workflow pour utiliser Gatsby avec Docker & Docker-compose.
Je ne vais pas vous expliquer ici en détails ce qu'est Docker, et Docker-compose. Si vous souhaitez en savoir plus, je vous conseille ce lien.
Explication
Pour ce workflow, nous allons créer 3 fichiers nécessaire à l'utilisation de docker.
- Dockerfile.dev : Liste des instructions servant à créer l'image Docker finale qui sera utilisé lors pour le développement.
- docker-compose.dev.yml : Vous permettra de lancer facilement votre image Docker.
- entrypoint.sh : Script du point d'entrée de l'image Docker.
Création des fichiers
Dockerfile.dev
FROM node:16.1.1-alpine3.12LABEL maintainer="Your NAME <your@name.com>"ARG APP_ROOT=/appARG APP_PORT=8000ARG BUILD_PACKAGES="build-base python3 bash make g++"RUN apk add --update --no-cache $BUILD_PACKAGESRUN mkdir -p $APP_ROOTWORKDIR $APP_ROOTCOPY package*.json ./RUN npm install && npm install -g gatsby-cliCOPY . .EXPOSE $APP_PORTENTRYPOINT ["/app/entrypoint.sh"]CMD ["npm", "run", "docker:start"]
docker-compose.dev.yml
version: "3.7"services: gatsby: build: context: . dockerfile: Dockerfile.dev ports: - 8000:8000 volumes: - .:/app - /app/node_modules/
entrypoint.sh
#!/bin/shset -enpm installexec "$@"
Optionnel: Ajout d'un "script" NPM/Yarn
Cette partie n'est pas obligatoire, mais lorsque j'utilise docker, j'aime ajouter une tâche spécifique au lancement en mode "container".
Pour cela, nous ajouter une entrée dans la partie "script" du fichier package.json
{ ... "scripts": { "develop": "gatsby develop", "start": "npm run develop", "docker:start": "gatsby develop -H 0.0.0.0", "build": "gatsby build --prefix-paths", "serve": "gatsby serve" }, ...
Toutefois, si vous décider de ne pas faire cette étape, veuillez changer la dernière ligne du Dockerfile.dev par CMD ["npm", "run", "gatsby develop -H 0.0.0.0" ]
Utilisation
Pour utiliser votre image, vous aller pouvoir utiliser cette commande :
docker-compose -f docker-compose.dev.yml up
Cette commande, si vous l'executer pour la première fois, va créer (build) l'image à partir du Dockefile.dev que nous avons créé plus haut, puis lancer un container créé à partie de l'image.