1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

node.jsのDocker環境を作成する

Posted at

はじめに

こんにちは,Mottyです。今回はnode.jsのDocker環境を作っていく手順を説明します。

Dockerで環境構築するためのモチベーション

Dockerではコンテナ内にNode.jsと依存ライブラリがすべて閉じ込められているので、どの環境でも一貫して動する。開発者のローカル環境に依存せず、すべての依存関係が同一バージョンで実行されるため、"It works on my machine"問題を防ぐことができる、とのこと。

構築方法

WSL上のどこかのプロジェクトのルートディレクトリに以下2つを作成
・Dockerfile
・package.json

Dockerfileの構築方法

# ベースイメージとしてNode.jsの公式イメージを使用
FROM node:16

# 作業ディレクトリを設定
WORKDIR /usr/src/app

# package.jsonをコピーして依存関係をインストール
COPY package*.json ./
RUN npm install

#コンテナを終了させないためのコマンド
CMD tail -f /dev/null
package.json
{
    "name": "my-node-app",
    "version": "1.0.0",
    "description": "A simple Node.js app",
    "main": "app.js",
    "scripts": {
      "start": "node app.js"
    },
    "author": "Your Name",
    "license": "ISC",
    "dependencies": {
      "express": "^4.17.1"
    }
  }
  

この状態でDockerをビルドする。具体的には、以下のコマンドで↓

docker build -t my-node-app .

そのままコンテナ立ち上げ

docker run -d my-node-app

立ち上がっているコンテナのリストをみて、my-node-appがあればOK

docker ps

コンテナを終了させないための仕掛け

Dockerコンテナは通常、メインプロセスが終了するとコンテナも停止します。例えば、node app.jsなどのプロセスが終了した場合、コンテナ自体も停止します。

CMD tail -f /dev/null は、この動作を防ぐためのコマンドです。

tail コマンド は通常、ファイルの末尾を監視するために使います。-f オプションをつけると、指定したファイルに新しい行が追加されるたびに、その内容を表示し続けます。

/dev/null は、特殊なファイルで、どんなデータを書き込んでも捨てられ、空のままになります。つまり、読み出しても何も返ってきません。

tail -f /dev/null の意味は、「何もない空のファイルを永遠に監視し続ける」ということです。このプロセスは何もしないため、終了せずにずっと動作し続けます。

上記コマンドを使うと、Dockerコンテナの中で何もしないプロセスがずっと実行され続けることになり、コンテナも終了しません。つまりコンテナを終了させずに待機状態にしておき、他の操作(例えば、後からコンテナ内に入って作業をするなど)が可能になります。

検証

package.jsonがコピーされているのを確認します。
その後、app.jsを作成しpackage.jsonに定義したnpm startを走らせることでコンソールに出力結果が表示されればOKです

スクリーンショット 2024-09-16 120704.png

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?