我写博客已经有一段时间了,大都是记录一些平时遇到的问题,以及解决方案。因此知识点都比较零散,没有形成系统化的知识体系。所以从今天开始,我打算将学习过的一些知识重新复习一下,并且按照分类记录下来,方便自己和后来人学习查阅。 首先从Docker开始吧,万物始于Docker。对于技术类的东西,我一向的原则是先用起来,然后再去理解理论的东西。因为干巴巴的理论学起来枯燥不说,还很容易忘记。相对来说,实践更容易留下深刻印象。操作之中一定会遇到疑惑的地方,这个时候再去理解原理层面的东西,就会有种豁然开朗的感觉。 ### 一、Docker安装 Docker目前非常的成熟了,几乎支持所有主流平台的安装,譬如Windows、Linux、MacOS、ARM平台等。而且官方的文档也提供了详尽的安装教程。[传送门](https://docs.docker.com/get-docker/)。 这里以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 install`和`yum 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- docker-ce-cli- 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/](https://download.docker.com/linux/centos/)并且选择你的CentOS版本。浏览`x86_64/stable/Packages/`目录并且下载你想要安装的Docker版本。 > 注意事项 > > 为了安装开发版和测试版包,将上面URL中的`stable`改成`nightly`或`test`。 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](https://get.docker.com)提供了一个便利的脚本,用于在开发环境中快速并且无交互地安装Docker。不建议在生产环境中使用便利脚本,但是它可以作为一个示例,安装你的需要创建一个配置脚本。同样参考**使用仓库安装**的步骤学习使用包仓库来安装的方法。脚本的源码是开源的,可以在这里找到[https://github.com/docker/docker-install](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](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权限,参考[后续步骤](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user)。Docker同样可以不使用root权限进行安装,或者配置成在无root模式运行。关于在无root模式下运行Docker的介绍,参考[https://docs.docker.com/engine/security/rootless/](https://docs.docker.com/engine/security/rootless/)。 ###### 安装预发行版本 Docker同样在[https://test.docker.com/](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 ``` 你必须手动删除任何编辑过的配置文件。 Loading... 我写博客已经有一段时间了,大都是记录一些平时遇到的问题,以及解决方案。因此知识点都比较零散,没有形成系统化的知识体系。所以从今天开始,我打算将学习过的一些知识重新复习一下,并且按照分类记录下来,方便自己和后来人学习查阅。 首先从Docker开始吧,万物始于Docker。对于技术类的东西,我一向的原则是先用起来,然后再去理解理论的东西。因为干巴巴的理论学起来枯燥不说,还很容易忘记。相对来说,实践更容易留下深刻印象。操作之中一定会遇到疑惑的地方,这个时候再去理解原理层面的东西,就会有种豁然开朗的感觉。 ### 一、Docker安装 Docker目前非常的成熟了,几乎支持所有主流平台的安装,譬如Windows、Linux、MacOS、ARM平台等。而且官方的文档也提供了详尽的安装教程。[传送门](https://docs.docker.com/get-docker/)。 这里以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 install`和`yum 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/](https://download.docker.com/linux/centos/)并且选择你的CentOS版本。浏览`x86_64/stable/Packages/`目录并且下载你想要安装的Docker版本。 > 注意事项 > > 为了安装开发版和测试版包,将上面URL中的`stable`改成`nightly`或`test`。 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](https://get.docker.com)提供了一个便利的脚本,用于在开发环境中快速并且无交互地安装Docker。不建议在生产环境中使用便利脚本,但是它可以作为一个示例,安装你的需要创建一个配置脚本。同样参考**使用仓库安装**的步骤学习使用包仓库来安装的方法。脚本的源码是开源的,可以在这里找到[https://github.com/docker/docker-install](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](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权限,参考[后续步骤](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user)。Docker同样可以不使用root权限进行安装,或者配置成在无root模式运行。关于在无root模式下运行Docker的介绍,参考[https://docs.docker.com/engine/security/rootless/](https://docs.docker.com/engine/security/rootless/)。 ###### 安装预发行版本 Docker同样在[https://test.docker.com/](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 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏