作为非root用户管理Docker
Docker守护进程是和一个Unix socket绑定的。默认情况下这个Unix socket的拥有者是root用户,其他用户只能通过sudo
命令进行访问。Docker守护进程始终是以根用户的身份运行。
那普通用户如果不想每次在执行docker命令时都要在前面添加sudo
,应该怎么办呢?在上图中可以注意到docker.sock
的用户组docker
的权限为rw
,跟其用户权限一样,说明只要将普通用户添加到docker
这个用户组中,对于这个文件,普通用户就拥有和root用户相同的权限,执行docker
命令时也就不需要在前面加sudo
了。
网上有很多文章说要先创建docker
用户组,可能以前需要,但是现在在安装Docker的同时也会创建docker
这个用户组,默认情况下,它不会向组中添加任何用户。所以现在不需要我们手动创建用户组。通过查看文件/etc/group
可以看到docker
这个用户组已经存在了,且组中没有任何用户:
-
添加普通用户到
docker
用户组sudo usermod -aG docker $USER
-
-a, --append
:表示追加的意思,将指定的用户追加到指定的一个或多个补充组(supplementary group),仅与-G
选项一起使用。 -
-G, --groups
:指定一个或多个补充组(supplementary group),有多个的时候用逗号分隔。单独使用时,如果用户当前是未列出的组的成员,则该用户将从该组中删除。与-a
选项一起使用时,则会将用户追加到这些组中。 -
$USER
:表示当前登录的用户
执行命令后可以看到我的用户已经在
docker
这个用户组里面了: -
-
使用户组的改变生效
改变用户的群组之后需要重启系统后才能生效
在Linux中,也可以执行下面的命令让用户组的改变生效:
newgrp docker
-
验证是否可以在不使用
sudo
的情况下运行docker命令docker run hello-world
在不加
sudo
的情况下,普通用户也可以正常运行docker命令了。
配置Docker开机自启动
先看看当前Docker是否为开机启动:
sudo systemctl status docker
红色方框张的disabled
表示Docker没有配置开机自启动
使用如下命令将Docker配置为开机自启动:
sudo systemctl enable docker
可以看到红色方框的位置由之前的disabled
变为enabled
了,说明Docker是处于开机自启动的状态了
这时候重启系统,无需手动启动Docker就可以直接运行docker命令了。
配置Docker镜像加速器
安装Docker后,默认是从Docker官网下载镜像,速度比较慢且不稳定,下载大的镜像经常会卡在那里不动,可以通过配置阿里云镜像加速器解决这个问题。
访问网址https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors登录阿里云获取镜像加速器地址,该页面上同时也提供了配置镜像加速器的方法,只需要依次执行下面的命令就可以了(记得把中括号里的加速器地址换成自己登录阿里云获取到的地址):
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://oooooooo.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker