3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

この記事は日本語プログラミング言語「なでしこ」 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.jsonscriptsの中に起動コマンドを定義します。

package.json
{
  "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さえ動けば難しい環境構築をせず動かせる というのは結構ロマンですね🤭

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?