Dockerfileの紹介記事で、簡単なNode.jsDockerfileの例を紹介しました。
FROM node:14
WORKDIR /usr/src/app
COPY package*.json app.js ./
RUN npm install
EXPOSE 3000
CMD ["node", "app.js"]
注:二重引用符を使用してください
CMD
で ライン。一重引用符はエラーになります。
このDockerfileを使用してイメージを作成し、コンテナを実行してみましょう。
このファイルをdev/docker/examplenode
に作成します フォルダ。 app.js
で簡単なNode.jsアプリを作成します Expressを使用したファイル:
const express = require('express')
const app = express()
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(3000, () => console.log('Server ready'))
非常に単純ですが、依存関係が1つあります。 package.json
に追加する必要があります ファイルなので、実行します
npm init -y
npm install express
これで、node app.js
を実行できます そしてそれが機能することを確認してください:
このプロセスを停止し、これからDockerイメージを作成しましょう。
必要なのはapp.js
だけです 、package.json
およびpackage-lock.json
ファイル。
そしてDockerfile。 Dockerfile
を作成します 同じフォルダ内のファイルで、拡張子はありません(Dockerfile.txtではありません)。
node_modules
は自由に削除できます Expressライブラリとその依存関係が含まれるようになったフォルダですが、.dockerignore
を作成することもできます。 ファイルを作成し、node_modules
を追加します その中、Dockerにこのフォルダを完全に無視させるため。
.gitignore
のように機能します Gitで。
コマンドを実行します
docker build -t examplenode .
ノードイメージをダウンロードしてnpm install
を実行するにはしばらく時間がかかります 、その後、成功したメッセージが表示されます。
node
のようなベースイメージを最初にダウンロードした後、注意することが重要です。 ここで使用しているものはローカルにキャッシュされるため、再度ダウンロードする必要はなく、イメージの構築プロセスがはるかに高速になります。
これで、イメージからコンテナを実行できます:
docker run -d -p 3000:3000 --name node-app examplenode
これで、DockerDesktopで実行されているイメージを確認できます。
また、[ブラウザで開く]ボタンをクリックして、ポート3000で実行されているアプリを開くことができます。
ちょうど前のように!現在を除いて、アプリは完全に分離された独自のコンテナーで実行されており、Dockerが提供するすべての利点を使用して、コンテナー内で必要なバージョンのノードを実行できます。
たとえば、コンテナを削除して、3000ではなくポート80で実行できます。
docker run -d -p 80:3000 --name node-app examplenode
イメージを変更する必要はありません。変更するのはポートマッピングだけです。結果は次のとおりです。