Postgres 精简 Docker 镜像仅包含“psql”客户端

pay*_*yne 25 postgresql psql docker

我正在寻找一个 Docker 映像,该映像仅具有使用shell 中的客户端调用外部 Postgres 数据库所需的所有组件psql。我不需要本地启动数据库或任何东西。

我发现了jbergknoff/postgresql-client,我还没有测试过,但我最惊讶的是似乎没有任何官方图像。

目前我正在使用postgres:12-alpine,但它只是作为 Kubernetes 中启动的 CronJob 的一部分,它负责通过调用 Postgres 函数每隔一段时间触发一次对某些表的清理。

有人有什么可以推荐的吗?或者有什么见解可以分享?

rij*_*jam 20

恕我直言,创建我们自己的 Docker 镜像实际上比依赖第三方来满足这种琐碎的需求更好。供应链安全已经够棘手的了。

这是我的 docker 文件的内容PgClientDockerfile

FROM alpine:3.15
RUN apk --no-cache add postgresql12-client
ENTRYPOINT [ "psql" ]
Run Code Online (Sandbox Code Playgroud)

这是我的摘录docker-compose.yml

version: '3.7'
services:
  pg_client:
    environment:
      PGDATABASE: ${pg_database}
      PGHOST: ${pg_host}
      PGPORT: ${pg_port}
      PGUSER: ${pg_user}
      PGPASSWORD: ${pg_password}
    build:
      context: .
      dockerfile: PgClientDockerfile
Run Code Online (Sandbox Code Playgroud)

我有一个.env文件,其值如下:

pg_database=mydb
pg_host=mydbhost
pg_port=5432
pg_user=myuser
pg_password=mypassword

Run Code Online (Sandbox Code Playgroud)

这是一个示例用法(对于我的用例):

#!/usr/bin/env bash

docker-compose run --rm pg_client -c 'drop trigger if exists my_trigger on my_table RESTRICT'
docker-compose run --rm another_docker_service ./run_batch_insert.sh
docker-compose run --rm pg_client -c 'create trigger my_trigger after insert or update or delete or truncate on my_table for each statement execute procedure refresh_my_table_finder()'

Run Code Online (Sandbox Code Playgroud)