從頭開始創建一個簡單的 Node.js Hello World Docker 容器
在Dockerfile介紹文章中,我介紹了一個簡單的 Node.js Dockerfile 示例:
1 | FROM node:14 |
注意:在
CMD
行中使用雙引號。單引號將導致錯誤。
讓我們使用這個 Dockerfile 构建一個映像,然後運行容器。
我將在 dev/docker/examplenode
文件夾中創建這個文件。我在 app.js
文件中創建了一個簡單的 Node.js 應用,使用 Express 框架:
1 | const express = require('express') |
非常簡單,但是我們有一個依賴項。我需要將它添加到 package.json
文件中,所以我運行了以下命令:
1 | npm init -y |
現在你可以運行 node app.js
確保它正常運行:
停止這個進程,現在讓我們從這個創建一個 Docker 映像。
你只需要保留 app.js
、package.json
和 package-lock.json
文件。
還需要一個 Dockerfile。在同一個文件夾中創建一個無擴展名的 Dockerfile
文件(不是 Dockerfile.txt
)。
你可以自由地刪除 node_modules
文件夾,這個文件夾現在包含了 Express 庫及其依賴,但是你也可以創建一個 .dockerignore
文件,將 node_modules
加入其中,使 Docker 完全忽略這個文件夾。
它的功能與 Git 中的 .gitignore
類似。
運行以下命令:
1 | docker build -t examplenode . |
它將需要一些時間來下載 Node 映像並運行 npm install
,然後你將收到一個成功的消息。
值得注意的是,在你首次下載基礎映像(如我們在這里使用的 node
)之後,它將被本地緩存,因此你無需再次下載它,映像建立過程將會更加快速。
現在,我們可以從這個映像運行一個容器:
1 | docker run -d -p 3000:3000 --name node-app examplenode |
現在你可以在 Docker Desktop 中看到正在運行的容器映像:
你可以單擊 “Open in browser” 按鈕,在端口3000上打開正在運行的應用:
就像之前一樣!只是現在應用運行在它自己的容器中,完全隔離,我們可以在容器中運行任何我們想要的 Node 版本,並且享受 Docker 帶給我們的所有好處。
例如,你可以刪除容器並將其在端口80而不是3000上運行,執行以下命令:
1 | docker run -d -p 80:3000 --name node-app examplenode |
映像不需要改變,你只需要改變端口映射。以下是結果:
tags: [“Docker”, “Node.js”, “Container”]