Docker的安装----在 Ubuntu 系统上安装 Docker
一:配置系统的 APT 软件包管理器
首先添加 Docker 的官方 GPG 密钥
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
- sudo apt-get update:更新本地的包索引。这一步是为了确保系统知道最新的软件包信息,尤其是更新后的软件源列表
- sudo apt-get install ca-certificates curl gnupg:安装三个工具: ca-certificates:确保系统具有最新的根证书,以验证 HTTPS 连接 curl:用于从网络下载文件的命令行工具。 gnupg:GNU Privacy Guard,用于处理 GPG 密钥和加密。
- sudo install -m 0755 -d /etc/apt/keyrings:创建一个目录 /etc/apt/keyrings,用于存放 GPG 密钥。-m 0755 设置了该目录的权限为 0755(所有者可读写执行,组和其他用户可读和执行)
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg:使用 curl 从 Docker 官方网站下载 GPG 密钥
- | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg:将下载的 GPG 密钥转换为 .gpg 格式并保存到 /etc/apt/keyrings/docker.gpg。gpg --dearmor 命令将 ASCII 格式的密钥转换为二进制格式
- sudo chmod a+r /etc/apt/keyrings/docker.gpg:设置密钥文件的权限,使得所有用户都可以读取这个文件。这样 APT 工具就可以使用这个密钥进行验证。
然后将 Docker 的软件源添加到 Apt 源
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
- echo:生成 Docker 软件源的配置行。
- [arch=$(dpkg --print-architecture)]:指定软件包的架构,$(dpkg --print-architecture) 动态获取系统架构,如 amd64。
- signed-by=/etc/apt/keyrings/docker.gpg:指定用于验证软件包的 GPG 密钥文件。
- https://download.docker.com/linux/ubuntu:Docker 官方软件源的 URL。
- $(. /etc/os-release && echo "$VERSION_CODENAME"):动态获取当前 Ubuntu 版本的代号(如 focal、jammy)。
- stable:指定安装的软件包版本为稳定版。
- | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null:将生成的软件源配置写入到 /etc/apt/sources.list.d/docker.list 文件中。tee 命令将输出同时写入到文件和标准输出,> /dev/null 是为了忽略输出内容
二:安装 Docker 的相关软件包
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
三:验证 Docker 安装
安装完 Docker 后,可以运行一个简单的测试容器来验证 Docker 是否正常工作。
sudo docker run hello-world
如果看到来自 Hello from Docker!消息,表明已经成功安装并启动了 Docker Engine
四:运行 Docker 命令时不需要使用 sudo
Docker 的守护进程(daemon)以 root 用户身份运行,并通过 Unix 套接字(/var/run/docker.sock)与客户端(如 docker 命令行工具)通信。默认情况下,这个套接字的权限设置为只有 root 用户可以访问,因此普通用户需要使用 sudo 来运行 Docker 命令。
为了让普通用户可以不使用 sudo 运行 Docker 命令,需要将这些用户添加到一个特殊的用户组——docker 组中。这样,当 Docker 守护进程启动时,它会将这个 Unix 套接字的权限设置为 docker 组可读写,从而允许 docker 组中的用户运行 Docker 命令而无需 sudo。
-
创建 Docker 用户组
首先,创建一个名为
docker
的用户组。如果这个组已经存在,这一步会被忽略。sudo groupadd docker
-
将当前用户添加到 Docker 组
将当前用户添加到
docker
组,以便该用户可以执行 Docker 命令。sudo gpasswd -a $USER docker
-
激活组变更
使用
newgrp
命令使组变更立即生效newgrp docker
-
测试 Docker 命令
运行
docker run hello-world
命令,检查是否可以在没有sudo
的情况下成功运行 Docker 命令。docker run hello-world
Ollama Docker image的配置
配置和安装 NVIDIA Container Toolkit
这是一个用于在 Docker 中支持 NVIDIA GPU 的工具
# Configure the repository
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \| sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update# Install the NVIDIA Container Toolkit packages
sudo apt-get install -y nvidia-container-toolkit
代码解析----Install with Apt
1. 配置 NVIDIA 软件源
下载和安装 GPG 密钥
curl -fsSL <https://nvidia.github.io/libnvidia-container/gpgkey> \\| sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
这条命令从 NVIDIA 的 GitHub 页面下载 GPG 密钥,用于验证软件包的来源和完整性。并且将 ASCII 格式的 GPG 密钥转换为二进制格式,保存至指定的位置
配置软件源
curl -s -L <https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list> \\| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \\| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
2.安装 NVIDIA Container Toolkit 软件包
sudo apt-get install -y nvidia-container-toolkit
配置 Docker 以支持 NVIDIA GPU
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
启动 Docker 容器
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
- docker run:
- 这是启动一个新容器的 Docker 命令。
- d:
- 表示以分离模式(后台模式)运行容器。容器会在后台运行,而不会占用当前终端。
- -gpus=all:
- 允许容器访问主机上所有可用的 NVIDIA GPU。这个选项要求 Docker 配置为使用 NVIDIA 容器工具包(NVIDIA Container Toolkit)。
- v ollama:/root/.ollama:
- 将主机上的卷 ollama 挂载到容器的 /root/.ollama 路径。卷用于持久化数据,即使容器被删除,数据也会保留在卷中。
- p 11434:11434:
- 将主机的端口 11434 映射到容器的端口 11434。这使得主机上的端口 11434 可以用于访问容器内的服务。
- -name ollama:
- 给容器指定名称 ollama。这个名称可以用来引用和管理该容器。
- ollama/ollama:
- 要使用的 Docker 镜像。这里指定的是 ollama/ollama 镜像,通常是从 Docker Hub 获取的镜像。
获取和管理 Docker 镜像相关操作(optional)
docker images
用于查看本地镜像及其详细信息。docker pull <image>
用于从镜像仓库拉取新镜像。docker inspect <image>
用于查看镜像的详细配置。
镜像拉取机制
当执行 docker run
命令时,如果 Docker 在本地找不到指定的镜像,Docker 会自动尝试从配置的镜像仓库中拉取这个镜像
查看容器状态:
docker ps
配置和管理容器相关的操作(optional)
-
查看容器状态:
docker ps
-
停止和删除容器:
docker stop ollama docker rm ollama
-
在容器内执行命令:
docker exec -it ollama <command>
进入容器运行模型
刚才使用ollama/ollama镜像创建了一个叫做ollama的容器,并绑定了端口 11434
现在我想使用这个容器来运行llama3模型
docker exec -it ollama ollama run llama3
docker exec
命令:docker exec
是用来在一个已经运行的容器内执行命令的。它允许你在容器内部启动一个新的进程,通常用于调试和管理。
it
选项:i
(interactive): 使容器的标准输入保持打开,以便你可以与容器内的进程进行交互。t
(tty): 为容器分配一个伪终端,这使得你可以以终端模式运行命令。
ollama
:- 这是正在运行的容器的名称。刚刚通过
docker run
命令启动了这个容器,并给它指定了名称ollama
。
- 这是正在运行的容器的名称。刚刚通过
ollama run llama3
:- 这是在容器内执行的命令。它调用了
ollama
应用程序,并加载了llama3
模型。
- 这是在容器内执行的命令。它调用了
现在就可以和模型对话了
或者也可以尝试其他的模型library
参考:
https://hub.docker.com/r/ollama/ollama
https://medium.com/devops-technical-notes-and-manuals/how-to-install-docker-on-ubuntu-22-04-b771fe57f3d2