2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Raspberry Pi上のDocker環境でMetabase構築

Posted at

はじめに

Raspberry Piの上にDocker環境を作って、Metabaseをコンテナとして起動する時のメモ。

環境

  • Raspberry Pi 3 Model B
$ cat /etc/os-release 
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

なお、ラズパイの初期設定などは他の記事などを参考にしてください。

やったこと

Docker / docker-composeインストール

こちらを参考にインストール。

$curl -sSL https://get.docker.com | sh

バージョン確認。

$docker --version
Docker version 20.10.3, build 48d30b5

次にdocker-composeをインストール。


$sudo pip3 install docker-compose

Metabaseコンテナ作成

結論として最終的に動いたDockerfileは次の通り。

FROM arm32v7/adoptopenjdk:11.0.10_9-jdk-hotspot

RUN mkdir /apps
WORKDIR /apps/

RUN apt update
RUN apt install -y wget
RUN wget https://downloads.metabase.com/v0.38.0.1/metabase.jar

EXPOSE 3000

CMD java -jar metabase.jar

コンテナを動かすまでに2つ引っかかった点がありました。

ARM用のコンテナイメージでないと動かない

こちらにも記載されているように、CPUアーキテクチャーがARMのため、Metabaseの公式ドキュメントに書かれている、次のコマンドだと動かないです。

docker run -d -p 3000:3000 --name metabase metabase/metabase

DockerhubのARM用のコンテナイメージの一覧から選ぶのですが、2021年2月23日時点でMetabaseのイメージはありませんでした。
Metabaseをローカルにインストールする方法に記載されているように、Java(今回はAdoptOpenJDKを使用)環境があるarm32v7/adoptopenjdk:11.0.10_9-jdk-hotspotというイメージを使いました。

apt updateでエラー発生(signature error)

最初にDockerイメージに入ってapt updateをしたらsignature errorが発生して実行できず。
調べてみると、まさにarm32v7のubuntuイメージで発生するようなエラーのようです。
こちらの記事によるとlibseccompというファイルに起因するエラーのようで、最新版をダウンロードしてインストールすることで回避できるとのこと。

なお、これはコンテナ内の問題ではなくて、ホスト側のラズパイ側の問題のようなので、ラズパイのコンソール上で以下のページで最新版のlibseccompを持ってきて、インストールします。
http://ftp.debian.org/debian/pool/main/libs/libseccomp/

$wget http://ftp.debian.org/debian/pool/main/libs/libseccomp/libseccomp2_2.5.1-1_armhf.deb
$sudo dpkg -i libseccomp2_2.5.1-1_armhf.deb 

DBも併せてdocker-composeで起動

以下のようにディレクトリ構造を用意しました。


$ tree
.
├── docker-compose.yaml
├── metabase
│   ├── Dockerfile
│   └── data
├── postgres
│   ├── data
│   └── init
│       └── create_db.sql
└── reverse-proxy
    └── nginx.conf

docker-compose.yamlは次の通りで、Metabaseの他にDB(PostgreSQL)とリバースプロキシ用のnginxを用意しています。
(リバプロは不要ですが、作ってみたかっただけです)

docker-compose.yaml
$ cat docker-compose.yaml 
version: '3'

services:
  metabase:
    build: ./metabase
    container_name: metabase
    ports:
      - 3000:3000
    volumes:
      - ./metabase/data:/metabase-data
    environment:
      - MB_DB_FILE=/metabase-data/metabase.db

  postgres:
    image: arm32v7/postgres:latest
    ports:
      - 5432:5432
    volumes:
      - ./postgres/data:/var/lib/postgresql/data
      - ./postgres/init:/docker-entrypoint-initdb.d
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password

  reverse-proxy:
    image: arm32v7/nginx:latest
    volumes:
      - ./reverse-proxy/nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 80:80
    depends_on:
      - metabase

create_db.sqlnginx.confについては以下の通りですが、大したことはしていないです。
リバプロはMetabaseへプロキシしているだけです。

create_db.sql
CREATE DATABASE qiita_db;
nginx.conf
events {
    worker_connections  16;
}
http {
    proxy_read_timeout 300;
    proxy_connect_timeout 300;
    proxy_send_timeout 300;
    
    server {
        listen 80;
        server_name localhost;
        location / {
            proxy_pass http://metabase:3000/;
            proxy_redirect off;
        }
    }
}

あとは起動します。

$docker-compose up -d
$ docker ps
CONTAINER ID   IMAGE                     COMMAND                  CREATED        STATUS        PORTS                    NAMES
0bb0fee61322   arm32v7/postgres:latest   "docker-entrypoint.s…"   25 hours ago   Up 25 hours   0.0.0.0:5432->5432/tcp   apps_postgres_1
db1acb60d29a   apps_metabase             "/bin/sh -c 'java -j…"   2 days ago     Up 2 days     0.0.0.0:3000->3000/tcp   metabase
7d6394803990   arm32v7/nginx:latest      "/docker-entrypoint.…"   2 days ago     Up 2 days     0.0.0.0:80->80/tcp       apps_reverse-proxy_1

動作確認

同じLAN内の別PCからブラウザで
http://<ラズパイのIPアドレス>
にアクセスすると無事にMetabaseの画面が表示されました。
※ 自分の環境だとラズパイのIPアドレスは192.168.0.20です。
※ 本当は初期設定画面が表示されますが、キャプチャは設定後のログイン画面になります(すみません、キャプチャし忘れました)。

Untitled.png

参考

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?