PostgreSQL docker容器初始化的一些数据的最佳实践

时间:2016-07-18 10:01:09

标签: postgresql docker

我用PostgreSQL在里面运行并暴露5432端口创建了docker镜像。 这个图像里面没有任何数据库。 Container是一个空的PostgreSQL数据库服务器。

我喜欢(或期间)“docker run”命令:

  • 附加db文件
  • 通过SQL查询执行创建数据库
  • 从转储中恢复数据库

我不想在容器关闭后保留数据。它只是一个临时开发服务器。

我怀疑可以让我的“docker run”命令字符串很简单/简单。

可能在运行命令中可以使用db / sql / dump挂载一些外部文件夹,然后在容器初始化期间创建db。

完成此任务的最佳/推荐方式和最佳做法是什么?可能有人可以指出我对应的docker示例。

1 个答案:

答案 0 :(得分:1)

这是一个很好的问题,可能是其他人多次问自己的问题。

根据docker指南,您不会在RUN命令中执行此操作。取而代之的是,您将在Dockerfile中创建一个ENTRYPOINT或CMD来调用自定义shell脚本,而不是调用postgres进程Direclty。在这种情况下,数据库将在“真实”文件系统中创建,但随后在关闭容器时将其清理。

这将如何工作?容器将启动,照常调用ENTRYPOINT或CMD,并使用初始化脚本来填充数据库。然后,在容器停止的那一刻,将通过信号通知相同的脚本并手动删除数据库内容。

CMD [“ cleanAndRun.sh”]

一个素描脚本“ cleanAndRun.sh”,取自Docker文档,并根据需要进行了修改。请记住,它只是一个草图,需要修改:

#!/bin/sh

# The script that is called in the trap must also stop the DB, so below call to
# dropdb is not enough, it just demonstrates how to call anything in the stop-container scenario!
trap "dropdb <params>" HUP INT QUIT TERM

# init your DB -every- time container starts
<init script to import to clean and import dump>

# start your postgres DB
postgres

echo "exited $0"