环境信息
银河麒麟高级服务器操作系统V10
CPU 飞腾Phytium,D2000/8 E8C
第一步
使用apt-get命令安装docker-compose
apt-get install docker-compose
第二步
编写一个docker-compose.yml文件来定义容器配置:
首先执行以下命令
vim /data/docker-compose.yml
具体配置的内容如下:
version: '3' # 指定 compose 文件的版本
services: # 定义所有的 service 信息, services 下面的第一级别的 key 即是一个 service 的名称
knowledge_base: # service名称
image: knowledge_base_llm/chatchat:v2 # 指定docker镜像,可以是远程仓库镜像或本地镜像
container_name: knowledge_base # 指定容器名称(等同于 docker run --name 的作用)
volumes: # 定义容器和宿主机的卷映射关系, 其和 networks 一样可以位于 services 键的二级键和 compose 顶级键, 如果需要跨服务间使用则在顶级键定义, 在 services 中引用
#- /usr/src:/usr/src # 映射容器内的 /usr/src 到宿主机的 /usr/src
#- /lib/modules:/lib/modules # 映射容器内的 /lib/mpdules 到宿主机的 /lib/modules
#- /dev:/dev # 映射容器内的 /dev 到宿主机的 /dev
- /data:/workspace # 映射容器内的 /workspace 到宿主机的 /data
ports: # 建立宿主机和容器之间的端口映射关系, ports 支持两种语法格式
- "7861:7861" # 容器的 7861 端口和宿主机的 7861 端口建立映射关系
- "20000:20000"
- "8501:8501"
privileged: true # 当使用--privileged=true选项运行容器时,Docker会赋予容器几乎与主机相同的权限
cap_add: - ALL # --cap-add 和 --cap-drop:增加或删除容器的 Linux 能力,用于控制容器的权限。 似乎privileged为tru cap_add就不用在设置ALL了
pid: host # 共享宿主机的进程空间(PID)
working_dir: /workspace/my/Langchain-Chatchat # 指定容器在运行时使用的默认目录
environment:- LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libGLdispatch.so.0:/usr/local/lib/python3.10/site-packages/scikit_learn.libs/libgomp-d22c30c5.so.1.0.0 # 设置环境变量, environment 的值可以覆盖 env_file 的值 (等同于 docker run --env 的作用)
command: ["python3", "startup.py", "-a"] # 覆盖容器启动后默认执行的命令, 支持 shell 格式和 [] 格式
stdin_open: true # 打开标准输入,可以接受外部输入
tty: true # 模拟一个伪终端
restart: always # 定义容器重启策略 no 禁止自动重启容器(默认) always 无论如何容器都会重启 on-failure 当出现on-failure 报错时, 容器重新启动。
配置完docker-compose服务后,需要在系统上设置一个systemd服务来运行dockers-compose up-d
命令,这里以启动langchain大模型框架为例:
服务配置文件需要放置的目录是:
vim /etc/systemd/system/langchain.service
langchain.service文件的具体内容如下:
[Unit]
Description=Docker Compose for Knowledge Base
After=docker.service
Requires=docker.service
[Service]
Type=simple
Restart=on-failure
User=root # 使用有权限运行Docker Compose的用户名
ExecStart=/usr/bin/docker-compose -f /data/docker-compose.yml up -d
ExecStop=/usr/bin/docker-compose -f /data/docker-compose.yml down
[Install]
WantedBy=default.target # WantedBy`:指定了服务在哪个目标之下启动。在这个示例中,服务会在默认目标(`default.target`)之下启动
至此,服务配置完成,可以重新加载langchain.service 配置并启用服务:
# 重启服务
sudo systemctl daemon-reload
# 设置服务开机自启动
sudo systemctl enable langchain.service
# 启动服务
sudo systemctl start langchain.service