CentOS版本:CentOS 7、CentOS Stream 8或CentOS Stream 9,在这里我们用的是CentOS Stream 9
centos-extras
仓库必须是激活的。默认情况下,该仓库是激活的,可验证如下:
使用命令vim /etc/yum.repos.d/centos-addons.repo
查看yum仓库的配置文件,查看[extras-common]
仓库下面对应的enabled
的值,如果是1,则该仓库是激活状态,如果是0,则该仓库是非激活状态,需要将0改为1,设置为激活状态,如下图所示:
推荐使用overlay2
存储驱动,大部分的Linux系统都支持
虽然我们目前用的虚拟机操作系统CentOS Stream 9没有安装过Docker,但是为了完整性,也有可能有些人是安装过旧版本的Docker,所以还是有必要加上这块内容。早期版本的Docker被称为docker
或docker-engine
,如果之前安装过,执行下面的命令将它们以及相关的依赖项卸载掉:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
根据不同的需求,安装Docker引擎有几种不同的方式:
比较推荐的方法是设置Docker的仓库并从中获取安装包并安装,这是比较简单的,也便于后续的升级。
通过下载RPM包手动安装,并完全手动管理升级。这对于在无法联网的环境中安装Docker等情况非常有用。
在测试和开发环境,可以通过官方提供的安装脚本安装Docker
当你在新的主机上第一次安装Docker引擎之前,需要先设置好Docker仓库,之后就可以从这个仓库安装和升级Docker。
安装yum-utils
包,它提供了yum-config-manager
的功能,可以管理yum
的配置
sudo yum install -y yum-utils
添加Docker仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
可以看到yum仓库目录下多了一个docker仓库的配置文件
可以选择安装最新版本或指定版本的Dokcer:
安装最新版本的Docker Engine、containerd(容器服务)、Docker Compose
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
直接执行上述命令可能会出现错误,该错误指出我们要安装的包跟系统中已经安装的包buildah
有冲突,如下所示:
根据提示,在命令中添加--allowerasing
参数,该参数指允许擦除已安装的软件包以解决依赖关系和包冲突问题:
sudo yum install --allowerasing docker-ce docker-ce-cli containerd.io docker-compose-plugin
接下来会提示是否接受GPG密钥,需要验证其指纹是否为060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
,如果是就可以。这里一般也不会有说明问题,直接输入y继续安装就可以
安装成功
安装指定版本的Docker
更新Docker Engine时,只需按照上面的安装说明,选择想要的版本进行安装就可以了。
如果你无法使用Docker的存储库来安装Docker,你可以根据你的CentOS系统的发行版下载对应的.rpm
文件并手动安装。以后每次需要升级Docker引擎时,都需要下载新文件进行安装升级。
访问https://download.docker.com/linux/centos/,选择CentOS的版本(我这里是9),然后进入到x86_64/stable/Packages/
目录下,下载你想要安装的Docker版本对应的.rpm
文件。
安装Docker Engine
sudo yum install /path/to/package.rpm
更新Docker Engine时,需要下载新版本的软件包文件,将yum install
替换为yum upgrade
并使用新的软件包文件,其他步骤跟上面的一样
sudo yum upgrade /path/to/new_package.rpm
Docker在get.docker.com提供了一个方便的脚本,用于快速、非交互式地将Docker安装到开发环境,但是不建议在生产环境中使用这个脚本安装。
你可以使用DRY_RUN=1
选项运行这个脚本,这样可以在真正运行之前看看这个脚本在安装过程中会执行哪些步骤:
curl -fsSL https://get.docker.com -o get-docker.sh
DRY_RUN=1 sh ./get-docker.sh
因为我们已经安装了Docker,所以输出中会有相应的提示。根据这个提示信息,我们了解到,如果系统中已经安装了Docker,那么使用这个脚本安装或更新Docker会导致一些问题,除非系统中的Docker也是使用这个脚本安装的。也就是说如果当前系统已经安装了Docker并且是用这个脚本安装的,那么可以再次使用这个脚本更新,否则可能会出现无法预料的问题。
下面的命令从get.docker.com下载脚本并运行这个脚本,安装最新稳定版的Docker:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl start docker
可以看到Docker服务已经启动运行了。
通过运行hello-world
镜像验证Docker Engine是否正确安装:
sudo docker run hello-world
输出上面的信息,说明我们正确安装了Docker,并且可以正常地运行和工作了。
我们先用下面的命令尝试停止Docker看看:
sudo systemctl stop docker
可以看到输出一条警告信息:
Warning: Stopping docker.service, but it can still be activated by:
docker.socket
意思是说docker.service
已经停止了,但是它仍然可以通过docker.socket
被激活。查看docker的状态,确实是属于非活跃的状态。另外注意到下面有绿色圆点的那一行TriggeredBy: ● docker.socket
,表示通过docker.socket
触发,跟上面的警告信息其实是同一个意思。而docker.socket
是用于和docker client进行通信的文件,所以推测当docker client重新发起请求,也就是我们再执行docker命令时,docker服务又会被激活,我们看看是不是这么回事。
先执行一个docker命令:
# 查看本机拉取的镜像,可以看到我们之前拉取过的hello-world的镜像
sudo docker images
再查看docker的状态:
可以看到docker服务又变成活跃状态了,说明当客户端有请求时会连接docker.socket
,这个时候docker就会被docker.socket
触发激活来响应客户端的请求。
那么如果要完全停止docker,不想它被重新激活应该怎么做,其实只要把docker.service
、docker.socket
都停掉就可以了:
sudo systemctl stop docker.service docker.socket
从上图可以看到docker状态为非活跃状态,docker.socket
前面的圆点也不是绿色的了,说明它也被停止了,执行命令sudo docker images
后输出的信息也表明,docker已经停止运行无法连接了。
卸载Docker Engine、CLI、Containerd和Docker Compose软件包:
sudo yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
在主机上的镜像、容器、卷和自定义的配置文件等不会自动删除,执行下面的命令删除所有的镜像、容器和卷,任何编辑过的配置文件也必须手动删除:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
备注:本文主要参考官方的docker安装文档