在 Dockercon 2017 上,Docker 官方公佈了與開源版本 Moby 不同的社群版,名為 Docker CE (Community Edition),在 Rapsberry Pi 上的安裝方式跟以往有沒有不同呢?!
事前準備
- Raspberry Pi 當然要有,從 Zero 到 3 的任一個型號都可以。
- 看一下 老朋友,新功能!關於那些開箱後馬上要作的事,把 Raspbian Jessie 基本設定完成。
- Docker 本身的系統需求請參閱 Install daemon and client binaries on Linux。
安裝 Docker CE
在 Docker 正式支援 Raspbian 之前,我們有幾種選擇:
- 別用 Raspbian,直接用 hypriot。
我是認真的,這是當初最好的選擇,OS 搞定了,Docker 也搞定了,良葛格就是選擇這個方式。 - 用 Arch Linux 從頭裝。
有些朋友不喜歡別人打包好的 Distro,怕別人會在裡面加料,就選擇 自己來搞定 囉。 - 當然也會有神人下載 source code 來 compile。
如果對這個懶人安裝法不放心,覺得自己來按步就班來比較好的話,可以參考 Docker 官網 Get Docker for Debian 的指令來執行 。
不過,千萬別把這兩種方法混著執行,我們用的只是個有著「工人智慧」的 Raspbian,可不像那個「人工智慧」的 AlphaGo,系統很可能會 crash 掉 ...... XD。
想安裝 Docker CE 穩定版,就只要這行指令。
curl -sSL https://get.docker.com/ | sh
如果有勇者想挑戰一下人品的話:
- 測試版請服用 curl -fsSL https://test.docker.com/ | sh
- 實驗版請服務 curl -fsSL https://experimental.docker.com/ | sh
讓 pi 帳號可以直接操作 docker,別老是用 sudo 或 root 來跑,避免發生 Docker daemon attack surface 問題。
sudo usermod -aG docker pi
重新啟動服務,並設定成開機後自動執行。
sudo systemctl restart docker
sudo systemctl enable docker
跑一下 Docker for ARM 的 Hello World 來測試一下是否正常。
docker run hypriot/armhf-hello-world
最後,重新開機後就完成了。
sudo reboot
ARM 版本的容器哪裡找?
先驗明正身,真的是在 Raspbian Jessie 上面跑 Docker CE。
由於 Raspberry Pi 是 ARM base CPU,在 Docker Hub 上面很多 Linux Container 都不能跑,因為它們是 for x86_64 CPU 的。
如果我們硬是要在 ARM 的設備跑 x86_64 的容器,只會出現 exec user process caused "exec format error" 這樣子的錯誤訊息,而不會有任何結果。
除了自己的容器自己包之外,我們當然也可以在 Docker Hub 上面找到很多 for ARM 的容器,這幾個算是還不錯的選擇 :
異常處理
本來以為這篇教學沒幾行指令,應該很好寫,沒想到居然因為安裝過程的問題卡了一整天,錯誤訊息是「invoke-rc.d: initscript docker, action "start" failed.」。
Docker Engine 安裝失敗,所以服務也起不來。
拜了好久的谷歌大神,終於找到 Ubuntu 14.04 apt-get install docker-engine fails 這篇文,沒想到解決居然是把這兩行取消註解,再重新開機就行了 ...... (崩潰)。
sudo vi /etc/login.defs
SYS_GID_MIN 100
SYS_GID_MAX 999
參考資料
- Raspberry Pi - Docker comes to Raspberry Pi
- Raspberry Pi - DEVICE TREES, OVERLAYS, AND PARAMETERS
- Docker - Get Docker for Debian
- hypriot - Run Docker on a Raspberry Pi 3 with onboard WiFi
圖片來源
- Docker 官網
- Raspberry Pi 官網
更新紀錄
- 2017/06/01 發文。
0 意見 :
張貼留言