前言
这篇笔记用来记录docker使用过程中一些有用的case.
使用docker免去sudo
Docker守候进程绑定的是一个unix socket,而不是TCP端口。这个套接字默认的属主是root,其他是用户可以使用sudo命令来访问这个套接字文件。因为这个原因,docker服务进程都是以root帐号的身份运行的。
为了避免每次运行docker命令的时候都需要输入sudo,可以创建一个docker用户组,并把相应的用户添加到这个分组里面。当docker进程启动的时候,会设置该套接字可以被docker这个分组的用户读写。这样只要是在docker这个组里面的用户就可以直接执行docker命令了。
| sudo cat /etc/group | grep docker
sudo groupadd -g 999 docker
sudo usermod -aG docker <username>
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
推送镜像到自建的docker仓库
由于服务端的docker不是https的,而docker默认是https,所以直接push会报错:
1
| Get https://101.124.42.34:5000/v2/: http: server gave HTTP response to HTTPS client
|
解决方案:
在配置文件中添加
1
| "insecure-registries":["101.124.42.34:5000"]
|
Mac,配置文件地址 ~/.docker/daemon.json
Ubuntu,配置文件地址 /etc/docker/daemon.json
1 2 3 4 5 6 7 8 9
| cat ~/.docker/daemon.json { "debug" : true, "experimental" : true, "registry-mirrors" : [ "http://cb648146.m.daocloud.io" ], "insecure-registries":["101.124.42.34:5000"] }
|
最后重启客户端的docker服务
删除的镜像
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 inspect --format='{{.LogPath}}' <container_name_or_id>
|
容器内访问宿主机
宿主机器的IP: 172.17.0.1