やかんです。ジャンルレス感ましましの当ブログですが、今回は「GatsbyプロジェクトのDocker化」という、いつにもましてニッチなテーマで書きます。

以前Qiitaに「既存のGatsbyプロジェクトをDocker化した。」という記事を上げたのですが、今回はその内容についてもっとのんびり書いていこうぜ、という内容です。

  • 対象となるGatsbyプロジェクト概要
  • 環境詳細
  • docker-compose.yml, Dockerfileのコード
  • 遭遇したエラーたち
  • 反省点

対象となるGatsbyプロジェクト概要

今回Docker化したのは、UmeeTという東大発オンラインメディアのサイトです(こちら)。このサイトはWordPressをヘッドレス化してフロントをGatsbyで実装するという作りになってます。

東大生やかんのブログ
やかん

先輩方が頑張って作ったようです。

環境詳細

  • Gatsbyのバージョン:3
  • 開発環境
    • macOS Monterey
    • 使用ツール;Docker Desktop for Mac, Docker Compose

docker-compose.yml, Dockerfileのコード

Dockerについては今もあまりわかってませんが、当時はもっとわかってなかったので色々手探りで開発を進めました。先にdocker-compose.ymlをとりあえず記述し、Dockerfileの編集をメインに作業しました。

両ファイルとも、この記述で本当にいいのかは不安が残りますが。。

東大生やかんのブログ
やかん

どんどんアップデート予定。

version: '3'
services:
  todai-umeet:
    build: .
    volumes:
      - ~/.ssh/:/root/.ssh
      - .dockervenv:/src/.venv
      - .:/src
    env_file:
      - .env.development
    ports:
      - 8000:8000
# NOTE: nodeをベースイメージにすると、sharp周りでエラーが起きる。cf. https://gotohayato.com/content/548/
FROM node:16-bullseye

WORKDIR /todai-umeet

COPY . ./
# NOTE: 念の為node_modulesを削除。cf. https://github.com/lovell/sharp/issues/2443
RUN rm -rf node_modules 
RUN yarn install
RUN yarn global add gatsby-cli

ENTRYPOINT [ "gatsby","develop","-H", "0.0.0.0", "-p", "8000" ]


遭遇したエラーたち

開発の中でたくさんのエラーたちに遭遇しました。その一部を紹介します。

sharp: Installation error: Use with glibc 2.28 requires manual installation of libvips >= 8.10.6

このエラーは、sharpというパッケージ絡みのエラーのようです。sharpのgitリポジトリでも、issue#2443として取り上げられていました。

このエラーが生じたときのDockerfileの記述は以下。成功時のDockerfileと違うのはFROMの記述のみです。

FROM node:16

WORKDIR /todai-umeet

COPY . ./

RUN rm -rf node_modules 
RUN yarn install
RUN yarn global add gatsby-cli

ENTRYPOINT [ "gatsby","develop","-H", "0.0.0.0", "-p", "8000" ]

色々調べてみると、libvipsを改めてインストールするといいというような記述を散見したので以下のようにDockerfileを編集したりしましたが、それでもダメでした。

FROM node:16

WORKDIR /todai-umeet

RUN apt-get update
RUN apt-get install -y sudo

RUN sudo apt-get install -y libvips-dev 

COPY . ./

RUN rm -rf node_modules 
RUN yarn install
RUN yarn global add gatsby-cli

ENTRYPOINT [ "gatsby","develop","-H", "0.0.0.0", "-p", "8000" ]

↑これでもエラーかわらず。

色々試してみて、このエラーはこちらの記事を参考にベースイメージを変更(つまり、FROMの記述を変更)したら解消されました。

FROM node:16FROM node:16-bullseye

cannot write /var/folders/xp/_yz9z1m14tl_qc135pm3z99h0000gn/T/tmpy6voazh1 because server did not provide an image ID ERROR: 

こちらはDockerのエラーです。何度も何度もコンテナを立ち上げまくったからでしょうか。。このエラーについては、こちらのQiitaに書きましたので、ぜひ遭遇した際にはご参照ください。

反省点

こちらの記事にも書きましたが、↓

もっと適切に課題を切り分けられるよう、頭を使うべきだったなと反省しています。

東大生やかんのブログ
やかん

精進します。

かなりニッチなテーマで書いた本記事ですが、これで終了となります。最後までお読みいただき、ありがとうございます!