iT邦幫忙

2026 iThome 鐵人賽

DAY 30
0
IT Operation

Docker 新手村:從容器到 PostgreSQL 的實戰之路系列 第 31 篇

Day 30 - 從 Docker 新手到 PostgreSQL:30 天實戰總結

  • 分享至 

  • xImage
  •  

學習目標

  • 回顧 30 天學習過的 Docker 核心觀念
  • 整理 PostgreSQL 與 Docker 的實際應用
  • 回顧 Node.js、PostgreSQL 與 Docker Compose 的整合
  • 整理這 30 天遇到的重要觀念
  • 完成這次 30 天實戰系列

終於來到 Day 30

不知不覺來到了最後一天。

這次的主題是:

Docker 新手村:從容器到 PostgreSQL 的實戰之路

一開始其實只是想學會怎麼使用 Docker 建立 PostgreSQL,並把它應用到自己的專題中。

但一路學下來才發現,Docker 並不只是「把 PostgreSQL 跑起來」這麼簡單。

從最開始的 Image、Container,到後來的 Port、Volume、Network、Dockerfile,再一路進入 PostgreSQL、Node.js 與 Docker Compose,最後才慢慢組成一個完整的開發環境。


第一階段:認識 Docker

一開始先從 Docker 最基本的觀念開始。

Image
   ↓
Container

Image 可以想成建立 Container 的模板,而 Container 則是真正執行起來的環境。

第一次執行:

docker run hello-world

算是正式踏進 Docker 的第一步。

接著也慢慢熟悉:

docker ps
docker ps -a
docker start
docker stop
docker rm
docker images
docker pull

原本看起來很多的 Docker 指令,實際操作幾次之後就慢慢熟悉了。


第二階段:Port、Volume 與 Network

接著開始認識 Container 不只是「跑起來」而已。

Port

透過:

-p 8080:80

可以讓自己的電腦存取 Container 中的服務。

Volume

透過 Volume:

Container
    ↓
Volume
    ↓
資料保存

即使 Container 被刪除,重要資料仍然可以獨立保存。

這對 PostgreSQL 特別重要。

Network

Network 則讓不同 Container 可以互相找到:

Node.js
   │
   ↓
postgres:5432
   │
   ↓
PostgreSQL

也在這裡真正理解 Container 裡的 localhost 指的是自己,而不是其他 Container。


第三階段:開始使用 PostgreSQL

熟悉 Docker 的基本操作後,就開始進入 PostgreSQL。

先使用 Docker 建立:

PostgreSQL Container

接著設定:

POSTGRES_USER
POSTGRES_PASSWORD
POSTGRES_DB

並透過 Volume 保存 PostgreSQL 的資料。

之後也開始使用 psql:

docker exec -it my-postgres psql -U postgres

從這裡開始真正進入資料庫操作。


第四階段:SQL 與資料表

進入 PostgreSQL 後,開始建立:

Database
Table

也實際操作 SQL 最基本的 CRUD:

Create → INSERT
Read   → SELECT
Update → UPDATE
Delete → DELETE

接著再把它應用到排班專題中,建立:

employees
schedules

並透過:

Primary Key
Foreign Key
JOIN

讓員工資料與排班資料產生關聯。

這時 PostgreSQL 已經不只是練習用的資料庫,而是真的開始和自己的專題產生連結。


第五階段:Docker Compose

學到後面,原本的 docker run 指令開始變得越來越長。

因此開始使用:

compose.yml

把:

Image
Port
Volume
Environment
Service

全部整理在同一個設定檔中。

原本需要輸入很多 Docker 指令,最後只需要:

docker compose up -d

就可以啟動設定好的服務。


第六階段:Node.js 串接 PostgreSQL

最後再把 Node.js 加進來。

先透過 pg 套件連線 PostgreSQL,再使用 Express 建立 API:

GET /employees
POST /employees

整個資料流程變成:

前端
  │
  ↓
Node.js / Express
  │
  ↓
PostgreSQL

最後再把 Node.js、PostgreSQL 和 pgAdmin 全部放進 Docker Compose。


最後完成的架構

經過這 30 天,最後完成的架構是:

                Docker Compose
                      │
                Docker Network
                      │
          ┌───────────┼───────────┐
          │           │           │
          ↓           ↓           ↓
       Node.js    PostgreSQL    pgAdmin
        :3000       :5432        :80
          │           │           │
          └─────────→ │ ←─────────┘
                      │
                      ↓
                Docker Volume
                      │
                      ↓
               PostgreSQL Data

從最開始只有:

docker run hello-world

到現在可以看懂並建立這樣的環境,這也是這 30 天最大的成果。


30 天學到的內容

這次一路接觸了:

Docker
├── Image
├── Container
├── Port
├── Volume
├── Network
├── Dockerfile
└── Docker Compose

PostgreSQL
├── Database
├── Table
├── SQL
├── Primary Key
├── Foreign Key
└── JOIN

Node.js
├── pg
├── Express
├── API
├── Environment Variable
└── PostgreSQL Connection

這些東西單獨看的時候,好像都是不同的技術,但實際做到最後才發現,它們可以全部串在同一個專案裡。


如果重新開始一次

如果重新學一次 Docker,我覺得最重要的不是一開始就背很多指令,而是先搞懂:

Image 是什麼?
Container 是什麼?
Port 為什麼要 Mapping?
Volume 為什麼可以保存資料?
Container 之間怎麼透過 Network 溝通?

這些觀念清楚後,再去看 Docker Compose 就會簡單很多。

因為 Compose 裡面的設定,其實就是把前面學過的東西全部整理在一起。


最後的小挑戰

  • [ ] 可以自己建立 PostgreSQL Container
  • [ ] 可以替 PostgreSQL 掛載 Volume
  • [ ] 可以使用 psql 操作資料庫
  • [ ] 可以建立 Database 與 Table
  • [ ] 可以完成基本 CRUD
  • [ ] 可以使用 Node.js 連線 PostgreSQL
  • [ ] 可以建立簡單 Express API
  • [ ] 可以看懂 Dockerfile
  • [ ] 可以使用 Docker Compose 管理多個服務
  • [ ] 可以說明 Port、Volume 與 Network 的用途

如果這些都能完成,就代表這 30 天真的沒有白走。


DAY30 心得

終於完成 30 天了!

一開始決定寫 Docker 的時候,其實對很多觀念都還不是很熟,像是 Image 和 Container 的差別、Volume 到底存在哪裡、為什麼 Container 裡不能一直使用 localhost,都是實際操作後才慢慢理解。

這次最大的收穫不是記住多少 Docker 指令,而是從完全拆開的觀念,一步一步把它們組成真正可以執行的環境。

從 Docker、PostgreSQL 到 Node.js,最後可以用 Docker Compose 一次把整套環境啟動,看到自己的程式成功連上資料庫時,真的會覺得前面學的東西都有串起來。

30 天結束並不代表 Docker 已經全部學完,反而比較像是終於把基礎打好。之後還有部署、Health Check、資料庫備份、效能與正式環境等很多東西可以繼續研究。

但至少現在的我,已經不是 Day 1 那個只知道「Docker 好像可以拿來跑 PostgreSQL」的新手了。

Docker 新手村,畢業!


上一篇
Day 29 - 用 Docker Compose 建立完整開發環境
系列文
Docker 新手村:從容器到 PostgreSQL 的實戰之路 共 31 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言