启动一个 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
,下面这个例子将设置默认的locale
为de_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 之后)也能提供基本的兼容。