PostgreSQL在CentOS Docker里的安装练习

仅仅是一个练习,挑战尽可能所有工作都在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


                              请使用浏览器的分享功能分享到微信等