我写博客已经有一段时间了,大都是记录一些平时遇到的问题,以及解决方案。因此知识点都比较零散,没有形成系统化的知识体系。所以从今天开始,我打算将学习过的一些知识重新复习一下,并且按照分类记录下来,方便自己和后来人学习查阅。
首先从Docker开始吧,万物始于Docker。对于技术类的东西,我一向的原则是先用起来,然后再去理解理论的东西。因为干巴巴的理论学起来枯燥不说,还很容易忘记。相对来说,实践更容易留下深刻印象。操作之中一定会遇到疑惑的地方,这个时候再去理解原理层面的东西,就会有种豁然开朗的感觉。
一、Docker安装
Docker目前非常的成熟了,几乎支持所有主流平台的安装,譬如Windows、Linux、MacOS、ARM平台等。而且官方的文档也提供了详尽的安装教程。传送门。
这里以CentOS为例,简单说明一下Docker的安装。
安装前提
系统要求
安装Docker Engine,你需要仍在维护的CentOS7或者CentOS8,已经归档的版本没有支持或测说过。意思就是说,你可以安装,但是遇到问题得自己解决了,Docker没有在这些系统进行过测试。
centos-extras
仓库必须启用,这个仓库默认是启用的,如果你禁用了它,请重新启用。
推荐使用overlay2
存储驱动。
卸载旧版本
旧版本一般叫做docker
或者docker-engine
,如果它们被安装过,要卸载它们,并且相关联的依赖也要一起卸载。
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
如果yum
报告这些包没有一个被安装也没关系。
/var/lib/docker/
目录下包含镜像、容器、存储卷、网络,这些都会被保留。现在Docker Engine包名称叫做docker-ce
。
安装方法
你可以使用不同的方式安装Docker,这取决于你的需求:
- 为了便于安装和升级,大部分用户设置Docker仓库,并从中安装Docker。这是推荐的方式。
- 一些用户下载RPM包手动安装,并且完全手动管理升级,这种方式适合在无法访问公网的物理隔离系统上安装Docker。
- 在测试和开发环境中,一些用户选择使用自动化脚本安装Docker。
使用仓库安装
当你第一次在一个新的宿主机上安装Docker Engine之前,你需要先设置Docker的仓库,之后,你就可以通过仓库安装和更新Docker了。
设置仓库
安装yum-utils
包(提供yum-config-manager
工具),并且设置stable仓库。
sudo yum install -u yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
可选项:启用开发版或者测试版仓库
这些仓库包含在
docker-ce.repo
文件中,但默认是禁用的。你可以和稳定版仓库一起启用它们。下面的命令将会启用开发版仓库。sudo yum-config-manager --enable docker-ce-nightly
启用测试频道可以执行下面的命令:
sudo yum-config-manager --enable docker-ce-test
你可以通过运行
yum-config-manager
命令,使用--disable
参数了禁用开发版和测试版仓库。重新启用使用--enable
参数。下面的命令将禁用开发版仓库。sudo yum-config-manager --disable docker-ce-nightly
安装Docker Engine
安装最新版本的Docker Engine和Containerd,或者前往下一步安装指定版本的。
sudo yum install docker-ce docker-ce-cli containerd.io
如果提示接受GPG密钥,验证指纹是否匹配
060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
,如果是,就接受它。获取多个Docker仓库?
如果你启用了多个Docker仓库,并且在安装和更新的时候没有在
yum install
和yum update
命令中指定版本,将会总是安装最高的可用版本,这些版本可能无法满足你的稳定性要求。这个命令安装Docker,但是它不会启动Docker。它还创建了一个
docker
用户组,但默认没有添加任何用户到这个用户组。为了安装指定版本的Docker,先列出仓库中可用的版本,然后选择安装:
a. 列出并且排序仓库中的可用版本,这个示例通过版本号进行排序,从高到低,并且被截断:
sudo yum list docker-ce --showduplicates | sort -r
返回的列表取决于那个仓库被启用,并且特定于CentOS的版本(例如
.el7
后缀)。b. 通过全限定包名安装指定版本,全限定包名指的是包名(
docker-ce
)加上从第一个冒号(:
)开始到第一个连字符的版本字符串(第二列),使用连字符(-
)分隔,例如docker-ce-18.09.1
。sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
这个命令安装Docker,但是它不会启动Docker。它还创建了一个
docker
用户组,但默认没有添加任何用户到这个用户组。启动Docker
sudo systemctl start docker
通过运行
helle-world
镜像确认Docker已经被正确安装sudo docker run hello-world
这个命令下载一个测试镜像并且创建一个容器运行它。当容器运行时,它将打印一条信息然后推出。
这些就是安装和运行Docker。使用sudo
运行Docker命令,参考后续安装,以允许非特权用户运行Docker命令以及获取其他可选配置步骤。
升级Docker
为了升级Docker,下载更新的包文件并且重复上述安装步骤,使用yum -y upgrade
替代yum -y install
命令,并且指向新的包文件。
使用包安装
如果你没有办法使用Docker仓库来安装Docker,你可以为你的发行版下载.rpm
文件来手动安装。每次你打算升级的时候都需要下载一个新的文件。
访问https://download.docker.com/linux/centos/并且选择你的CentOS版本。浏览
x86_64/stable/Packages/
目录并且下载你想要安装的Docker版本。注意事项
为了安装开发版和测试版包,将上面URL中的
stable
改成nightly
或test
。安装Docker Engine,将下面的路径修改成你下载Docker包的位置。
sudo yum install /path/to/package.rpm
启动Docker
sudo systemctl start docker
通过运行
hello-world
镜像来验证安装正确性sudo docker run hello-world
这个命令下载一个测试镜像并且创建一个容器运行它。当容器运行时,它将打印一条信息然后推出。
这些就是安装和运行Docker。使用sudo
运行Docker命令,参考后续安装,以允许非特权用户运行Docker命令以及获取其他可选配置步骤。
升级Docker
为了升级Docker,下载更新版本的包,并且重复上述安装过程,使用yum -y upgrade
替代yum -y install
命令,并且指向新的包文件。
通过便利脚本安装
Docker在https://get.docker.com提供了一个便利的脚本,用于在开发环境中快速并且无交互地安装Docker。不建议在生产环境中使用便利脚本,但是它可以作为一个示例,安装你的需要创建一个配置脚本。同样参考使用仓库安装的步骤学习使用包仓库来安装的方法。脚本的源码是开源的,可以在这里找到https://github.com/docker/docker-install。
在本地运行之前总是检查从网络上下载的脚本。在安装前,确保你已经知悉潜在的风险和便利脚本的局限性。
- 脚本需要
root
或者sudo
权限来运行。 - 脚本会尝试探测你的Linux发行版和版本号,为你配置包管理工具,并且不允许你修改大部分的参数。
- 脚本安装依赖和推荐并不会询问确认信息。这将安装大量的包,取决于宿主机的当前配置。
- 默认情况下,脚本会安装最新稳定版的Docker,containerd,runc。当使用脚本配置一台机器时,这可能导致无法预测的Docker主版本更新。在你部署到生产坏境前,请始终在测试(主版本)环境中测试升级。
- 脚本并不是设计用来更新已有Docker安装的。当使用脚本来更新一个已有的安装,依赖可能不会被升级到期望的版本,导致过时的版本被使用。
小贴士:在运行之前预览脚本步骤
你可以通过
DRY_RUN=1
选项运行脚本,来学习安装过程中哪些步骤将会被执行。curl -fsSL https://get.docker.com -o get-docker.sh sudo DRY_RUN=1 sh ./get-docker.sh
这个示例从https://get.docker.com下载脚本并且运行它来安装最新稳定版的Docker。
curl -fsSL https://get.docker.com -o get-docker.sh
sduo sh get-docker.sh
Docker已经被安装。docker
服务在基于Debian的发行版上会自动运行。在基于RPM
的发行版上,例如CentOS,RHEL,SLES,你需要适当的使用systemctl
或者service
命令手动启动它。正如提示信息表明,非root用户默认无法运行Docker命令。
作为非特权用户使用Docker,或者无root模式下安装?
安装脚本依赖
root
或者sudo
权限来安装和使用Docker。如果你想授予非root用户访问Docker权限,参考后续步骤。Docker同样可以不使用root权限进行安装,或者配置成在无root模式运行。关于在无root模式下运行Docker的介绍,参考https://docs.docker.com/engine/security/rootless/。
安装预发行版本
Docker同样在https://test.docker.com/提供了一个安装预发布版本的便利脚本。这个脚本等同于get.docker.com
的脚本,但是它配置启用了包仓库的test频道,这个频道同时包含了稳定版本和预发布发版(测试版本,候选版本)。使用这个脚本可以提前访问新的发布,并且在它们成为稳定发布版之前在测试环境中试用它们。
为了从test频道安装最新的Docker版本,运行:
curl -fsSL https://test.docker.com -o test-docker.sh
sudo sh test-docker.sh
当使用便利脚本后升级Docker
如果你使用便利脚本安装的Docker,你应该直接使用包管理工具来升级。这里并没有什么优点重新运行便利脚本,而且这可能导致一些问题,如果脚本尝试重新添加已经添加到宿主机的仓库。
卸载Docker
卸载Docker,CLI和Containerd包:
sudo yum remove docker-ce docker-ce-cli containerd.io
宿主机上的镜像,容器,存储卷或者自定义配置文件,不会被自动移除。为了删除镜像,容器和存储卷:
sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd
你必须手动删除任何编辑过的配置文件。