環境
VirtualBox に AlmaLinux をインストールして動作確認しています。
Express.js のアプリは、ゲストOSで「 Express-Generator 」を使い作成しています。
ホストOSのホームディレクトリに Express.js アプリの「 myapp 」を配置します。
- myapp
- Dockerfile
- app.js
- ... 中略 ...
Dockerfile の作成
Express.js のアプリのルートディレクトリ(myapp)に Dockerfile を作成します。
# ベースイメージとしてNode.jsの公式イメージを使用します。
# LTSバージョンを選ぶことを推奨します。
FROM node:20-alpine
# 作業ディレクトリを /app に設定します。
WORKDIR /app
# package.json と package-lock.json (存在する場合) をコンテナの /app にコピーします。
# これにより、依存関係のインストールがキャッシュされ、効率的なビルドが可能になります。
COPY package*.json ./
# アプリケーションの依存関係をインストールします。
RUN npm install
# アプリケーションのソースコードをコンテナの /app にコピーします。
COPY . .
# アプリケーションがリッスンするポートを公開します。
EXPOSE 3000
# アプリケーションを起動するコマンドを定義します。
CMD [ "npm", "start" ]
COPY . .: カレントディレクトリ(ホスト: AlmaLinux の myapp ディレクトリ)にあるすべてのファイルをコンテナの「 /app 」ディレクトリにコピーします。
COPY ホストOSのパス コンテナ内のパス
WORKDIR /app: コンテナ内で作業するディレクトリを「 /app 」に設定します。以降のコマンドはこのディレクトリで実行されます。
CMD [ "npm", "start" ]: コンテナが起動したときに実行されるデフォルトのコマンドを設定します。ここでは npm start を実行してNode.jsアプリケーションを起動します。
Docker イメージのビルド
myapp ディレクトリ内で、以下のコマンドを実行して Docker イメージをビルドします。
docker build -t myapp .
-t myapp: ビルドするイメージに myapp という名前(タグ)を付けます。
.: Dockerfile とアプリケーションのコンテキストがカレントディレクトリにあることを示します。
Docker コンテナの実行
docker run -d -p 3000:3000 --name nodeapp-container-name nodeapp
Docker コンテナの停止
# コンテナ名を指定
docker stop nodeapp-container-name
# コンテナIDで停止
docker stop b134e20a882e
.dockerignore ファイルの作成 (推奨)
.dockerignore ファイルは、Dockerイメージに含めたくないファイルやディレクトリを指定するために使用します。これにより、イメージサイズを小さく保ち、ビルド時間を短縮できます。myapp ディレクトリのルートに作成してください。
.dockerignore
node_modules
npm-debug.log
.git
.gitignore
Dockerfile
.dockerignore