docker拉取centos7镜像
docker pull centos:7
创建名称为gp的容器,指定容器的hostname是gp4
docker run -itd --name gp -h gp4 centos:7
ceabe5439750 --生成容器的ID
拷贝greenplum的安装文件到容器
docker cp greenplum-db-xxx.bin ceabe5439750:/usr/local
进入容器,执行安装操作
docker exec -it gp /bin/bash
安装相关依赖包
yum install -y net-tools which openssh-clients openssh-server less zip unzip iproute.x86_64
docker中默认没有启动ssh,需要启动ssh
ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -P "" -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
/usr/sbin/sshd
创建gpadmin用户
groupadd -g 3060 gpadmin
useradd -u 3060 -g gpadmin -m -s /bin/bash gpadmin
echo gpadmin| passwd gpadmin --stdin
创建目录
mkdir -p /data/master
mkdir -p /data/primary
安装数据库到目录/usr/local/greenplum-db
/bin/bash greenplum-db-xxx.bin
修改目录权限
chown -R gpadmin:gpadmin /data
chown -R gpadmin:gpadmin /usr/local/greenplum-db*
gpadmin用户下操作
添加环境变量到.bashrc
source /usr/local/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/data/master/gpseg-1
export PGDATABASE=postgres
创建allhosts文件
gp4
创建gpinitsystem_config文件
ARRAY_NAME="EMC Greenplum DW"
SEG_PREFIX=gpseg
PORT_BASE=40000
declare -a DATA_DIRECTORY=(/data/primary /data/primary)
MASTER_HOSTNAME=gp4
MASTER_DIRECTORY=/data/master
MASTER_PORT=5432
TRUSTED_SHELL=ssh
CHECK_POINT_SEGMENTS=8
ENCODING=UNICODE
MACHINE_LIST_FILE=/home/gpadmin/allhosts
初始化数据库
gpinitsystem -c gpinitsystem_config
此时数据库创建成功,但有个问题,每次启动容器的时候,sshd服务都不会自启动,需要手工执行。下面我们用Dockerfile来自定义我们的镜像,让sshd服务自启动。
当前操作的容器提交保存为镜像gp:v1
docker commit -a 'yejf' ceabe5439750 gp:v1
创建 Dockerfile文件
FROM gp:v1
ENTRYPOINT ["/usr/sbin/sshd","-D"]
根据自定义的Dockerfile文件创建镜像
docker build -t gp:4 .
根据创建的镜像创建容器,使用本地端口映射到容器内端口5432
docker run -itd --name gp4 -h gp4 -p 4444:5432 gp:4
创建完成后,进入容器,直接切换gpadmin用户,能够正常启动数据库了,容器外可直接通过指定的4444映射端口访问数据库

把创建好的镜像导出到本地

小结
若安装多节点的greenplum数据库,在一台机器下却是没必要的。如果作为测试,docker安装好greenplum后打包成镜像,可以在一个新的环境快速运行greenplum数据库。
文章转载自叶同学专栏,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




