【问题标题】:How to bundle a postgres db and docker image如何捆绑 postgres db 和 docker 映像
【发布时间】:2020-08-08 13:36:07
【问题描述】:

用例:用例是您说要提供给用户以练习/测试应用程序的小型“示例”数据库。用户没有安装 postgres,但他们有 Docker。您希望为用户提供一种轻松的方式来访问您定制的数据库,而无需他们安装 postgres。您可以为用户提供完全相同的数据库,并在需要时轻松更新它

提议的解决方案:我想捆绑一个 postgres db 和 postgres docker 映像,以便我可以给用户说一个 tar.gz 并且(假设他们有 Docker)他们可以解压缩 tar.gz 并拥有一个正在运行的 postgres db他们可以连接到。

我至少有两个挑战:

  • 到目前为止,从我的搜索看来,我可以定制 postgres Docker 映像,并且显然可以为 postgres Docker 映像定义数据路径。我还没有找到如何做到这一点,以及我是否可以将路径指定为解压后的 tar.gz 中的目录。
  • 解包后,用户运行 postgres Docker 容器,他们连接到 dB 并说进行一些更改。容器关闭后这些更改是否会持续存在?

问题:这有意义吗?如果是这样,我是按照正确的方式去做还是错过了什么?

尸检:

最后并建立@davidmaze 回复,以下是成功的。

version: "3"
services:
  postgres:
    image: postgres:12
    container_name: testdb_container
    volumes:
      - ./pgdata:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    ports: 
      - 5555:5432
volumes:
  pgdata:

目录结构如下所示。

除了“postgres”之外,我无法成功地将数据库命名为其他任何名称,但这没关系。

在创建 db 并填充它之后,我 tar.gz 'test-comp' 目录。收件人将其解压缩并运行“start.sh”,这只是一条启动消息和“docker-compose up -d”。 db 使用“stop.sh”关闭。

“init.sql”设置为使用预设模式生成空 dB。我提供了一个填充的 dB,但如果这个人想重新开始,那么他们可以清空目录(最好删除并创建一个新的空目录)并运行“start.sh”将调用“init.sql”。

【问题讨论】:

    标签: database postgresql docker


    【解决方案1】:

    如果您对分发 tar 文件作为其基础感到满意,您可以包含一个有效的 Docker Compose 设置及其数据。 docker-compose.yml 文件可以是非常典型的 Compose 设置:

    version: '3.8'
    services:
      postgres:
        image: postgres:12
        volumes:
          - ./pgdata:/var/lib/postgresql/data
        # ports: ['5432:5432']
      app: { ... }
    

    volumes: 块告诉 Docker 将本地 pgdata 目录挂载到 PostgreSQL 数据路径上的容器中。主机内容将替换图像中的该目录,因此您可以分发预加载的数据目录。相反,当数据库写回映像时,它将覆盖主机目录内容,并且这些更改将保留以供将来运行(但您始终可以将其删除并从 tar 文件重新开始)。

    tar cf myapp.tar \
      myapp/docker-compose.yml \
      myapp/pgdata
    

    这不会重新分发 postgres 映像本身,它只是重用标准 Docker Hub 映像。除非您处于孤立的网络环境中,否则这不应该是一个实际问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多