この記事は日本語プログラミング言語「なでしこ」 Advent Calendar 2024の4日目の記事です!(遅刻してしまいました・・。すみません > <)
なでしこでパパっと作ったWebアプリを、Dockerでコンテナ化してデプロイできたらとっても楽だな〜と思ったので、やってみようと思います!
今回Dockerでデプロイする物
WebSocketを使ったチャットアプリです。
WebSocketサーバー・HTTPサーバー・クライアントの全てをなでしこで記述しています。
参考:https://news.mynavi.jp/techplus/article/nadeshiko-51/
折角なのでWeb上に公開したかったのですが、サーブするサーバーが用意できなかったので断念しました><
気になった方はクローンして動かしてみてください。
今回は作ったものの説明は省いて、Dockerで動かすときの要点だけ書いていこうと思います!
モジュールをローカルで管理するようにする
開発時と同じ環境を作りやすいように、nadesiko3
などのパッケージは グローバルインストールではなく、ローカルにインストールします。
npm i nadesiko3 nadesiko3-websocket
ローカルインストールだとcnako3
コマンドは直接呼び出せないので、package.json
のscripts
の中に起動コマンドを定義します。
{
"dependencies": {
"nadesiko3": "^3.6.37",
"nadesiko3-websocket": "^3.6.5"
},
"scripts": {
"start": "cnako3 ./src/server.nako3"
}
}
Dockerfileを作る
FROM node:22
WORKDIR /app
COPY package.json /app
RUN npm i
COPY . /app
EXPOSE 3010
EXPOSE 3011
CMD ["npm", "start"]
なでしこ3はNode.JS上で作られているので、あらかじめNode.JSの環境が用意されたnode:22イメージを使います。
package.json
とそれ以外のファイルで別々にコピーしています。Dockerでは、その行に到達するまでのコマンド・ファイル構成に変化がなければ、そこまでの処理をスキップして前回のビルドキャッシュを使用してくれるので、ビルドが高速化できます。今回の場合なら、package.json
に変化がなければパッケージのインストール処理をキャッシュすることができるようになります。
コマンドを実行する
# ビルド
docker build -t nadesiko3-on-docker .
# 実行
docker run -d -p 3010:3010 -p 3011:3011 nadesiko3-on-docker
これで、localhost:3010にアクセスするとチャットアプリが起動するはずです!
終わりに
今回作ったチャットアプリのようなWebサービスを作るのであれば、Dockerはなでしことも親和性が高そうです!
どんな環境でも、Dockerさえ動けば難しい環境構築をせず動かせる というのは結構ロマンですね🤭