環境版本:macOS 10.13.3 + Docker 17.12.0 + Metabase 0.28.1
安裝及基本操作
下載 Metabase 的 image:
docker pull metabase/metabase
用 image 建立 container:
docker run -d -p 3000:3000 --name testMetabase metabase/metabase
確認是否有建成:
docker ps
確認有的話就可以打開瀏覽器於網址列輸入:http://localhost:3000/,就能看到 Metabase 囉。
之後不用的話,輸入以下指令關掉 container
docker stop [containerID]
下次要再重啟的時候,輸入以下指令打開 container
docker start [containerID]
Metabase Container 內部分享
一般分享似乎是可以 push 到 Docker Hub,讓其他人 pull,但因為容器裡面有公司機密資料,只是要分享給同事的話,可以透過以下操作步驟。
- 首先把做好圖表的 container 轉成 image:containerID 可以 docker ps -a查詢,newRepositoryName / newImageName 取一個喜歡的 repository 跟 image 名字,newTagName 是版本。
docker commit [containerID] [newRepositoryName/newImageName]:[newTagName]
2. 確認是否有新增成功這個 image:
docker images
3. 確認有之後就可以把 image 存成 tar 檔:newTarName 取一個喜歡的名字,後面的參數則為剛才建 image 時取的名字跟版本。
docker save -o [newTarName] [repositoryName/imageName]:[tagName]
4. 把 tar 檔傳給同事
5. 同事那邊輸入指令載入 image:tarName 為 tar 檔名稱。
docker load --input [tarName]
6. 確認是否成功載入:
docker images -a
7. 同事把 images 還原為 container:
docker run -d -p 3000:3000 [repositoryName/imageName]:[tagName]
接著同事打開瀏覽器於網址列輸入:http://localhost:3000/,就能看到妳做好的 Metabase 囉。
Metabase Container 外部分享
如果在 Metabase 已經把 Dashboard 做好,並且要提供 user 觀看的話,就得架在雲端上,這邊是架在 GCP 上面。
- 首先把 image 改名為符合 Google 要的規則,以 gcr.io 開頭,然後 / 專案ID,再 / newRepositoryName/newImageName:
docker tag [repositoryName/imageName]:[tagName] gcr.io/[gcpProjectID]/[newRepositoryName/newImageName]
docker images 一下,確認有沒有改名成功。
2. 安裝 gcloud:到這邊下載 Google Cloud SDK,解壓縮後輸入指令
./google-cloud-sdk/install.sh
然後 source 一下(注意:Windows user 需 source 不同檔案)
source ./google-cloud-sdk/path.bash.inc
source ./google-cloud-sdk/completion.bash.inc
初始化:
gcloud init
確認:
gcloud config list
3. 把 image push 上去 GCP:
gcloud docker -- push gcr.io/[gcpProjectID]/[repositoryName/imageName]
4. 接著就能在 GCP 的 Container Registry 映像檔看到剛才 push 上去的東西。
點入印像檔裡面後,點部署至 VM:
接著輸入 VM 相關的資訊,記得把允許 HTTP 跟 HTTPS 流量勾起來,建立。接著就能在 GCP 上面 Compute Engine > VM 執行個體看到剛才建立的 VM,不過這時候點外部 IP 還看不到東西。
5. 到 GCP 上面的 VPC 網路 > 防火牆規則 > 建立防火牆規則,取個喜歡的名稱,目標代碼輸入 VM 名稱,IP 範圍我全開了打 0.0.0.0/0,把指定的通訊協定和通訊埠勾起來,輸入 tcp:3000。
6. 到 GCP 上的 Compute Engine > VM 執行個體,點入 VM 裡面編輯,在網路標記裡面輸入剛才防火牆規則的名稱,儲存。
7. SSH 進入 VM 裡面,docker images 確認有載入 image,接著建立 container:
docker run -d -p 3000:3000 --name testMetabase gcr.io/[gcpProjectID]/[repositoryName/imageName]
接著回到 VM 執行個體,點外部 IP,把 https:// 刪掉,在 IP 後面加上 :3000 後就可以順利連進 Metabase 囉。
備份雲端的 Container 在本機
- 到 GCP VPC 網路新增防火牆規則,開了 3001 Port。
- 到 GCP Compute Engine > VM 執行個體,編輯 VM 加入防火牆規則。
- SSH 進去 VM 裡面,按照上述內部分享的步驟輸出 tar 檔。
- 在 VM 裡面開個簡單的 Server
python -m SimpleHTTPServer 3001
5. 在網址列輸入
[外部 IP]:3001/[tar 檔名稱]
就可以直接下載 image 的 tar 檔,再按照內部分享的說明,載入 image 建立 container,就能在本機備份放在 GCP 上面的 container 了。