[关闭]
@ty4z2008 2016-02-20T22:51:05.000000Z 字数 2098 阅读 2826

[译]PostgreSQL在docker中的持久化

PostgreSQL pg db


目前很多场景下面仅仅使用pg做为持久化数据的容器,而配置是一个比较麻烦的事情。这里推荐一种比较便捷的方式,直接把数据库的安装目录制作成docker镜像.

postgresql的安装过程就不演示了,google:how to install postgresql on operating system platform.

首先需要停掉pg:

sudo stop postgresql

为了测试,拷贝一份安装目录到新的目录:

sudo cp -r /var/lib/postgresql /var/lib/postgresql-docker

下面是我使用的docker配置文件:

  1. FROM komljen/ubuntu
  2. ENV PG_VERSION 9.3
  3. ENV USER docker
  4. ENV PASS SiHRDZ3Tt13uVVyH0ZST
  5. ENV PGDATA /var/lib/postgresql/$PG_VERSION/main
  6. ENV PGRUN /var/run/postgresql
  7. RUN \
  8. echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" \
  9. > /etc/apt/sources.list.d/pgdg.list && \
  10. curl -sL https://www.postgresql.org/media/keys/ACCC4CF8.asc \
  11. | apt-key add - && \
  12. apt-get update && \
  13. apt-get -y install \
  14. postgresql-${PG_VERSION} \
  15. postgresql-contrib-${PG_VERSION} && \
  16. rm -rf /var/lib/apt/lists/*
  17. RUN \
  18. echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/${PG_VERSION}/main/pg_hba.conf && \
  19. echo "listen_addresses='*'" >> /etc/postgresql/${PG_VERSION}/main/postgresql.conf
  20. COPY start.sh start.sh
  21. EXPOSE 5432
  22. RUN rm /usr/sbin/policy-rc.d
  23. CMD ["/start.sh"]

添加启动脚本:

  1. #!/usr/bin/env bash
  2. #===============================================================================
  3. CONF="/etc/postgresql/${PG_VERSION}/main/postgresql.conf"
  4. POSTGRES="/usr/lib/postgresql/${PG_VERSION}/bin/postgres"
  5. #-------------------------------------------------------------------------------
  6. chown -R postgres /var/lib/postgresql
  7. mkdir -p "${PGRUN}/${PG_VERSION}-main.pg_stat_tmp"
  8. chown -R postgres $PGRUN
  9. su postgres -c "/usr/lib/postgresql/${PG_VERSION}/bin/initdb"
  10. echo "Creating superuser: ${USER}"
  11. su postgres -c "${POSTGRES} --single -D ${PGDATA} -c config_file=${CONF}" <<EOF
  12. CREATE USER $USER WITH SUPERUSER PASSWORD '$PASS';
  13. EOF
  14. #-------------------------------------------------------------------------------
  15. exec su postgres -c "${POSTGRES} -D ${PGDATA} -c config_file=${CONF}"
  16. #===============================================================================

上面的脚本执行后会创建一个数据库超级用户(自己定义)用户创建其他用户与数据库,然后对数据库进行初始化。但是值得注意的是如果数据目录data已经存在执行此脚本就会报错。

编译并运行容器

  1. sudo docker build -t cron/postgres .
  2. sudo docker run -d --name test -v /var/lib/postgresql-docker:/var/lib/postgresql -v /var/run/postgresql-docker:/v

原文地址:https://crondev.com/persistent-postgresql-inside-docker

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注