測試目標
在Proxmox VE上,安裝一個 Zorin Linux 的 VM,跑 PsogreSQL docker image,試試它的極限。
1, 下載ISO,上傳 Proxmox。
Zorin-OS-18-Core-64-nit.iso
2. 建VM,裝系統。
VM ID:139
自動登入
3. 裝 Chrome
4. 裝Visual Studio Code
可以不裝,這是順便,供下一步測試用。
5. 安裝Docker
安裝方法:
Install Docker Engine on Ubuntu
在加入 docker repository 之後,請把 /etc/apt/sources.lisr.d/docker.sources 最後面加上一行:
Architectures: amd64
這樣就不會每次在下sudo apt update -y時,再出現沒有architecture 'i386'的錯誤訊息。(其實也可以在過程中就加入)
安裝好了之後,如果不想每次都要用sudo才能執行 docker,可以:
sudo usermod -aG docker $USER
newgrp docker
可以用 docker version 試看看。
6. 補充一下,這台的IP是內部私有IP:
7. 建立一個共用的volume
docker volume create postgres-volume
按照Docker的預設,它會在Zorin OS上建立一個 /var/lib/docker/volumes/postgres-volume/_data 的目錄,存放 volume,所以你所建的PostgreSQL的資料庫物件以及資料都會好好地保存在這裡,即使Docker Cintainer結束,Database物件仍會保留下來。
8. 執行一個 postgres 的 container,參數是:POSTGRES_USER=postgres、POSTGRES_PASSWORD=password,以 5432 port 對外,然後使用剛才建立的 volume,採用 17.2 版:
docker run --name postgres \ -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=password \ -p 5432:5432 \ -v postgres-volume:/var/lib/postgresql/data \ -d postgres:17.2
9. 看看有沒有執行:
docker container ls -f name=postgres
10. 由於使用 -d 參數,所以回應 (stdio) 完全看不到,但是可以用以下看到 log:
docker logs postgres
11. 關機後能恢復嗎?(Gemini的回覆)
問:如果我之前執行的一個Docker container,由於我的電腦關機,讓它呈現Exit狀態,我能讓它恢復執行嗎?還是把它rm掉,重啟算了?
答:
當然可以恢復!這正是 Docker 容器化技術的優勢之一:容器的狀態和數據是會被保留的,即使電腦關機或容器崩潰,它只是進入了 Exited(退出)狀態,並不會自動消失。
不需要把它 rm 掉,除非你想要放棄之前的配置重新開始。
1. 如何恢復執行的步驟
你可以透過以下簡單指令讓它重新動起來:
第一步:確認容器名稱或 ID
如果你不記得容器的名字,可以用這行指令列出所有(包含已停止的)容器:
Bashdocker ps -a你會看到狀態顯示為
Exited (...)。第二步:啟動容器
使用 start 指令(將 keycloak 換成你的容器名稱或 ID):
Bashdocker start keycloak這會讓 Keycloak 在背景啟動,並保留你之前在裡面設定的所有 Realm、User 和 Client。
2. 「啟動 (start)」與「重啟 (rm + run)」的差別
這兩者最大的差別在於資料的持久性:
| 特性 | docker start (恢復) | docker rm + docker run (重啟) |
| 資料保留 | 會保留。你在後台建立的設定都在。 | 會消失。除非你有掛載外部 Volume。 |
| 設定變更 | 使用原有的啟動參數,無法更改環境變數。 | 可以重新輸入指令,更改密碼或端口。 |
| 適合場景 | 正常維護、電腦重啟、暫時停止。 | 測試壞了想重來、需要更新 Docker 參數。 |
3. 進階建議:如何讓它「自動復活」?
如果你希望以後電腦重啟或 Docker 服務啟動時,Keycloak 能自動跑起來,你可以在 docker run 時加入 --restart 參數,或者對現有的容器進行修改:
對現有容器增加自動重啟:
docker update --restart unless-stopped keycloak
這樣以後只要你不是手動下 docker stop,它都會在系統重啟後自動啟動。
疑難排解:如果恢復失敗怎麼辦?
有時候 Keycloak 恢復失敗是因為資料庫連線或某些暫存檔問題,你可以查看日誌找出原因:
docker logs keycloak
如果發現真的是設定搞爛了,那這時候才是 docker rm 掉,然後用原本的 docker run 指令重啟一個乾淨版本的時機。
這段影片詳細示範了如何操作已停止的容器,能幫你更直觀地理解
docker start 的用法。docker exec -it postgres psql -U postgres
昨天我有建立一個 table,所以可以用 \d 看到它,重新啟動狀態依舊:
建立 table 的 DDL,以下面那個 table 的建立指令:
CREATE TABLE trades(
id bigint,
buyer_id integer,
symbol text,
order_quantity integer,
bid_price numeric(5,2),
order_time timestamp
);
順便試試 psql 的一些指令和功能 (其實就是PostgreSQL伺服器本身的指令和功能):
運用剛才測試的SQL式子,把它們併起來產生 1,000 筆模擬資料:
INSERT INTO trades (id, buyer_id, symbol, order_quantity, bid_price, order_time)
SELECT
id,
random(1,10) as buyer_id,
(array['AAPL','F','DASH'])[random(1,3)] as symbol,
random(1,20) as order_quantity,
round(random(10.00,20.00), 2) as bid_price,
now() as order_time
FROM generate_series(1,1000) AS id;
SELECT id, buyer_id, symbol, order_quantity as quantity, bid_price, order_time
FROM trades
LIMIT 5;
這個簡單的 SQL 查詢可以讓你找出成交量最高的股票:
找出花費最多的前三名買家:
結論
如果你只是在寫一個普通大小appication,不會關連到其它系統,不是架構一整套極大的系統,不必安裝一套完整的PostgreSQL,那麼可以考慮使用Docker,把 Postgres Image 作為一個元件來使用,本文可以做為一個啟步。
參考資料:Just Use Postgres! All the database you need , Chapter 1, Denis Magda, Manning, November 2025.




























沒有留言:
張貼留言