使用docker desktop在wsl中安装docker

安装docker desktop后,启动并设置docker desktop,wsl安装的是Ubuntu-22.04,重启后进入wsl环境

在wsl安装docker

进入wsl 系统环境,执行如下命令:更新包列表,安装依赖

sudo apt update

sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

添加docker官方GPG key:curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –

添加docker库到APT源:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

再次更新包列表:sudo apt update

安装docker: sudo apt install -y docker

开启docker:systemctl start docker

激活docker:systemctl enable docker

注:可在命令前添加sudo授予权限。

检测docker安装运行成功:docker --version

docker安装ollama

wsl环境,命令:docker pull ollama/ollama:latest(权限不足可在前面添加sudo)

遇到报错:Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

解决方法:

  1. 检测网络:ping google.com,如果ping不通,可能是网络问题。
  2. 检测docker daemon状态:systemctl status docker,如果docker状态不是active(running)状态,可重启尝试:systemctl restart docker.
  3. 增加timeout时间:打开或创建daemon.json文件,vim /etc/docker/daemon.json, 添加:

{

  "registry-mirrors": ["https://registry-1.docker.io"],

  "max-concurrent-downloads": 1,

  "disable-legacy-registry": true

}

重启docker:systemctl restart docker

  1. 使用docker镜像,修改或添加vim /etc/docker/daemon.json:

{

  "registry-mirrors": ["https://registry.docker-cn.com"]

}

重启docker:systemctl restart docker

  1. 检测防火墙或proxy代理设置:如果使用公司防火墙或代理服务器,可能会导致连接docker hub出问题。检测是否能登录docker registry或更改proxy设置,进入docker 代理配置文件:/etc/system/docker.service.d/http-proxy.conf,修改其中http和https的代理地址,如下形式:

[Service]

Environment="HTTP_PROXY=http://your-proxy:port"

Environment="HTTPS_PROXY=http://your-proxy:port"

重新加载:systemctl daemon-reload

重启docker: systemctl restart docker

注:本次修改代理后就可以拉去ollama了,docker pull ollama/ollama:latest

  1. 使用docker桌面,可调整设置中的配置,setting->resources->wsl integration,确保integration的wsl distro是enabled。
  2. 清理docker缓存:docker system prune -a,移除未使用的镜像,容器和网络,这些可能会导致docker问题。

外部调用本地ollama

  1. 确保docker容器正在运行且监听某端口,命令:

将主机8080端口映射到容器内部8080端口,sudo docker run -d –name ollama-container -p 8080:8080 ollama/ollama:latest

  1. 获取公共IP或域名,公共IP地址-可直接联网使用,或指向公共IP的域名
  2. 如果使用路由器(如家庭或办公环境),需要做端口转发设置,允许外部请求到达docker容器。

在容器中查看镜像信息:cat /etc/os-release

在wsl中安装ollama:curl -fsSL https://ollama.com/install.sh | sh

创建打包docker镜像

目前docker安装在wsl环境中,创建文件夹:

mkdir docker-hello-world

cd docker-hello-world

创建 app.py 脚本-》print("Hello, Docker World!")

同一目录下创建文件Dockerfile(没有后缀):

# 使用官方 Python 镜像作为基础

FROM python:3.10-slim

# 设置工作目录

WORKDIR /app

# 拷贝当前目录下所有文件到镜像中

COPY .  .

# 设置容器启动时执行的命令

CMD ["python", "app.py"]  # 注意是双引号,单引号会无法运行

构建镜像:docker build -t hello-world-python .  (注意‘.’代表本路径下的Dockerfile文件。

运行:docker run hello-world-python

打tag:docker tag <原镜像名>:<原标签> <新镜像名>:<新标签>,例如:docker tag hello-world-python:latest my_first_image:v1

删除镜像:docker rmi hello-world-python:latest

离线下载安装ollama模型

故使用docker拉取ollama镜像,镜像中的ollama依旧无法拉取模型。

网络下载guff模型文件到本地调用。

先在huggingface或其镜像(hf-mirror.com)下载模型,需要找到guff格式的模型文件(保存的时模型的权重)。

编辑modelfile文件,例如命名为config.modelfile,内容为:FROM ./ Llama-3.2-3B-Instruct-Q3_K_L.gguf

Llama-3.2-3B-Instruct-Q3_K_L.gguf文件和config.modelfile文件在同一路径下,如:/home/***/ollama/。

启动ollama容器:docker run -it -v /home/***/ollama:/home/.ollama –name my_ollama ollama:ollama,运行ollama镜像命名为my_ollama,挂载wsl中存放模型及文件的路径到ollama容器中的/home/.ollama。

进入ollama容器:docker exec -it my_ollama /bin/bash,如果容器没有命名也可使用对应容器的ID进入(docker ps  -a查询)。

执行:ollama create llama3-3b(模型名称) -f ./config.modelfile,获得如下输出

使用ollama run llama3-3b启动模型

退出容器:ctrl + d

删除模型:ollama rm model_name

参考:

【大模型搭建】部署Ollama,pull失败,手动构建方案_ollama pull-CSDN博客     

docker运行ollama镜像,以及离线方式加载模型_ollama 加载离线模型-CSDN博客

Ollama模型导入指南,从HuggingFace下载模型轻松上手-腾讯云开发者社区-腾讯云

ollama/ollama - Docker Image | Docker Hub

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐