PostgreSQLのDockerイメージにPLV8を適用
PostgreSQLのDockerイメージにPLV8の言語拡張を適用
PLV8はPostgreSQL用のJavaScript言語拡張機能です。
ちょっと探してみたんですがPLV8適用済のDockerイメージがなかったんで作ります。
PostgreSQLのdocker環境作ります
dockerfile-postgres
FROM postgres:12.9
ARG DB_LANG=en_US
RUN localedef -i $DB_LANG -c -f UTF-8 -A /usr/share/locale/locale.alias $DB_LANG.UTF-8
ENV LANG $DB_LANG.utf8
compose.yml
version: '3.4'
services:
db:
build:
context: .
dockerfile: ./dockerfile-postgres
args:
- DB_LANG=ja_JP
container_name: postgres
environment:
POSTGRES_USER: "root"
POSTGRES_PASSWORD: "passw0rd"
POSTGRES_INITDB_ARGS: "--encoding=UTF-8"
TZ: 'Asia/Tokyo'
ports:
- 0.0.0.0:5432:5432
hostname: postgres
user: root
docker起動します。
> docker-compose build
> docker-compose up -d
PLV8適用
> docker exec -it postgres /bin/bash
# apt update
# apt install vim python g++ wget git make pkg-config libtinfo5 ninja-build libc++-dev libc++abi-dev libglib2.0-dev
# apt install postgresql-server-dev-12
# cd /usr/local/src
# wget https://github.com/plv8/plv8/archive/v3.0.0.tar.gz
# tar -zxvf v3.0.0.tar.gz
# cd plv8-3.0.0
# make
# make install
# cd ..
# rm -rf *
# apt purge postgresql-server-dev-12
# apt autoremove postgresql-server-dev-12
# apt purge vim g++ wget git make
# apt autoremove vim g++ wget git make
# exit
> docker stop postgres
後はPLV8を適用したDockerイメージをコミットして自分のところにプッシュすればいつでも使えます。
> docker commit postgres xxxxx/postgresql-12.9-plv8:latest
> docker login
> docker push xxxxx/postgresql-12.9-plv8:latest
xxxxxの部分は自分のアカウントですね。
PLV8を適用したDockerイメージを使う
dockerfile-postgres
FROM xxxxx/postgresql-13.9-plv8:latest
ARG DB_LANG=en_US
RUN localedef -i $DB_LANG -c -f UTF-8 -A /usr/share/locale/locale.alias $DB_LANG.UTF-8
ENV LANG $DB_LANG.utf8
compose.yml
version: '3.4'
services:
db:
build:
context: .
dockerfile: ./dockerfile-postgres
args:
- DB_LANG=ja_JP
container_name: postgres
environment:
POSTGRES_USER: "root"
POSTGRES_PASSWORD: "passw0rd"
POSTGRES_INITDB_ARGS: "--encoding=UTF-8"
TZ: 'Asia/Tokyo'
ports:
- 0.0.0.0:5432:5432
hostname: postgres
volumes:
- pgdata:/var/lib/postgresql/data
- ./pginit:/docker-entrypoint-initdb.d
user: root
shm_size: 2g
volumes:
pgdata:
compose.ymlのあるフォルダ直下に pginit/init.sql を作成します。
このファイルでdocker起動時にplv8を有効にします。
init.sql
create extension plv8;
ただこの手順で作ったDockerイメージ・・・滅茶苦茶でかいです。3GBくらい?
やり方あってるのかなぁ、でも特に問題起きてないし「ヨシ!」ということで。
コメント
コメントを投稿