はじめに
Livebook はブラウザ上で Elixir や Erlang などのコードを実行し、結果を視覚化できるツールです
Python における Jupyter に相当します
Livebook のはじめ方はこちら
Livebook からは様々な方法でデータベースに接続することができ、データベース関連の処理を視覚化しながら試行錯誤することが可能です
本記事では Livebook と PostgreSQL を Docker コンテナで起動し、データベースの接続検証が容易に行える環境を構築します
作成するファイルのディレクトリー構成は以下のような想定です
(全て同一階層に作る)
.
├── docker-compose.with-db.yml
├── Dockerfile
└── Dockerfile.postgres
実装したコードはこちらのリポジトリーに格納しています
構築した DB を使ったデータベース操作については以下の記事を参考にしてください
Dockerfile の作成
Livebook や PostgreSQL 用のコンテナをカスタマイズ(パッケージの追加など)したい場合、 Docker ファイルを作成します
特にコンテナをカスタマイズする必要がない場合、作成しなくても問題ありません
Livebook 用 Dockerfile
Livebook 用の Dockerfile を Dockerfile
の名前で作成します
FROM ghcr.io/livebook-dev/livebook:0.11.2
...
# PostgreSQL の CLI をインストールする場合
RUN apt-get upgrade -y \
&& apt-get update \
&& apt-get install --no-install-recommends -y \
postgresql-client \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
コード例の全文はこちら
PostgreSQL 用 Dockerfile
PostgreSQL 用の Dockerfile を Dockerfile.postgres
の名前で作成します
以下のコードでは、 PostgreSQL でベクトル型を使いたい場合のパッケージ追加を実行しています
FROM postgres:15.3-bullseye
# ベクトル型を使う場合
RUN apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y postgresql-15-pgvector \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
コード例の全文はこちら
docker compose ファイルの作成
docker-compose.with-db.yml
を以下の内容で作成します
version: '3.2'
services:
livebook_with_db:
build: .
container_name: livebook_with_db
ports:
- '8080:8080'
- '8081:8081'
postgres:
build:
context: .
dockerfile: Dockerfile.postgres
container_name: postgres_for_livebook
ports:
- '5432:5432'
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=postgres
volumes:
- postgres_for_livebook:/var/lib/postgresql/data
volumes:
postgres_for_livebook:
コンテナをカスタマイズせず、 Dockerfile
や Dockerfile.postgres
を作らない場合は以下のように変更してください
image
で直接イメージを指定しています
services:
livebook_with_db:
- build: .
+ image: ghcr.io/livebook-dev/livebook:0.11.2
...
postgres:
- build:
- context: .
- dockerfile: Dockerfile.postgres
+ image: postgres:15.3-bullseye
...
コンテナの起動
以下のコマンドでコンテナを起動します
docker compose -f docker-compose.with-db.yml up --build
しばらくすると、以下のような表示が出てくるので、最後に表示された URL をブラウザで開きます
...
postgres_for_livebook | 2023-10-30 11:47:54.930 UTC [1] LOG: database system is ready to accept connections
...
livebook_with_db | [Livebook] Application running at http://localhost:8080/?token=xxx
...
以下のように Livebook のホーム画面が表示されれば OK です
DB接続確認
ローカルからの接続
ローカルのターミナルで以下のコマンドを実行します
psql --host=localhost --username=postgres postgres
docker compose の ports
で 5432:5432
を指定しているため、 localhost 指定で接続できます
最後の postgres
は DB名で、 docker compose で指定した POSTGRES_DB
の値です
以下のようにパスワードを聞かれるので入力します
(秘密情報なので入力した値は表示されません)
Password for user postgres:
パスワード入力後、以下のように表示されれば DB に接続できています
psql (16.0, server 15.3 (Debian 15.3-1.pgdg110+1))
Type "help" for help.
postgres=#
確認後、 exit
で DB から切断します
Livebook コンテナからの接続
以下のコマンドを実行し、 Livebook コンテナ内のシェルに入ります
docker exec -it livebook_with_db /bin/bash
コンテナ内で以下のコマンドを実行します
psql --host=postgres_for_livebook --username=postgres postgres
ホスト名は docker compose で指定したコンテナ名(container_name
の値)です
localhost ではないので注意してください
ローカルと同様、パスワードを入力すれば DB に接続できます
まとめ
docker compose によって、 Livebook と PostgreSQL をコンテナで起動できました
Livebook からの実際のデータベース操作については以下の記事を参考にしてください