docker postgres

启动一个 Postgres 实例

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d daocloud.io/postgres

这个镜像会导出 Postgres 的 5432 端口, 因此通过标准的link机制就可以方便的访问 Postgres 数据库实例。 容器启动时会通过initdb自动创建默认的 postgres用户和数据库。 数据库postgres是可以被用户,工具和第三方应用程序访问的默认数据库。

参考Postgres 文档

从应用中连接数据库

docker run --name some-app --link some-postgres:postgres -d application-that-uses-postgres

或者通过 psql

docker run -it --link some-postgres:postgres --rm postgres sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'

环境变量

Postgres 镜像通过一系列环境变量来配置容器,虽然这些环境变量都不是必须的,但是它们会极大的方便您使用镜像。

POSTGRES_PASSWORD

推荐您使用镜像时指定这个环境变量,它用来设置超级用户的密码。 默认的超级用户是由环境变量POSTGRES_USER指定的。 在开始的例子中,超级用户密码被设置为 "mysecretpassword"。

POSTGRES_USER

这个可选的环境变量是搭配POSTGRES_PASSWORD 一起来设置用户名和密码的,它会创建一个指定名称的超级管理员和同名数据库。 如果没有设置这个环境变量,将使用默认值postgres

如何扩展这个镜像

如果您希望在这个镜像的派生镜像中执行额外的初始化工作,可以在/docker-entrypoint-init.d目录下增加*.sh脚本 (如果该目录不存在则创建目录),在初始化过程调用initdb创建默认的postgres用户和数据库后,它会执行该目录下的所有*.sh脚本完成额外初始化操作再启动服务。

如果您希望在初始化中执行 SQL 语句,强烈建议您使用 Postgres 单用户模式

您还可以通过一个简单的Dockerfile设置locale,下面这个例子将设置默认的localede_DE.utf8

FROM daocloud.io/postgres:9.4
RUN localedef -i de_DE -c -f UTF-8 -A /usr/share/locale/locale.alias de_DE.UTF-8
ENV LANG de_DE.utf8

因为数据库初始化仅发生在容器启动时,因此您可以在数据库创建前设置语言。

注意

如果容器启动时没有数据库,Postgres 会为您创建一个默认数据库。虽然这是 Postgres 正常的行为,但它意味着在这个阶段数据库是不接受连接请求的。 这个行为会对一些自动化工具产生影响,比如 docker-compose 会同时启动多个容器。

支持的Docker版本

这个镜像在 Docker 1.7.0 上提供最佳的官方支持,对于其他老版本的 Docker(1.0 之后)也能提供基本的兼容。

原文地址:https://www.cnblogs.com/SZLLQ2000/p/5433721.html