Rdkit 和 Open Babel 是计算化学科学家们经常用到的两个开源库。有的项目需要这两个库结合使用,但是手动安装相当会比较麻烦,因此我构建了一个 Docker 镜像包方便大家使用,并且把构建的过程做了一次记录。
镜像已经上传到 dockerhub 上面,镜像的地址为:
https://hub.docker.com/r/guoqun/pybel_rdkit_python3_debian
目录
拉取基础镜像
在 dockerhub 上已经有 Rdkit 最新的镜像包,我们没有必要重新构建,接下来将基于 rdkit-python3-debian 进行构建。
https://hub.docker.com/r/informaticsmatters/rdkit-python3-debian
拉取最新的 rdkit-python3-debian 镜像包
sudo docker pull informaticsmatters/rdkit-python3-debian:latest
镜像构建
新建构建镜像的目录
mkdir dockers && cd dockers
更改 Debian 的下载源
在本地目录新建 sources.list 文件然后放入以下内容:
# etc/apt/sources.list
deb http://mirrors.aliyun.com/debian stable main contrib non-free
deb http://mirrors.aliyun.com/debian stable-proposed-updates main contrib non-free
deb http://mirrors.aliyun.com/debian stable-updates main contrib non-free
deb-src http://mirrors.aliyun.com/debian stable main contrib non-free
deb-src http://mirrors.aliyun.com/debian stable-proposed-updates main contrib non-free
deb-src http://mirrors.aliyun.com/debian stable-updates main contrib non-free
下载openbabel安装包
openbabel-3-0-0a2 下载链接:
https://github.com/openbabel/openbabel/archive/openbabel-3-0-0a2.tar.gz
可以使用 wget 进行下载
wget https://github.com/openbabel/openbabel/archive/openbabel-3-0-0a2.tar.gz
新建 Dockerfile
新建 Dockerfile 文件,放入以下内容:
FROM informaticsmatters/rdkit-python3-debian:latest
USER root
COPY openbabel-3-0-0a2.tar.gz /tmp/
COPY sources.list /etc/apt/sources.list
WORKDIR /tmp/
RUN apt-get update -y &&\
apt-get install -y build-essential\
cmake\
gcc\
git\
libxml2-dev\
libcairo2-dev\
libeigen3-dev\
make\
nano\
swig\
zlib1g-dev &&\
cp -r /usr/include/eigen3/Eigen /usr/include &&\
tar -zxf openbabel-3-0-0a2.tar.gz &&\
rm openbabel-3-0-0a2.tar.gz &&\
mv openbabel-openbabel-3-0-0a2 openbabel &&\
mkdir build &&\
cd build &&\
cmake ../openbabel -DPYTHON_BINDINGS=ON -DCMAKE_BUILD_TYPE=Debug -DRUN_SWIG=ON -DPYTHON_EXECUTABLE=/usr/bin/python3 &&\
make -j2 &&\
make install
WORKDIR /opt/
目前路径下面会有以下几个文件:
Dockerfile
openbabel-3-0-0a2.tar.gz
sources.list
构建镜像
运行 docker build 进行镜像构建
docker build --rm -t rdkit_pybel_debain:v1 -f Dockerfile .
镜像本地化
你可以根据自己的情况将 pip 源和时区进行本地化。Debian 的 pip 源可以在 /root/.pip/pip.conf 进行配置。
本地新建 pip.conf 文件,内容如下:
[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn
然后新建一个 dockerfile,可以命名为 Dockerfile_v2
FROM rdkit_pybel_debain:v1
ENV TZ=Asia/Shanghai
RUN set -eux; \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \
echo $TZ > /etc/timezone
RUN cd /root && mkdir .pip
COPY pip.conf /root/.pip/
然后通过以下命令构建新的镜像
docker build -t rdkit_pybel_debain:v2 -f Dockerfile_v2 .
容器测试
启动容器
通过 docker run 启动容器
sudo docker run -dit --name="pybel_rdkit_test1" rdkit_pybel_debian:v1 /bin/bash
进入容器
sudo docker exec -it pybel_rdkit_test1 /bin/bash
运行 python3
python3
测试 python 包引入
# 测试 pybel
from openbabel import pybel
mymol = pybel.readstring("smi", "C1=CC=CS1")
len(mymol.atoms)
# 测试 rdkit
from rdkit import Chem
Chem.inchi.MolToInchiKey
镜像推送
登录 dockerhub
docker login
更改镜像标签
docker tag rdkit_pybel_debian:v1 guoqun/pybel_rdkit_python3_debian:v1
推送镜像
docker push guoqun/pybel_rdkit_python3_debian:v1
参考资料
- Rdkit 镜像 dockerfile
https://github.com/InformaticsMatters/docker-rdkit - dkit-python3-debian 镜像包
https://hub.docker.com/r/informaticsmatters/rdkit-python3-debian - Open Babel 说明文档
https://open-babel.readthedocs.io/en/latest/index.html - Open Babel 3.0 版本与之前版本的区别
https://open-babel.readthedocs.io/en/latest/UseTheLibrary/migration.html#migrating-to-3-0