使用docker搭建faiss向量数据库

本文介绍了如何在CentOS7的Docker镜像基础上,安装Miniconda,创建conda环境并尝试安装faiss-gpu和pandas。遇到问题后,作者通过编写Dockerfile构建镜像,并使用volume映射将数据文件夹挂载到容器中,以便在容器内运行程序。
摘要由CSDN通过智能技术生成

        为了不污染服务器环境,保证程序运行时有更好的隔离性,领导要求基于容器运行程序。

一、准备工作

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,可以开始表演了!

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码道功成

过程不易,恳请支持一下!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值