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