完整的從 寫程式 → 寫 Dockerfile → 建立容器 → 部署 的實戰範例流程

好的,以下是一個完整的從 寫程式 → 寫 Dockerfile → 建立容器 → 部署 的實戰範例流程,以 Node.js API 應用為例,非常適合入門者或快速建立原型。


🧩 範例目標

建立一個簡單的 Node.js REST API,使用 Docker 容器化,最後透過本機或雲端部署運行。


🪛 第一步:撰寫程式碼

建立專案資料夾

mkdir hello-docker-node && cd hello-docker-node

初始化 Node.js 專案

npm init -y

安裝 Express

npm install express

建立 index.js

// index.js
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.send('🚀 Hello from Dockerized Node.js!');
});

app.listen(port, () => {
  console.log(`App is listening on port ${port}`);
});

📦 第二步:撰寫 Dockerfile

建立一個名為 Dockerfile 的檔案,內容如下:

# 使用 Node 官方映像
FROM node:18-alpine

# 建立工作目錄
WORKDIR /app

# 複製 package.json 並安裝依賴
COPY package*.json ./
RUN npm install

# 複製應用程式原始碼
COPY . .

# 開放埠口
EXPOSE 3000

# 啟動指令
CMD ["node", "index.js"]

📂 第三步:建立 .dockerignore

避免把不必要的檔案加入映像檔:

node_modules
npm-debug.log
Dockerfile
.dockerignore
.git

🔨 第四步:建立 Docker 映像檔

docker build -t hello-node .

成功後,你會看到訊息如:

Successfully tagged hello-node:latest

🚀 第五步:運行容器(本機測試)

docker run -p 3000:3000 hello-node

然後開啟瀏覽器或使用 curl:

http://localhost:3000

結果應該會顯示:

🚀 Hello from Dockerized Node.js!

☁️ 第六步:部署到雲端(選擇一種方式)

方法一:使用 Docker Hub + 雲主機(如 EC2、Linode)

  1. 登入 Docker Hub
    docker login
    
  2. 標記映像並推送
    docker tag hello-node your_dockerhub_username/hello-node
    docker push your_dockerhub_username/hello-node
    
  3. 在遠端主機拉取與運行
    docker pull your_dockerhub_username/hello-node
    docker run -d -p 80:3000 your_dockerhub_username/hello-node
    

方法二:使用 Docker + fly.io(一行指令部署)

  1. 安裝 CLI:
    brew install flyctl
    
  2. 初始化:
    flyctl launch
    

    它會引導你設定應用名稱與地區,並自動建立 fly.toml

  3. 部署:
    flyctl deploy
    

✅ 總結流程

步驟描述
🧑‍💻 寫程式建立簡單的 Node.js API
🧱 Docker 化撰寫 Dockerfile + .dockerignore
🛠️ Build使用 docker build 生成映像
🧪 測試本機使用 docker run 測試 API
☁️ 部署上傳 Docker Hub 或使用 fly.io / EC2 等部署

📁 專案結構最終會是:

hello-docker-node/
├── Dockerfile
├── index.js
├── package.json
├── package-lock.json
└── .dockerignore

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *