iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0

前幾天,我都在了解 TypeScript + Express 的 API。
雖然已經可以正常執行,但問題是——

如果我換一台電腦,要怎麼確保環境一樣、程式能跑?

這時候就輪到 Docker 登場了。
它的核心理念就是:讓「應用程式 + 執行環境」打包在一起跑


1️⃣ Docker 是什麼?

我用生活化的比喻來講:

傳統部署方式 Docker 部署方式
像搬家要重新組家具、買材料、裝修 像把整個房間塞進貨櫃,直接運走
依賴作業系統(例如 Node 版本、DB 安裝) 自己封裝環境,跑在哪都一樣
容易「在我電腦可以啊」 保證「哪裡都一樣」

Docker 的本質是一種 容器化技術,讓程式在獨立的「小世界」裡運行,不會互相干擾。


2️⃣ 重要名詞

名稱 意思
Image(映像) 一個「環境模板」,像程式的藍圖(包含系統、套件、設定)
Container(容器) 從 Image 建立出來的實體,真的在執行的程式
Docker Hub / Registry Image 的雲端倉庫(像 GitHub 但是放映像)
Dockerfile 用來描述怎麼「建造」一個 Image 的設定檔

3️⃣ 安裝 Docker

Mac、Windows、Linux 都可以使用 Docker Desktop
安裝完成後,打開終端機輸入:

docker --version

看到類似輸出就成功:

Docker version 27.0.3, build a89b842

4️⃣ 試著跑一個容器

我們先來跑一個最簡單的 nginx:

docker run -d -p 8080:80 nginx

意思是:

  • -d:背景執行(detached)
  • -p 8080:80:把主機的 8080 port 對應到容器內的 80 port

打開瀏覽器輸入:
👉 http://localhost:8080
你會看到熟悉的 nginx 預設頁面 🎉


5️⃣ 常用指令

指令 說明
docker ps 查看目前正在執行的容器
docker ps -a 查看所有容器(包含停止的)
docker images 查看本地映像
docker logs <container_id> 查看容器日誌
docker exec -it <container_id> bash 進入容器內操作
docker stop <container_id> 停止容器
docker rm <container_id> 刪除容器
docker rmi <image_id> 刪除映像

實際操作:

docker ps
docker exec -it <id> bash

進入 nginx 容器後你可以試著查看內容:

ls /usr/share/nginx/html

6️⃣ 試著拉取不同的 Image

docker pull node:18-alpine

這會下載一個輕量級的 Node.js 環境。
執行看看:

docker run -it node:18-alpine node

會進入 Node REPL:

> console.log("Hello from Docker!");
Hello from Docker!

這代表你在一個完全乾淨的 Node 環境中執行 JS 程式 🎯


7️⃣ Docker 的運作流程

整個流程可以這樣想像:

Dockerfile → build → Image → run → Container

一張圖快速記起來👇

[Dockerfile]  定義怎麼打包環境
      │
      ▼
[Image]  產生可重複使用的「模板」
      │
      ▼
[Container]  執行中的實體(可以有很多個)

8️⃣ 清理環境(可選)

測試完要清空環境,可以用:

docker system prune -a

會刪除所有未使用的容器與映像。


🎯 學習心得 / 今日收穫

今天的感覺就像第一次打開「部署的傳送門」⚙️

以前我只會跑 npm run dev
現在我可以讓程式在一個獨立環境中執行,完全不依賴電腦設定。

  • 我學會了 Image 與 Container 的概念
  • 能啟動 nginx、Node.js 容器
  • 知道常用指令:psexeclogsrun

Docker 給我的第一印象就是:乾淨、有秩序、可複製
明天 Day 29,我要自己寫一份 Dockerfile,
讓我的 TypeScript API 也能跑進容器裡 🚀


上一篇
Day27 - 持續成長學習藍圖 - TypeScript(小作品)
下一篇
Day29 - 持續成長學習藍圖 - Docker(Dockerfile)
系列文
《轉職學習日記:JavaScript × Node.js × TypeScript × Docker × AWS ECS》29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言