在 Docker 上创建和运行 PostgreSQL + RDKit 卡带环境
背景
我们将讨论化学数据库。
- 看起来,如果你在 PostgreSQL 中放置一个 RDKit cartridge (扩展),就可以基于 SQL 进行结构相似性搜索,看起来很有趣。
- 但是我找不到太多关于构建环境的信息…
- 我尝试它只是为了创造一个简单的环境
前提
- 包括 Docker Desktop
- 它包含 psql(postgreSQL 的客户端),并且还通过 PATH
first part
second part
third part
Dockerfile、映像准备
从头开始创建环境很困难。 Git Hub 上提供了多个 Dockerfile,用于将 RDKit 添加到 Docker 的 PostgreSQL 映像,因此我们将使用它们。
GitHub - rvianello/docker-postgres-rdkit: The PostgreSQL image, just extended with the RDKit cartridge
在撰写本文时,更新是最新的,所以这次我使用了上面的 DockerFile。
将其放在您选择的文件夹中(我们称之为 D:\rdgres),并在 Powershell 中按顺序运行以下命令:
- cd D:\rdgres
- docker image build -t rdgres
就我而言,构建大约需要 20-30 分钟。成功完成后,下一步是从映像创建容器并运行它。
- docker run --name myrdgres -p 5432:5432 -e POSTGRES_PASSWORD=mypassword -d rdgres
- # --name コンテナ名 今回はmyrdgres
- # -p [ホスト側のポート]:[コンテナ側のポート]
- # -e 環境変数
- # -d バックグラウンド実行 [イメージ名]
提醒一下,run 命令会从镜像创建一个容器(一个独立的进程)并运行它。
创建数据库并应用扩展
目前,postgreSQL 正在容器 myrdgres 中运行。 接下来,我们将创建一个数据库。(在下文中,原来是 # 的部分已更改为双字节字符,因此不会被注释掉。 )
首先进入集装箱:
- docker exec -it myrdgres /bin/bash #まずPowershellでこれを実行すると
- >> root@aa0bb1234567:/# #こんな風になりコンテナ(PostgreSQL)のbashを操作できるようになる
创建数据库:
- root@aa0bb1234567:/# psql -U postgres #ユーザーpostgresでpostgresqlにログイン
- postgres=# create database testdb; #データベース作成
- postgres=# \l #データベースが作成できてるか確認
验证是否已添加新数据库(在本例中为testdb)。
接下来,将 RDKit 扩展添加到 testdb。
- postgres=# \q #一旦出る
- root@aa0bb1234567:/# psql -c ‘CREATE EXTENSION rdkit’ testdb -U postgres #拡張機能適用
- CREATE EXTENSION
- root@aa0bb1234567:/# psql testdb -U postgres #testdbにログイン
- testdb=# \dx #確認
如果它有效,则 rdkit 已添加到 testdb 扩展中。
创建表并向其添加数据
接下来,制作一个表格。 从屏幕中,使用以下命令创建一个表。
创建表:
- testdb=# CREATE TABLE compounds (
- id serial PRIMARY KEY,
- name TEXT,
- mol_weight REAL,
- xlogp REAL,
- smiles TEXT);
接下来,我们将输入包含化学结构信息的数据。
在本例中,我们将使用从 Pubchem 下载的 CSV 数据。 由于我们想要进行结构表达式搜索,因此我们保留了 smiles 列。
此数据通过 docker 命令发送到容器中。 我想从容器外部进行操作,因此我将独立于我一直在使用的 PowerShell 启动 PowerShell。
新推出的PowerShell:
- docker cp (ホストPC側のファイルパス)/compound.csv myrdgres(コンテナ名):/tmp/data.csv
- #Successfully copied ookB to myrdgres:/tmp/data.csv
然后,我不再使用此 Powershell,因此我关闭它,并使用 Powershell 的 COPY 命令将数据添加到表中,该 Powershell 到目前为止一直在运行 postgreSQL。
将数据复制到表:
- testdb=#\COPY compounds(name,mol_weight,xlogp,smiles) FROM ‘/tmp/data.csv’ DELIMITER ‘,’ CSV HEADER;
- #COPY 1000
查看数据:
- SELECT name,smiles FROM compounds;
结构搜索试验
让我们来试一下 RDKit 磁带盒独有的结构搜索。
子结构搜索:
- SELECT * FROM compounds where smiles @> ‘C1=CC=C(C=C1)C(=O)O’
- ORDER BY mol_weight ASC;
- # 安息香酸骨格を含む構造、分子量小さい順
成功!
相似结构检索:
- SELECT *, tanimoto_sml(rdkit_fp(smiles), rdkit_fp(‘CCCCOC(=O)C1=CC=CC=C1C(=O)OCCCC’)) as tani
- FROM compounds
- WHERE tanimoto_sml(rdkit_fp(smiles), rdkit_fp(‘CCCCOC(=O)C1=CC=CC=C1C(=O)OCCCC’)) > 0.8
- ORDER BY tani DESC;
- #ジブチルフタレートっぽい構造、似てる順(谷本類似度順)
成功!
如果你连接 RDKit + python 可以做更多的乐趣。