docker rootless , gpu and other
POST ON 2024-03-24 BY WOLVES
Docker Rootless
Docker Rootless 模式允许用户在不使用 root 权限的情况下运行 Docker 守护进程(Docker daemon)。
这种模式提高了系统的安全性,因为它减少了潜在的攻击面。Docker Rootless 模式允许用户在不使用 root 权限的情况下运行 Docker 守护进程(Docker daemon)。这种模式提高了系统的安全性,因为它减少了潜在的攻击面。
Installation
首先是 Docker,官方已经支持 Rootless 部署,文档在 https://docs.docker.com/engine/security/rootless/ ,使用上分为两步:
1.管理员用 root 权限配置好各项依赖
2.每个用户跑一次 setup 脚本,然后正常用 docker
1.在安装docker后,增加以下依赖
sudo apt install uidmap dbus-user-session fuse-overlayfs slirp4netns docker-ce-rootless-extras
2.安装完以后,每个用户自己执行一个初始化脚本
dockerd-rootless-setuptool.sh install
之后就可以正常使用 docker 了,从 docker info 可以看到目前是 rootless 模式:
docker info | grep Context
说明
-
在 Docker Rootless 模式下,daemon.json 文件的位置和使用方式与传统的 Docker 安装有所不同。由于 Docker Rootless 模式下 Docker 守护进程(Docker daemon)运行在非 root 用户的环境中,因此 daemon.json 文件的位置也会有所变化。
-
在 Docker Rootless 模式下,daemon.json 文件通常位于用户的 $HOME 目录下的 .config/docker 目录中。具体路径如下:
~/.config/docker/daemon.json
- 如果你需要配置 Docker Rootless 模式的守护进程,可以在这个路径下创建或编辑 daemon.json 文件。例如,你可以使用以下命令来创建或编辑该文件:
mkdir -p ~/.config/docker
nano ~/.config/docker/daemon.json
- 在这个文件中,你可以添加或修改 Docker 守护进程的配置,例如镜像加速器、日志驱动、存储驱动等。以下是一个示例 daemon.json 文件的内容:
{
"registry-mirrors": ["https://your.mirror.url"],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
- 保存并关闭文件后,Docker Rootless 模式的守护进程会在启动时读取这个配置文件。请确保在修改配置文件后重启 Docker 守护进程以使更改生效。你可以使用以下命令来重启 Docker Rootless 模式的守护进程:
systemctl --user restart docker
- 或者,如果你使用的是 dockerd-rootless.sh 脚本来启动 Docker 守护进程,可以重新运行该脚本:
dockerd-rootless.sh
- 这样,Docker Rootless 模式的守护进程将会使用新的配置。
GPU support
为dockerRootless增加GPU支持
在/etc/nvidia-container-runtime/config.toml
的
[nvidia-container-cli]
下添加
no-cgroups = true
即可为无根运行提供gpu支持
docker run -it --rm --gpus all ubuntu nvidia-smi
容器运行后,如何增加/修改/删除存储卷
首先,关闭容器进入容器目录,目录中一般有如下文件,我们需要修改的就是 config.v2.json 和 hostconfig.json 文件
进入vim后,由于docker默认会将文件格式变为不易读,可以使用python工具进行解析为易读性较好的文件,esc 输入下列文字即可
:%!python -m json.tool
1.修改容器的”config.v2.json”配置文件
在”MountPoints”数组,最后添加宿主机目录”/opt/file”映射到容器的”/file”目录下,如下
"/file": {
"Source": "/opt/file",
"Destination": "/file",
"Driver": "",
"Name": "",
"Propagation": "rprivate",
"RW": true,
"Relabel": "ro",
"SkipMountpointCreation": false,
"Spec": {
"Source": "/opt/file",
"Target": "/file",
"Type": "bind"
},
"Type": "bind"
}
2.修改容器的”hostconfig.json”配置文件
在”Binds”数组,最后添加目录映射配置,如下:
"Binds": [
"/opt/file:/file"
]
最后一步,一定要重启docker进程,否则直接启动容器,docker会把你的修改给还原
# rootless 进程
systemctl --user restart docker
docker login 时出现 x509: certificate signed by unknown authority
- 首先获取证书公钥
- 将公钥追加在
/etc/ssl/certs/ca-certificates.crt
内 - 重启
docker