PostgreSQL在CentOS Docker里的安装练习

来源:这里教程网 时间:2026-03-14 19:59:37 作者:

仅仅是一个练习,挑战尽可能所有工作都在Jupyter Notebook里实现(Docker安装除外),目的:

  • 练习Docker命令

  • 练习CentOS下的PostgreSQL12的安装

  • 练习Linux命令

  • 便于记录和完善流程

    基本系统要求

  • CentOS 7

  • PostgreSQL 12

  • Host无要求,我的是MacOS

    开始之前都准备工作

  • 下载安装Docker Desktop(https://www.docker.com/products/docker-desktop)

  • 已经准备好了Jupyter Notebook

    运行CentOS Docker

    !docker run --name pg12 --privileged=true  -p 5432:5432 \-d -it centos:7.7.1908 /usr/sbin/init

  • CentOS采用的是官方的 7. 7.1908版本(https://hub.docker.com/_/centos)

  • 为了接下来便于主机访问PostgreSQL,做了端口映射

  • 容器命名为pg12

  • 开启 privi leged权限,并执行/usr/sbin/init, 因为需要systemd执行权限

    在pg12容器里安装PostgreSQL

    rpm=" 
    !docker exec pg12 yum install -y {rpm}
    !docker exec pg12 yum install -y postgresql12 postgresql12-server

    创建第一个实例(使用 postgresql-12-setup命令)

    !docker exec -ti pg12 sh -c "mkdir  /etc/systemd/system/postgresql-12.service.d"
    !docker exec -ti pg12 sh -c "echo [Service]> /etc/systemd/system/postgresql-12.service.d/override.conf"
    !docker exec -ti pg12 sh -c "Environment=PGDATA=/var/lib/pgsql/12/data>> /etc/systemd/system/postgresql-12.service.d/override.conf"
    !docker exec -ti pg12 systemctl daemon-reload!docker exec -ti pg12 /usr/pgsql-12/bin/postgresql-12-setup initdb

    设置端口(默认5432)和listen_address

    !docker exec pg12 sh -c "echo 'port = 5432'>>/var/lib/pgsql/12/data/postgresql.conf" 
    !docker exec pg12 sh -c "echo \"listen_addresses = '*'\">>/var/lib/pgsql/12/data/postgresql.conf"

    检查容器IP

    !docker exec pg12  grep -v ip6 /etc/hosts

    允许127.0.0.1和172.17.0.1网段以trust模式访问数据库

    !docker exec pg12 sh -c  "echo 'host  all   all   127.0.0.1/32      trust' >>/var/lib/pgsql/12/data/pg_hba.conf"
    !docker exec pg12 sh -c  "echo 'host    all        all      172.17.0.1/32    trust' >>/var/lib/pgsql/12/data/pg_hba.conf"

    注:这里只是为了测试方便,不考虑安全因素

    启用,启动和停止 PostgreSQL服务

    !docker exec -ti pg12 systemctl enable postgresql-12
    !docker exec -ti pg12 systemctl start postgresql-12
    !docker exec -ti pg12 systemctl stop postgresql-12

    主机测试容器PostgreSQL

    !psql -Upostgres -h127.0.0.1 -p5432 postgres -c "select version()"

    执行容器上psql命令

    !docker exec  -ti pg12 runuser -l postgres -c  'psql -c "\du"'

    注:这里涉及到 runuser的应用(不使用su)

    利用ipython-sql来简化SQL

  • 如果没有安装ipython-sql,安装它

    !pip install ipython-sql

  • 加载sql魔法

    %load_ext sql
  • 连接容器数据库,

    %sql postgresql://postgres:@127.0.0.1:5432/postgres
  • 开始写SQL

    %sql select version();

    创建第二个实例

    !docker exec pg12 cp /usr/lib/systemd/system/postgresql-12.service usr/lib/systemd/system/db02.service
    !docker exec -ti pg12 \
    sed -i 's/Environment=PGDATA=\/var\/lib\/pgsql\/12\/data/Environment=PGDATA=\/var\/lib\/pgsql\/12\/data2/g'\
    /usr/lib/systemd/system/db02.service
    !docker exec pg12 /usr/pgsql-12/bin/postgresql-12-setup initdb db02
    !docker exec pg12 sh -c "echo 'port = 5433'>>/var/lib/pgsql/12/data2/postgresql.conf" 
    !docker exec -ti pg12 systemctl enable db02
    !docker exec -ti pg12 systemctl start db02
    !docker exec -ti pg12 systemctl stop db02
  • 实例名:db02

  • 数据路径: /var/lib/pgsql/12/data2

  • 端口:5433

  • 其它参考第一个实例的设置,或者根据需要进一步设置。

    后记,

    结果记录下来,代码很少,但中间走了不少弯路,但总算成功了。

    参考

  • https://computingforgeeks.com/how-to-install-postgresql-12-on-centos-7/

  • https://hub.docker.com/_/centos

  • https://pgstef.github.io/2018/02/28/custom_pgdata_with_systemd.html

    文章来源于alitrack   ,作者alitrack

  • 相关推荐