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 イメージを変更する必要はありません。変更するのはポートマッピングだけです。結果は次のとおりです。