Ethercalc 是一個類似 google sheet 的共筆試算表服務。 (作者是數位政委唐鳳!) 除了 公用版 之外, 你也可以自己架設在私有雲裡。 最簡單偷懶的架設方法就用 docker。 電腦教室裡坐在隔壁的兩位 docker 新手, 還可以透過 「把我所架設的服務拿出來跟同學交換」 來學習 docker 的 -v (指定 volume 對應關係, 也就是與 host 共用某個目錄)、 -p (指定 port, 也就是通訊埠轉發)、 --link (建立 docker 之間的連結), 動手實作馬上比爬文更有感!
以下假設下指令的同學的是 Amy。 Ethercalc 需要用到 redis 資料庫, 所以每位同學需要跑兩個 docker instances。 假設我們想叫 redis 資料庫把檔案放在 host 的 /var/lib/redis-amy 底下。 (不需要事先手動建立。) 安裝並啟用 ethercalc 只需要兩步:
docker run --name redis-amy -d -v /var/lib/redis-amy:/data redis redis-server --appendonly yes docker run --name ecalc-amy -d -p 6500:8000 --link redis-amy:redis audreyt/ethercalc
然後就可以到瀏覽器查看 http://localhost:6500/home, 開始使用 ethercalc!
也邀請班上其他同學來你的 ethercalc 填寫。 (localhost 要改成你的電腦的 ip,
用 ifconfig 可以查得到。) 至少要有一格填上 "Amy" 或其他可識別的字串。
也請到別的同學的 ethercalc 服務去幫他塗鴉豐富內容。
註: home 這個頁面的名字可以自己任意取。 如果你不自選而是留空,
那麼會進入 ethercalc 首頁, 按下 「create spreadsheet」 之後,
它會幫你建一個很長的亂碼當作你的頁面名字, 等一下交換時會變得比較麻煩。
注意上面的指令: 冒號之前的, 都是在 host 上你自選的路徑/名字/埠號; 冒號之後的, 都是包裝 docker 的大大預先寫死在容器裡的路徑/名字/埠號。
再來要停用服務。 順序要反過來:
docker stop ecalc-amy docker stop redis-amy
這時若用 docker ps
會看不到這兩個
docker instances; 但用 docker ps -a
則可看到它們的狀態是 exited。
把 /var/lib/redis-amy 壓縮打包、 傳給同學 brad。 同樣地, 從 brad 那邊接收到他的打包檔之後, 解壓縮到 /var/lib/redis-brad 去。
Amy 在她自己的電腦上啟用另一組 (隔壁同學 brad 的) ethercalc 服務:
docker run --name redis-brad -d -v /var/lib/redis-brad:/data redis redis-server --appendonly yes docker run --name ecalc-brad -d -p 7500:8000 --link redis-brad:redis audreyt/ethercalc
現在用瀏覽器開啟 http://localhost:7500/home 看到的就是 brad 的 ethercalc 服務了! 到這裡, 你已大略理解 docker 如何透過 --link 來連結兩個 container instances。
如果還想鑽得更深一點, 可以這樣做:
先查看一下 redis-brad 的 IP:
docker inspect redis-brad | grep IPAddress
然後在 ecalc-brad 上面開一個 shell 來用:
docker exec -it ecalc-brad bash
在裡面查看一些環境變數:
env | grep '^REDIS_'
是不是看到了 redis-brad 的名字跟 IP 呢?
也就是說, docker engine 根據你在命令列上指定的
--link 設定了對應的環境變數,
讓 ecalc-brad 知道要請哪個 docker instance
幫它提供資料庫服務。 實驗結束後, 按 ^d 離開 ecalc-brad。
如果一個 ethercalc 不夠用的話 (為賦新辭強說愁的概念) ...
其實 Amy 原先自己的服務還在, 只是沒在跑,
所以你用上述指令也查不到 redis-amy 的 IP、
無法進入 ecalc-amy 的 shell。
用 docker start redis-amy
跟
docker start ecalc-amy
重新啟用 Amy 自己的服務,
現在就有兩個 ethercalc 服務可用了!
根據 官網文件, 以後新版的 docker 可能不再支援 --link, 而是要改用 user-defined networks。 不過這個練習可以順便學到 docker inspect 跟 docker exec, 很適合當作 hellow-world 跟 bash 之後、 認識狀態轉換 之前的 docker 第 1.5 課教材, 所以我還是把它寫下來 :-)
認識裝態轉換 => 認識狀態轉換
回覆刪除