这个时候centos官方已经主推centos8了,但是8的镜像我下载完已经有8.6G了,相对于7的4G多的空间,再加上企业目前生产主流用的还是7,所以我在虚拟机还是继续玩7。
Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。
我这里用社区版测试
1.查看centos内核版本(docker要求centos内核版本高于3.10)
[sandwich@192 ~]$ uname -r
3.10.0-957.el7.x86_64
2.使用root权限更新yum, 确保yum是最新的
[sandwich@192 ~]$ sudo yum update
如果是新用户,有可能没有sudo权限,可以参考我的另外一个文章添加
https://www.jianshu.com/p/5ac7980a7955
3.卸载旧版本(如果已经安装过的话)
[sandwich@192 ~]$ sudo yum remove docker docker-common docker-selinux docker-engine
[sudo] password for sandwich:
Loaded plugins: fastestmirror, langpacks
No Match for argument: docker
No Match for argument: docker-common
No Match for argument: docker-selinux
No Match for argument: docker-engine
No Packages marked for removal
因为我是新机,自然不会有东西卸载
4.安装依赖包
# yum-util提供yum-config-manager功能,另外两个是device mapper驱动依赖的
[sandwich@192 ~]$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5.设置yum源
[sandwich@192 ~]$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
6.查看仓库中所有的docker版本,选择最新版或者特定版本安装
[sandwich@192 ~]$ yum list docker-ce --showduplicates | sort -r
* updates: mirrors.aliyun.com
Loaded plugins: fastestmirror, langpacks
* extras: mirrors.aliyun.com
docker-ce.x86_64 3:20.10.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.1-3.el7 docker-ce-stable
...
7.安装docker
# 由于repo中默认只开启stable仓库,所以这里默认安装最新稳定版本
[sandwich@192 ~]$ sudo yum install docker-ce
8.启动并加入开机启动
[sandwich@192 ~]$ sudo systemctl start docker
[sudo] password for sandwich:
[sandwich@192 ~]$ sudo systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
9.验证安装是否成功(有client和servcie两部分)
[sandwich@192 ~]$ docker version
Client: Docker Engine - Community
Version: 20.10.10
API version: 1.41
Go version: go1.16.9
Git commit: b485636
Built: Mon Oct 25 07:44:50 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version": dial unix /var/run/docker.sock: connect: permission denied
由上可以看出来client部分没有问题了,但是service部分似乎遇到permission的问题。
再执行一下docker ps试试,同样的问题
[sandwich@192 ~]$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied
出现这个问题的原因是:
docker进程使用Unix Socket而不是TCP端口。而默认情况下,Unix socket属于root用户,需要root权限才能访问。
解决办法如下:
方案一:使用sudo获取管理员权限,运行docker命令
方案二:添加docker group组,将用户添加进去
我先试试方案一:
[sandwich@192 ~]$ sudo docker version
[sudo] password for sandwich:
Client: Docker Engine - Community
Version: 20.10.10
API version: 1.41
Go version: go1.16.9
Git commit: b485636
Built: Mon Oct 25 07:44:50 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.10
API version: 1.41 (minimum version 1.12)
Go version: go1.16.9
Git commit: e2f740d
Built: Mon Oct 25 07:43:13 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.11
GitCommit: 5b46e404f6b9f661a205e28d59c982d3634148f8
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
[sandwich@192 ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
这样看起来没有问题了,但是我就不信docker version和docker ps都需要加上sudo.
再试试方案二:
#添加docker用户组
[sandwich@192 ~]$ sudo groupadd docker
groupadd: group 'docker' already exists
#将当前登录用户加入docker用户组
[sandwich@192 ~]$ sudo gpasswd -a $USER docker
Adding user sandwich to group docker
#更新用户组
[sandwich@192 ~]$ newgrp docker
#测试当前用户是否可以正常使用docker命令
[sandwich@192 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
至此完成安装。