我写博客已经有一段时间了,大都是记录一些平时遇到的问题,以及解决方案。因此知识点都比较零散,没有形成系统化的知识体系。所以从今天开始,我打算将学习过的一些知识重新复习一下,并且按照分类记录下来,方便自己和后来人学习查阅。

首先从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
  1. 安装最新版本的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 installyum update命令中指定版本,将会总是安装最高的可用版本,这些版本可能无法满足你的稳定性要求。

    这个命令安装Docker,但是它不会启动Docker。它还创建了一个docker用户组,但默认没有添加任何用户到这个用户组。

  2. 为了安装指定版本的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用户组,但默认没有添加任何用户到这个用户组。

  3. 启动Docker

    sudo systemctl start docker
  4. 通过运行helle-world镜像确认Docker已经被正确安装

    sudo docker run hello-world

    这个命令下载一个测试镜像并且创建一个容器运行它。当容器运行时,它将打印一条信息然后推出。

这些就是安装和运行Docker。使用sudo运行Docker命令,参考后续安装,以允许非特权用户运行Docker命令以及获取其他可选配置步骤。

升级Docker

为了升级Docker,下载更新的包文件并且重复上述安装步骤,使用yum -y upgrade替代yum -y install命令,并且指向新的包文件。

使用包安装

如果你没有办法使用Docker仓库来安装Docker,你可以为你的发行版下载.rpm文件来手动安装。每次你打算升级的时候都需要下载一个新的文件。

  1. 访问https://download.docker.com/linux/centos/并且选择你的CentOS版本。浏览x86_64/stable/Packages/目录并且下载你想要安装的Docker版本。

    注意事项

    为了安装开发版和测试版包,将上面URL中的stable改成nightlytest

  2. 安装Docker Engine,将下面的路径修改成你下载Docker包的位置。

    sudo yum install /path/to/package.rpm
  3. 启动Docker

    sudo systemctl start docker
  4. 通过运行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

  1. 卸载Docker,CLI和Containerd包:

    sudo yum remove docker-ce docker-ce-cli containerd.io
  2. 宿主机上的镜像,容器,存储卷或者自定义配置文件,不会被自动移除。为了删除镜像,容器和存储卷:

    sudo rm -rf /var/lib/docker
    sudo rm -rf /var/lib/containerd

你必须手动删除任何编辑过的配置文件。

最后修改:2023 年 08 月 02 日
如果觉得我的文章对你有用,请随意赞赏