Jonathan Cutrell

Using Docker for Gatsby local development

October 19, 2020

After fighting a bit with my work-issued computer not wanting to build my Gatsby site, I finally decided to bite the bullet and build out a Docker image.

For those who are interested, image transformation was somehow tripping the malware blocker, causing a SIGKILL.

After trying (and failing) to fix this, I finally decided to fix the problem with a more permanent solution.

However, the “official” Docker image for Gatsby is a bit behind and hasn’t been updated.

Here’s the Dockerfile I’m using (named Dockerfile.dev).

FROM node:alpine
# Also exposing VSCode debug ports
EXPOSE 8000 9929 9230
RUN \
apk add --no-cache python3 make g++ && \
apk add vips-dev fftw-dev --update-cache \
--repository http://dl-3.alpinelinux.org/alpine/edge/community \
--repository http://dl-3.alpinelinux.org/alpine/edge/main \
&& rm -fR /var/cache/apk/*
RUN apk add automake autoconf libtool nasm
RUN npm install -g gatsby-cli
WORKDIR /app
COPY ./package.json .
RUN yarn install && yarn cache clean
COPY . .
CMD ["yarn", "develop", "-H", "0.0.0.0" ]

And here’s the docker-compose.yml:

version: '3'
services:
web:
build:
context: .
dockerfile: Dockerfile.dev
ports:
- "8000:8000"
- "9929:9929"
- "9230:9230"
volumes:
- /app/node_modules
- .:/app
environment:
- NODE_ENV=development
- GATSBY_WEBPACK_PUBLICPATH=/

This pulls almost directly from Daniel Stout’s setup, which I found here. (Turns out Daniel is also somehwere in TN.)

Running the image:

docker-compose up --build

Note, I had to go through some fiddly things that required installing the automake stuff. You may not need that line, but I did.

I plan to keep this Dockerfile updated as I continue to invest in this site, which is open source.


Written by Jonathan Cutrell, Director of Engineering at PBS and podcast host at Developer Tea. You can follow him on Twitter at @jcutrell.