PostgreSQL Service

注:

这个例子环境是假设你已经运行了docker进程,更多详细信息请查看运行例子,如果你不喜欢sudo,你可以用户授权命令和docker组

在docker安装PostgreSQL

运行一个docker容器shell

  1. sudo docker run -i -t ubuntu /bin/bash

升级依赖包

  1. apt-get update

安装 python-software-properties, software-properties-common, wget and vim.

  1. apt-get -y install python-software-properties software-properties-common wget vim

添加PostgreSQL的存储库,它包含了PostgreSQL最新稳定版本9.3。

  1. wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
  2. echo "deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main" > /etc/apt/sources.list.d/pgdg.list
  3. apt-get update

最后,我们安装PostgreSQL9.3

  1. apt-get -y install postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3

现在,创建一个PostgreSQL超级用户,来创建数据库和其他工作,Vagrant’s 惯例角色名字是docker并且把docker的密码分配给它

  1. su postgres -c "createuser -P -d -r -s docker"

创建一个测试数据库名字也叫docker所有者是上边我们创建的docker角色

  1. su postgres -c "createdb -O docker docker"

调整PostgreSQL配置,远程连接到数据库。确保在 /etc/postgresql/9.3/main/postgresql.conf有以下行

  1. host all all 0.0.0.0/0 md5

另外, 在 /etc/postgresql/9.3/main/postgresql.conf 取消监听地址,像这样:

  1. listen_addresses='*'

注意

这对于开发postgresql设置是唯一的,请参考postgresql文档如何调整这些设置,以确保安全

退出

  1. exit

创建一个容器,给它添加名字。容器 在bash中有提示;你可以本地使用docker ps -a获得。

  1. sudo docker commit <container_id> <your username>/postgresql

最后通过docker运行postgresql服务

  1. CONTAINER=$(sudo docker run -d -p 5432 \
  2. -t <your username>/postgresql \
  3. /bin/su postgres -c '/usr/lib/postgresql/9.3/bin/postgres \
  4. -D /var/lib/postgresql/9.3/main \
  5. -c config_file=/etc/postgresql/9.3/main/postgresql.conf')

使用psql PostgreSQL服务器(您将需要连接到PostgreSQL客户机上安装这台机器。对于ubuntu,使用sudo apt-get安装postgresql-client)。

  1. CONTAINER_IP=$(sudo docker inspect -format='{{.NetworkSettings.IPAddress}}' $CONTAINER)
  2. psql -h $CONTAINER_IP -p 5432 -d docker -U docker -W

在这之前如果你需要,请创建用户或者数据库

  1. psql (9.3.1)
  2. Type "help" for help.
  3. docker=# CREATE DATABASE foo OWNER=docker;
  4. CREATE DATABASE

另外,提交你的新创建的镜像到docker index

  1. sudo docker login
  2. Username: <your username>
  3. [...]
  4. sudo docker push <your username>/postgresql

PostgreSQL服务自动启动

运行我们的镜像似乎很复杂,我们必须指定docker运行整个命令,让我们简化服务器启动时自动运行的命令。

  1. sudo docker commit -run='{"Cmd": \
  2. ["/bin/su", "postgres", "-c", "/usr/lib/postgresql/9.3/bin/postgres -D \
  3. /var/lib/postgresql/9.3/main -c \
  4. config_file=/etc/postgresql/9.3/main/postgresql.conf"], "PortSpecs": ["5432"]}' \
  5. <container_id> <your username>/postgresql

从现在开始,只需要输入 docker run /postgresql ,PostgreSQL就会自动启动了