非 root 用户运行
新建用户组docker之前,查看用户组中有没有docker组
sudo cat /etc/group | grep docker
创建docker分组,并将相应的用户添加到这个分组里面。
sudo groupadd -g 999 docker
#-g 999为组ID,也可以不指定
sudo usermod -aG docker jarvis
检查一下创建是否有效
cat /etc/group
退出当前用户登陆状态,然后重新登录,以便让权限生效,或重启docker-daemon
sudo systemctl restart docker
确认你可以直接运行docker命令,执行docker命令
docker info
如果提示get ……dial unix /var/run/docker.sock权限不够,则修改/var/run/docker.sock权限
sudo chmod a+rw /var/run/docker.sock
国内加速
使用阿里云的加速服务, 首先点击下面的链接注册:
https://link.zhihu.com/?target=https%3A//cr.console.aliyun.com/%23/accelerator
然后在镜像加速器页面复制加速器地址, 按如下方式填写到 /etc/docker/daemon
:
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"registry-mirrors": ["你的加速器地址"]
}
重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
在Docker中使用GPU
首先在root下面安装了docker (参考 https://github.com/NVIDIA/nvidia-docker#quick-start)
报错 docker: Got permission denied while trying to connect to the Docker daemon socket
这是因为用户没有加入到docker组中,因此将自己的用户加入到docker的用户组
sudo usermod -a -G docker $USER
(这是一个大坑,因为你会发现后面操作了很多步之后又可能会出现这个问题,因此你又要用这条命令。)
接下来报错 docker: Error response from daemon: Unknown runtime specified nvidia.
这个时候是我们需要安装nvidia-docker2
sudo apt-get install -y nvidia-docker2
首先检查本机的 nvidia 驱动版本 (https://www.yuque.com/jarvis73/pukm54/pxoy6p)
然后确定相应的CUDA版本, 比如驱动版本396.26, 在linux上对应的CUDA版本为9.2.88
到 docker 网站寻找CUDA版本匹配的docker镜像 (https://hub.docker.com/r/nvidia/cuda/tags)
拉取
docker pull nvidia/cuda:9.2-runtime-ubuntu16.04
运行
sudo docker run --runtime=nvidia --rm nvidia/cuda:9.2-runtime-ubuntu16.04 nvidia-smi
还是报错:docker: Error response from daemon: Unknown runtime specified nvidia. 而运行
nvidia-docker image ls
说明nvidia-docker2是安装成功了的。结果发现需要将docker重启过
sudo systemctl daemon-reload
sudo systemctl restart docker
重启大法好. 在使用docker最重要的一点是你所有的使用的脚本,运行的数据都在docker指定的目录之下,因为只有这样,创建的docker才能够找到你所使用的数据。
Docker基础操作 —- 使用已有的镜像
0. 从DockerHub获取一个镜像
docker pull tensorflow/serving
docker pull tensorflow/serving:latest-gpu
1. 从镜像(Image)开启一个容器(Container)
docker run -t --rm -p 8501:8501 -v "D:/0WorkSpace/MedicalImageSegmentation/model_dir/tag/export:/models/tag" -e MODEL_NAME=tag tensorflow/serving
docker run 命令的参数:
-p
指定端口映射:hostport:containerport
-t
分配一个tty-v
绑定主机目录到容器的目录 (可以避免复制)-e
添加容器内的环境变量--rm
容器退出时自动删除容器-i
启动输入流 (相当于进入了 docker 的终端)-d
detach, 运行后从会话中分离出来回到host.--name
指定container的名字2. 查看当前的进程
docker ps # 查看正在运行的容器
docker ps -a # 可以查看所有容器(包括已停止的容器)
3. 停止容器
docker stop [ID/NAME]
4. 删除容器
docker rm [ID/NAME]
5. 启动已停止的容器
docker start [ID/NAME]
6. 列出所有镜像
docker image ls
docker images
7. 列出所有容器
docker contrainer ls
8. 查看镜像配置
docker inspect [ID/NAME]
9. 查看当前镜像和容器所占磁盘体积
docker system df
10. 删除镜像
docker rmi [ID/NAME]
11. 从运行的容器会话中 detach
使用快捷键:Ctrl+P Ctrl+Q
12. attatch 到正在运行的容器中
docker attach <container name>
13. 在 Docker 里安装程序
# 作为 root 进入容器
docker run --runtime=nvidia -it -v /path/to/model:/model --name tensorflow tensorflow/tensorflow:nightly-gpu bash
# 安装程序
apt install git
# Detach
# Ctrl+P Ctrl+Q
# 作为用户进入容器 (这样可以作为用户而不是root修改/model下的文件)
docker exec -it -u $(id -u):$(id -u) tensorflow bash