Docker使用笔记

前言

这篇笔记用来记录docker使用过程中一些有用的case.

使用docker免去sudo

Docker守候进程绑定的是一个unix socket,而不是TCP端口。这个套接字默认的属主是root,其他是用户可以使用sudo命令来访问这个套接字文件。因为这个原因,docker服务进程都是以root帐号的身份运行的。

为了避免每次运行docker命令的时候都需要输入sudo,可以创建一个docker用户组,并把相应的用户添加到这个分组里面。当docker进程启动的时候,会设置该套接字可以被docker这个分组的用户读写。这样只要是在docker这个组里面的用户就可以直接执行docker命令了。

1
2
3
4
5
6
7
8
# 新建用户组docker之前,查看用户组中有没有docker组
sudo cat /etc/group | grep docker
# 创建docker分组,如果没有
sudo groupadd -g 999 docker
# 添加用户
sudo usermod -aG docker <username>
# 重新启动docker服务
sudo systemctl restart docker

搭建本地docker服务

官方文档: https://docs.docker.com/registry/deploying/

1
2
# 启动命令
docker run -d -p 5000:5000 --name registry -v /data/docker-images:/var/lib/registry registry:2

其他命令:

  • 查看本地镜像

curl http://localhost:5000/v2/_catalog

删除的镜像

1
docker rmi $(docker images -a|grep "<none>"|awk '$1=="<none>" {print $3}') --force

安装nvidia-docker

1
2
3
4
5
6
7
8
9
10
11
12
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update

sudo apt-get install -y nvidia-docker2

sudo systemctl restart docker

测试是否安装成功

1
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

赋予所有的容器都可见GPU

/etc/docker/daemon.json文件加上一行

1
"default-runtime":"nvidia",

重启

1
sudo systemctl restart docker

清理容器

1
docker system prune -f