@ty4z2008
2016-02-20T22:51:05.000000Z
字数 2098
阅读 2816
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配置文件:
FROM komljen/ubuntu
ENV PG_VERSION 9.3
ENV USER docker
ENV PASS SiHRDZ3Tt13uVVyH0ZST
ENV PGDATA /var/lib/postgresql/$PG_VERSION/main
ENV PGRUN /var/run/postgresql
RUN \
echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" \
> /etc/apt/sources.list.d/pgdg.list && \
curl -sL https://www.postgresql.org/media/keys/ACCC4CF8.asc \
| apt-key add - && \
apt-get update && \
apt-get -y install \
postgresql-${PG_VERSION} \
postgresql-contrib-${PG_VERSION} && \
rm -rf /var/lib/apt/lists/*
RUN \
echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/${PG_VERSION}/main/pg_hba.conf && \
echo "listen_addresses='*'" >> /etc/postgresql/${PG_VERSION}/main/postgresql.conf
COPY start.sh start.sh
EXPOSE 5432
RUN rm /usr/sbin/policy-rc.d
CMD ["/start.sh"]
添加启动脚本:
#!/usr/bin/env bash
#===============================================================================
CONF="/etc/postgresql/${PG_VERSION}/main/postgresql.conf"
POSTGRES="/usr/lib/postgresql/${PG_VERSION}/bin/postgres"
#-------------------------------------------------------------------------------
chown -R postgres /var/lib/postgresql
mkdir -p "${PGRUN}/${PG_VERSION}-main.pg_stat_tmp"
chown -R postgres $PGRUN
su postgres -c "/usr/lib/postgresql/${PG_VERSION}/bin/initdb"
echo "Creating superuser: ${USER}"
su postgres -c "${POSTGRES} --single -D ${PGDATA} -c config_file=${CONF}" <<EOF
CREATE USER $USER WITH SUPERUSER PASSWORD '$PASS';
EOF
#-------------------------------------------------------------------------------
exec su postgres -c "${POSTGRES} -D ${PGDATA} -c config_file=${CONF}"
#===============================================================================
上面的脚本执行后会创建一个数据库超级用户(自己定义)用户创建其他用户与数据库,然后对数据库进行初始化。但是值得注意的是如果数据目录data已经存在执行此脚本就会报错。
编译并运行容器
sudo docker build -t cron/postgres .
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