Skip to content

Latest commit

 

History

History
100 lines (57 loc) · 3.28 KB

postgresql.md

File metadata and controls

100 lines (57 loc) · 3.28 KB

#PostgreSQL Service

注:

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

##在docker安装PostgreSQL

运行一个docker容器shell

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

升级依赖包

apt-get update

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

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

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

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

最后,我们安装PostgreSQL9.3

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

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

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

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

su postgres -c "createdb -O docker docker"

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

host    all             all             0.0.0.0/0               md5

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

listen_addresses='*'

注意

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

退出

exit

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

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

最后通过docker运行postgresql服务

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

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

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

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

psql (9.3.1)
Type "help" for help.

docker=# CREATE DATABASE foo OWNER=docker;
CREATE DATABASE

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

sudo docker login
Username: <your username>
[...]

sudo docker push <your username>/postgresql

PostgreSQL服务自动启动

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

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

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