17
3

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 1 year has passed since last update.

ElixirAdvent Calendar 2023

Day 1

Livebook と PostgreSQL をコンテナで起動し、データベース検証環境を構築する

Last updated at Posted at 2023-11-01

はじめに

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:

コンテナをカスタマイズせず、 DockerfileDockerfile.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 です

スクリーンショット 2023-10-31 9.29.34.png

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 からの実際のデータベース操作については以下の記事を参考にしてください

17
3
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
17
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?