现在很多软件都喜欢以容器方式来运行,PostgreSQL
也不例外,在dockerhub上有不同PG版本的官方镜像(最新的是PG15),可以直接在线构建使用。
具体介绍和使用可以参见官方链接https://hub.docker.com/_/postgres,也可以参考已翻译好的操作部分,链接https://pgfans.cn/a/2110。
基于PG的其他数据库也可以参照官方镜像的制作。官方镜像制作的脚本都存放在Github上,链接为https://github.com/docker-library/postgres。下面我以`瀚高数据库安全版v4.5.8`为例,给大家分享一下镜像的制作过程。鉴于篇幅,脚本部分已经通过链接的方式来展现给大家。
导读
瀚高数据库v4.5.8的目前安装方式主要有二进制安装(rpm
或deb
包),为了更快上手体验,以及使多个异构数据库共存在于一台宿主机,我们就可以考虑使用Docker
容器来运行它,这样各厂商的数据库之间就不会互相影响了。如果你已经有了Docker
环境,那就可以跳过第一部分;如果你不想自己制作镜像,可以跳过第二部分,直接到第三、四部分运行 Docker hub 上的瀚高数据库镜像(非官方制作,仅供测试体验)和使用即可。
本文基于Centos7.9_x86-64
的宿主机上进行实验的,Docker版本20.10.23
,基于基础镜像debian:bullseye-slim
制作。
截至发稿,Docker版本23.0.1
也已经发布了,经过测试也能用,只不过第一次构建容器时,要等1-2分钟才开始初始化数据库实例。
Here we go!!! >>>
一、Docker 安装
使用 Docker 运行瀚高数据库之前,需要有一个 Docker 环境,推荐使用 YUM
安装。
1.1 设置 Docker 的 YUM 资源库
安装yum-utils
包(它提供实用程序yum-config-manager
)并设置资源库。
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo复制
1.2 安装 Docker Engine
Docker Engine
、
containerd
和
Docker Compose
:
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
复制
20.10.23
,按照如下命令来安装:
sudo yum install docker-ce-20.10.23 docker-ce-cli-20.10.23 containerd.io docker-compose-plugin
复制
1.3 查看版本并启动
docker -v
复制
结果:Docker version 20.10.23, build baeda1f
systemctl start docker
复制
二、镜像制作
构建脚本
可以交流一下。作者主要遵循官方的脚本来构建,做了部分修改来满足数据库的构建需要。构建使用的脚本均已传到
Github
上,链接为
:https://github.com/blatwo/dockerfiles.git
2.1 前期准备
2.1.1 构建目录
mkdir dfhgdb
cd dfhgdb/复制
2.1.2 相关文件
数据库服务相关的文件
放到构建目录
dfhgdb
下即可。把安装后的目录
/opt/highgo/hgdb-see-4.5.8/
压缩成
hgdb-see-4.5.8.tar.gz
,上传到构建目录。
openssl
,事实上也没必要安装,只要能生成
root.crt
、
server.crt
、
server.key
并放到这个目录
dfhgdb
下备用即可。
2.2 构建脚本 Dockerfile
2.3 入口点脚本 docker-entrypoint.sh
2.4 配置脚本 setup.sh
[root@S1 ~]# ll dfhgdb/
total 126320
-rw-r--r--. 1 root root 14587 Mar 11 22:57 docker-entrypoint.sh
-rw-r--r--. 1 root root 4142 Mar 11 22:57 Dockerfile
-rw-r--r--. 1 root root 129309345 Dec 19 13:42 hgdb-see-4.5.8.tar.gz
-rw-r--r--. 1 root root 1338 Dec 5 16:06 root.crt
-rw-r--r--. 1 root root 1338 Dec 5 16:06 server.crt
-rw-r--r--. 1 root root 1679 Dec 5 16:06 server.key
-rw-r--r--. 1 root root 2160 Feb 9 00:08 setup.sh复制
2.5 开始构建
docker build -t qiuchenjun/hgdb-see:4.5.8 .
复制
[root@S1 ~]# docker images
结果:
REPOSITORY TAG IMAGE ID CREATED SIZE
qiuchenjun/hgdb-see 4.5.8 3bdfd3151050 5 minutes ago 531MB复制
三、运行镜像
3.1 运行镜像
Linux
系统执行以下命令来运行即可:
docker run -dit --name=myhgdb-see-4.5.8 -p 5866:5866 \
-v /home/hgdb458:/home/highgo/hgdb \
-e TZ="Asia/Shanghai" \
-e LANG="en_US.utf8" \
-e POSTGRES_HOST_AUTH_METHOD="sm3" \
-e POSTGRES_PASSWORD="Hello@1234" \
-e POSTGRES_INITDB_ARGS="-e sm4 -c 'echo 12345678' -E 'UTF8'" \
qiuchenjun/hgdb-see:4.5.8
在Windows下执行:
docker run -dit --name=myhgdb-see-4.5.8 -p 5866:5866 `
-v D:\hgdata\hgdb458:/home/highgo/hgdb `
-e TZ="Asia/Shanghai" `
-e LANG="en_US.utf8" `
-e POSTGRES_HOST_AUTH_METHOD="sm3" `
-e POSTGRES_PASSWORD="Hello@1234" `
-e POSTGRES_INITDB_ARGS="-e sm4 -c 'echo 12345678' -E 'UTF8'" `
qiuchenjun/hgdb-see:4.5.8复制
说明:
通过 --name
为构建后的容器命名,-p
为宿主机端口与容器端口的映射。如果需要运行多个数据库容器,这里使用不同的命名以及不同的端口是最合适不过的;使用 -v
将宿主机目录映射到容器目录,这样可以从宿主机找到数据所在;通过 TZ
和LANG
可以设置时区和字符集;POSTGRES_HOST_AUTH_METHOD
用来设置客户端访问密码加密方式;POSTGRES_PASSWORD
设置三权用户的密码;POSTGRES_INITDB_ARGS
设置其他参数;授权文件请放到目录 /home/hgdb458/hgdb/data
下,命名为hgdb.lic
,每次重启都会加载它。如果不想每次重启都加载,加载完后,从本地的data目录下删掉即可。
3.2 在线仓库镜像
docker pull qiuchenjun/hgdb:v4.5.8
复制
四、容器操作
4.1 数据库配置
docker exec -it myhgdb-see-4.5.8 bash
复制
psql
:
docker exec -it myhgdb-see-4.5.8 gosu highgo psql highgo sysdba
复制
psql
相关命令了。需要注意的是前面的
highgo
是容器操作系统用户,而后面的
highgo
是默认数据库,
sysdba
是三权用户之一的DBA用户。
docker restart myhgdb-see-4.5.8
复制
4.2 授权安装
$PGDATA
对应的宿主机目录下,且文件名为
hgdb.lic
。如:上传宿主机映射目录
/home/hgdb458/data
:
后记
<<< There you go!!!
点击此处阅读原文
↓↓↓