Metabase Docker Container 的安裝操作及 GCP 的部署

Pei Lee
6 min readMar 8, 2018

--

環境版本: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,但因為容器裡面有公司機密資料,只是要分享給同事的話,可以透過以下操作步驟。

  1. 首先把做好圖表的 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 上面。

  1. 首先把 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 在本機

  1. 到 GCP VPC 網路新增防火牆規則,開了 3001 Port。
  2. 到 GCP Compute Engine > VM 執行個體,編輯 VM 加入防火牆規則。
  3. SSH 進去 VM 裡面,按照上述內部分享的步驟輸出 tar 檔。
  4. 在 VM 裡面開個簡單的 Server
python -m SimpleHTTPServer 3001

5. 在網址列輸入

[外部 IP]:3001/[tar 檔名稱]

就可以直接下載 image 的 tar 檔,再按照內部分享的說明,載入 image 建立 container,就能在本機備份放在 GCP 上面的 container 了。

--

--

Pei Lee
Pei Lee

Written by Pei Lee

Data Team Lead @ Retail & E-commerce Industry

Responses (1)