使用docker搭建faiss向量数据库
主要是创建了一个基于centos7的镜像,然后按照miniconda、faiss-gpu 和 pandas,但是奇怪的是在这里不管是执行pip install 还是conda install,都执行不成功,但是把这个放到容器中执行就可以,咱也不知道为啥。-v:指定一个卷(volume),将宿主机的/home/ndf/faiss/data目录映射到容器的/app/data目录;创建一个名为faiss
为了不污染服务器环境,保证程序运行时有更好的隔离性,领导要求基于容器运行程序。
一、准备工作
1、创建文件夹faiss
该文件夹有用于存放faiss相关的文件及脚本
mkdir ~/faiss
2、创建data文件夹
cd ~/faiss
mkdir data
这个文件夹用于volume,映射容器内部文件夹
二、编写Dockerfile
# 使用 centos:7.9 作为基础镜像
FROM centos:7
# 安装必要的系统软件包
RUN yum install -y wget bzip2 vim
# 下载并安装 Miniconda
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
RUN bash miniconda.sh -b -p /opt/conda
RUN rm miniconda.sh
ENV PATH="/opt/conda/bin:${PATH}"
# 创建 conda 环境并安装 faiss-gpu 和 pandas
RUN conda create -y -n faiss_env python=3.10 && echo "conda activate faiss_env" >> ~/.bashrc
#RUN conda create -n faiss_env python=3.10
#RUN conda init bash
#RUN conda activate faiss_env && \
# pip3 install faiss-gpu -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
#RUN pip3 install pandas -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
# 设置工作目录
WORKDIR /app
主要是创建了一个基于centos7的镜像,然后按照miniconda、faiss-gpu 和 pandas,但是奇怪的是在这里不管是执行pip install 还是conda install,都执行不成功,但是把这个放到容器中执行就可以,咱也不知道为啥。
三、构建镜像
1)创建一个名为faiss-gpu的镜像,版本为v1;为了方便记录,创建一个构建的脚本build.sh
#!/bin/bash
docker build -t faiss-gpu:v1 .
执行即可:
sh build.sh
查看是否成功:
docker images |grep faiss
2)centos7拉取失败
如果构建过程中拉取centos失败,如上图所示,可通过以下几步解决:
第一步,手动拉取centos7
docker pull dockerhub.icu/library/centos:7
第二步,查看本地镜像名称:
docker images |grep centos
dockerhub.icu/library/centos 7 eeb6ee3f44bd 2 years ago 204MB
第三步,替换镜像
将Dockerfile第一行 FROM centos:7 替换为
FROM dockerhub.icu/library/centos:7
3)yum安装组件失败
执行yum install 时报如下错误:
=> ERROR [2/7] RUN yum install -y wget bzip2 vim 0.529 Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=container error was 0.529 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"
这是因为无法访问国外的网站,所以要更改yum源为阿里云的yum源,在yum install之前加上如下代码:
# 设置阿里云的 yum 源
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak && \
echo -e "[base]\n\
name=CentOS-\$releasever - Base\n\
baseurl=http://mirrors.aliyun.com/centos/\$releasever/os/\$basearch/\n\
gpgcheck=1\n\
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7\n\n\
[updates]\n\
name=CentOS-\$releasever - Updates\n\
baseurl=http://mirrors.aliyun.com/centos/\$releasever/updates/\$basearch/\n\
gpgcheck=1\n\
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7\n\n\
[extras]\n\
name=CentOS-\$releasever - Extras\n\
baseurl=http://mirrors.aliyun.com/centos/\$releasever/extras/\$basearch/\n\
gpgcheck=1\n\
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7\n\n\
[centosplus]\n\
name=CentOS-\$releasever - Plus\n\
baseurl=http://mirrors.aliyun.com/centos/\$releasever/centosplus/\$basearch/\n\
gpgcheck=1\n\
enabled=0\n\
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7\n" > /tmp/CentOS-Base.repo && \
mv /tmp/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo && \
yum clean all && \
yum makecache
# 安装必要的系统软件包
RUN yum install -y wget bzip2 vim
4)下载anaconda失败
在下载anaconda的过程中,非常慢,而且还下载失败,那就提前手动在外部宿主机下载好,然后再拷贝到容器
在宿主机和Dockerfile同级目录执行如下命令:
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh --retry 5 --retry-delay 10 --insecure
最终Dockerfile内容为:
# 使用 centos:7.9 作为基础镜像
FROM dockerhub.icu/library/centos:7
# 设置阿里云的 yum 源
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak && \
echo -e "[base]\n\
name=CentOS-\$releasever - Base\n\
baseurl=http://mirrors.aliyun.com/centos/\$releasever/os/\$basearch/\n\
gpgcheck=1\n\
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7\n\n\
[updates]\n\
name=CentOS-\$releasever - Updates\n\
baseurl=http://mirrors.aliyun.com/centos/\$releasever/updates/\$basearch/\n\
gpgcheck=1\n\
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7\n\n\
[extras]\n\
name=CentOS-\$releasever - Extras\n\
baseurl=http://mirrors.aliyun.com/centos/\$releasever/extras/\$basearch/\n\
gpgcheck=1\n\
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7\n\n\
[centosplus]\n\
name=CentOS-\$releasever - Plus\n\
baseurl=http://mirrors.aliyun.com/centos/\$releasever/centosplus/\$basearch/\n\
gpgcheck=1\n\
enabled=0\n\
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7\n" > /tmp/CentOS-Base.repo && \
mv /tmp/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo && \
yum clean all && \
yum makecache
# 安装必要的系统软件包
RUN yum install -y wget bzip2 vim
# 下载并安装 Miniconda
#RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh --no-check-certificate
# 复制本地下载的 Miniconda 脚本到镜像中
COPY Miniconda3-latest-Linux-x86_64.sh /tmp/Miniconda3-latest-Linux-x86_64.sh
RUN bash /tmp/Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda
RUN rm /tmp/Miniconda3-latest-Linux-x86_64.sh
ENV PATH="/opt/conda/bin:${PATH}"
# 初始化 Conda
RUN /opt/conda/bin/conda init bash
# 创建 conda 环境并安装 faiss-gpu 和 pandas
RUN conda create -y -n faiss_env python=3.10 && echo "conda activate faiss_env" >> ~/.bashrc
# 设置工作目录
WORKDIR /app
四、运行容器
创建一个run.sh的文件,内容如下:
docker run -it --name=ndf-faiss -v /home/ndf/faiss/data:/app/data faiss-gpu:v1 /bin/bash
--name:指定了一个名称为ndf-faiss的容器;
-v:指定一个卷(volume),将宿主机的/home/ndf/faiss/data目录映射到容器的/app/data目录;
命令最后是指定了使用的镜像及版本;
OK,可以开始表演了!
更多推荐
所有评论(0)