目录
一、云基础知识
1、常见的云服务厂商
2、云计算服务模式三种层次
3、什么是虚拟化
4、什么是虚拟机
5、虚拟化产品
5.1 仿真虚拟化产品
5.2 半虚拟化产品
5.3 全虚拟化产品
6、虚拟机架构
6.1 寄居架构
6.2 源生架构
二、认识容器
1、容器的概述
2、容器的优点
3、容器的缺点
4、容器的相关技术
三、认识Docker
1、Docker 概念
2、Docker发展史
3、Docker与虚拟机的区别
4、Docker 三大核心概念
4.1 image 镜像
4.2 container 容器
4.3 repostory 仓库
5、Docker容器在内核中支持两种重要技术
5.1 Namespace(命名空间)
5.2 Control Groups (cgroups)
四、安装Docker
1、yum安装
2、编译安装
3、查看 Docker 详细信息
一、云基础知识
1、常见的云服务厂商
- 国内云:阿里云、华为云、腾讯云、移动云、百度云、天翼云(私有云)
- 国外云:谷歌云、亚马逊云、甲骨文云
选择云服务提供商时,通常需要考虑服务的稳定性、性能、价格、地域覆盖范围、安全性等因素
2、云计算服务模式三种层次
-
基础设施即服务(IaaS - Infrastructure as a Service):
- 在这一层,提供商提供基础的计算资源,如虚拟机、存储空间和网络资源。用户可以通过这些资源构建自己的应用程序和环境,管理操作系统和应用程序。
-
平台即服务(PaaS - Platform as a Service):
- PaaS层在IaaS的基础上提供更高级的服务,包括开发工具、数据库管理系统、中间件等。用户可以在这一层上开发、运行和管理应用程序,而无需关心基础设施的细节。
-
软件即服务(SaaS - Software as a Service):
- SaaS是最顶层的服务模式,用户通过互联网访问和使用提供商提供的应用程序。用户无需关心应用程序的维护、升级和安全性,只需专注于使用应用程序来解决业务问题。
每个层级都提供不同程度的管理和控制权,用户可以根据自身需求选择适合的服务模式
3、什么是虚拟化
虚拟化是一种技术,通过它可以将计算资源(如服务器、存储、网络)或应用程序等进行逻辑上的隔离,使其看起来像是独立的实体。这种虚拟化技术可以让多个虚拟实体(虚拟机、容器等)共享同一物理资源,从而提高资源利用率、降低成本,并简化管理
在计算领域中,有几种常见的虚拟化技术:
-
硬件虚拟化:硬件虚拟化是通过虚拟化软件(如Hypervisor)在物理服务器上创建多个虚拟机,每个虚拟机可以运行独立的操作系统和应用程序。这种虚拟化技术使得一台物理服务器可以同时运行多个虚拟服务器,提高了资源利用率
-
容器虚拟化:容器虚拟化是一种轻量级的虚拟化技术,通过容器引擎(如Docker)在操作系统级别创建独立的容器,每个容器可以运行一个应用程序及其依赖项。容器共享主机操作系统的内核,因此相比虚拟机更加轻量级,启动速度更快
-
网络虚拟化:网络虚拟化是通过虚拟化技术将网络资源进行逻辑隔离,使得不同的网络实体(如虚拟机、容器)可以共享同一物理网络基础设施,实现网络资源的灵活分配和管理。
虚拟化技术在云计算、数据中心、网络等领域得到广泛应用,可以提高资源利用率、灵活性和可扩展性,同时简化部署和管理。通过虚拟化技术,用户可以更高效地利用计算资源,实现快速部署、弹性扩展和灵活管理
4、什么是虚拟机
虚拟机(Virtual Machine)是一种软件实体,它模拟了具有独立功能的物理计算机。虚拟机可以在一台物理计算机上创建多个独立的虚拟环境,每个虚拟机都可以运行自己的操作系统和应用程序,就像是在一台独立的物理计算机上运行一样
虚拟机技术的核心是虚拟化技术,通过虚拟化软件(Hypervisor)在物理计算机上创建并管理多个虚拟机。每个虚拟机都被分配了一部分物理计算机的资源,如处理器、内存、存储和网络等。这使得多个虚拟机可以在同一台物理计算机上同时运行不同的操作系统和应用程序,而彼此之间相互隔离,互不干扰
虚拟机的优点包括:
- 资源隔离:每个虚拟机拥有自己的资源分配,相互之间不会干扰。
- 灵活性:可以在同一台物理计算机上运行不同类型的操作系统和应用程序。
- 资源利用率:提高了物理计算机资源的利用率,降低了硬件成本。
- 快速部署:可以快速创建和部署新的虚拟机,适用于快速搭建开发环境或测试环境等场景。
虚拟机广泛应用于服务器虚拟化、开发测试环境、云计算等领域,为用户提供了更灵活、高效的计算资源管理方式
5、虚拟化产品
5.1 仿真虚拟化产品
- 仿真虚拟化产品是一种虚拟化技术,它通过模拟硬件和软件环境来创建虚拟化实例。与传统虚拟化不同,仿真虚拟化产品不依赖于物理硬件的虚拟化支持,而是在软件层面模拟硬件和操作系统的功能,从而实现虚拟化
- 在仿真虚拟化中,一个称为仿真器(simulator)或模拟器(emulator)的软件会模拟硬件的行为,让虚拟机(虚拟实例)以为自己在运行于真实硬件上。这种虚拟化技术通常用于开发、测试、教育和研究等领域,以便在不同的硬件和软件环境中运行和测试应用程序
一些常见的仿真虚拟化产品包括:
-
VMware Workstation:
- VMware Workstation 是一款针对 Windows 和 Linux 操作系统的虚拟化软件。它允许用户在个人计算机上创建、配置和运行多个虚拟机,以便在同一台物理计算机上同时运行多个操作系统和应用程序。VMware Workstation 提供了丰富的功能,包括快照、虚拟网络配置、共享文件夹等,适用于开发、测试、培训等场景
-
VMware Fusion:
- VMware Fusion 是专为 macOS(苹果电脑)平台设计的虚拟化软件。类似于 VMware Workstation,VMware Fusion 允许 macOS 用户在自己的 Mac 计算机上创建和运行虚拟机,以便在 Mac 上同时运行 Windows、Linux 或其他操作系统。VMware Fusion 提供了与 macOS 集成的特性,如 Launchpad 集成、Retina 显示支持等,使用户可以方便地在 Mac 上体验其他操作系统
-
QEMU:
- QEMU 是一个开源的仿真虚拟化工具,可以模拟多种硬件架构和操作系统,包括 x86、ARM、PowerPC 等。它广泛用于开发和测试嵌入式系统、操作系统和应用程序
5.2 半虚拟化产品
- 在半虚拟化中,虚拟机知道自己在虚拟化环境中运行,并与虚拟化层进行协作。客户操作系统的部分代码会被修改以便更有效地与虚拟化层通信
- 半虚拟化通常比全虚拟化具有更好的性能,因为虚拟机可以更直接地与虚拟化层交互,减少了虚拟化层的介入
- 但半虚拟化需要客户操作系统的支持,可能需要特定的操作系统版本或内核
一些常见的半虚拟化产品包括:
-
Xen(rehl 5自带):
- Xen 是一个开源的虚拟化平台,支持半虚拟化技术。rehl 5自带Xen(虚拟机监视器)。在 Xen 中,虚拟机通过修改后的操作系统(称为 Xen 启动加载程序或Dom0)来与 Hypervisor 进行通信,实现半虚拟化
-
Hyper-V(微软):
- Microsoft 的虚拟化平台 Hyper-V 也支持一定程度的半虚拟化技术,通过与虚拟机中的操作系统进行通信来提高性能
-
VirtualBox:
- VirtualBox 是由 Oracle 公司开发的免费开源虚拟化软件,可在各种操作系统上运行,包括 Windows、MacOS、Linux 和 Solaris 等。VirtualBox 提供了一个用户友好的界面,方便用户创建、配置和管理虚拟机
- VirtualBox 主要用于桌面虚拟化,即在个人计算机上创建虚拟机来运行其他操作系统或软件。它适用于开发、测试、教育和个人用户等场景
-
Citrix Hypervisor:
- Citrix Hypervisor,以前称为 XenServer,是由 Citrix 公司开发的企业级虚拟化平台,基于开源虚拟化技术 Xen。Citrix Hypervisor 提供了丰富的功能,支持高可用性、虚拟机迁移、资源池管理等企业级特性
- Citrix Hypervisor 主要用于服务器虚拟化,即在服务器上创建虚拟机来运行各种工作负载,包括应用程序、数据库、Web 服务等。它适用于企业级环境,提供了强大的管理和监控功能
5.3 全虚拟化产品
- 在全虚拟化中,虚拟机(VM)完全模拟了物理硬件,包括处理器、内存、存储和网络等设备。虚拟机中的操作系统以为自己在运行在真实的物理硬件上,不需要对操作系统进行修改
- 全虚拟化通常使用Hypervisor来创建和管理虚拟机,Hypervisor负责将虚拟机的指令翻译成对物理硬件的操作,并提供资源隔离和管理功能
- 优点包括广泛兼容性和易用性,但由于需要完全模拟硬件,性能开销较大
一些常见的全虚拟化产品包括:
-
ESXi(普遍使用次数多):
- ESXi 是 VMware 公司的一款基于 Type-1 Hypervisor 的虚拟化操作系统,用于在物理服务器上直接运行虚拟机。它是一种裸机虚拟化技术,可以直接访问物理服务器的硬件资源,从而提供高性能和效率
- ESXi 被设计为一种轻量级、高性能的虚拟化解决方案,可以安装在服务器硬件上,作为虚拟化平台来运行多个虚拟机实例
ESXi是裸金属之上安装的虚拟化产品,首先需要在服务器上安装ESXi操作系统,然后使用客户端或网页端连接登录该ESXi操作系统,系统层会调用硬件服务器中的配置(网络、存储、CPU、内存)来创建虚拟机
-
vSphere:
- vSphere 是 VMware 公司的虚拟化平台,包括了多个产品和组件,用于构建和管理虚拟化环境。vSphere 提供了一整套的虚拟化解决方案,包括计算、存储、网络和管理等功能
- vSphere 包括了多个产品和组件,如 vCenter Server(用于集中管理虚拟化环境)、ESXi(用于虚拟化服务器)、vSphere Client(用于管理虚拟化资源)、vSphere Hypervisor(免费版本的 ESXi)等
-
KVM:
- KVM是一个基于Linux内核的开源虚拟化技术,它将Linux内核转化为一个类型 1 的 Hypervisor,可以让用户在其上运行多个虚拟机。
- KVM利用处理器的虚拟化扩展(如Intel VT-x和AMD-V)来提供硬件辅助虚拟化,从而实现更高的性能和效率。
- KVM支持全虚拟化和硬件辅助虚拟化,可以在Linux系统上搭建虚拟化环境,是许多虚拟化平台和云计算解决方案的基础之一
KVM 通过使用内核,再调用QEMU组件(调用硬件设备,来完成CPU、内存、硬盘的逻辑划分) 来完成虚拟化
-
OpenStack:
- OpenStack是一个开源的云计算平台,旨在提供弹性计算、存储和网络资源的自动化管理。它由一系列的项目组成,每个项目负责不同的云计算功能,如计算(Nova)、网络(Neutron)、存储(Cinder、Swift)等
- OpenStack提供了一个完整的云计算解决方案,可以用于构建私有云、公共云和混合云环境。用户可以通过OpenStack管理虚拟机、存储、网络等资源,并提供自助服务的云计算环墩
6、虚拟机架构
6.1 寄居架构
虚拟化产品的寄居架构是一种虚拟化技术架构,其中虚拟机(VM)在一个称为“寄主”(host)的物理服务器上运行,而不是在物理服务器的硬件上直接运行。这种架构使得多个虚拟机可以共享同一台物理服务器的计算资源,从而提高资源利用率和灵活性
在虚拟化产品的寄居架构中,每个虚拟机都被分配一部分物理服务器的计算资源,如处理器、内存、存储和网络。虚拟化软件负责管理这些资源的分配和调度,以确保不同虚拟机之间的隔离和性能
一些常见的虚拟化产品的寄居架构包括:VMware vSphere、Microsoft Hyper-V、KVM
数据流向:真实的操作系统 ----> 虚拟化产品 ----> 虚拟化操作系统或软件
6.2 源生架构
虚拟化产品的本地架构是一种虚拟化技术架构,其中虚拟机(VM)直接在物理服务器的硬件上运行,而无需依赖宿主操作系统。这种架构通常称为“裸机虚拟化”或“裸金属虚拟化”,因为虚拟化软件直接在硬件上运行虚拟机,而不需要额外的操作系统层
本地虚拟化架构的优势在于减少了虚拟化软件和操作系统之间的层级,提高了性能和效率。由于虚拟机直接访问物理硬件资源,因此在本地虚拟化环境中,虚拟机的性能往往更接近于物理服务器的性能
一些常见的虚拟化产品的本地架构包括:Xen、VMware ESXi
数据流向:裸金属服务器 ----> 虚拟化产品
二、认识容器
1、容器的概述
容器是一种轻量级、可移植的软件打包技术,用于将应用程序及其所有依赖关系(如库、配置文件等)打包在一起,以便在不同计算环境中进行一致性部署和运行。每个容器都是一个独立、安全的运行时环境,可以在其上运行应用程序,而不会受到宿主系统或其他容器的影响
容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。
一些流行的容器技术包括 Docker 和 Kubernetes。Docker 是一个开源的容器化平台,提供了创建、部署和运行容器的工具和环境。Kubernetes 则是一个用于自动化容器部署、扩展和管理的开源平台,可以帮助管理大规模的容器化应用程序
总的来说,容器技术为开发人员和运维团队提供了一种灵活、高效的部署方式,可以加快应用程序的交付速度,提高整体的可移植性和可靠性
2、容器的优点
-
轻量级:与虚拟机相比,容器更加轻量级,因为它们共享宿主操作系统的内核,无需每个容器都运行一个完整的操作系统
-
可移植性:容器打包了应用程序及其所有依赖项,使得应用程序可以在不同的计算环境中以相同的方式运行,无需担心环境差异导致的问题
-
快速部署:由于容器包含了应用程序的所有组件,因此可以快速部署和启动,减少了配置和依赖项设置的复杂性
-
隔离性:每个容器都是独立的运行时环境,具有自己的文件系统、进程空间和网络空间,可以实现应用程序之间的隔离,确保安全性和稳定性
-
可互换:可以即时部署更新和升级
-
可扩展:可以增加并自动分发容器副本
-
可堆叠:可以垂直和即时堆叠服务
3、容器的缺点
-
复杂性增加:随着容器及应用数量的增加,同时也伴随着复杂性的增加。在生产环境中管理如此之多的容器是一个极具挑战性的任务,可以使用 Kubernetes 和 Mesos 等工具管理具有一定规模数量的容器
-
原生 Linux 支持:大多数容器技术,比如 Docker,基于 Linux 容器(LXC),相比于在原生 Linux 中运行容器,在 Microsoft 环境中运行容器略显笨拙,并且日常使用也会带来复杂性
-
不成熟:容器技术在市场上是相对新的技术,需要时间来适应市场。开发者中的可用资源是有限的,如果某个开发者陷入某个问题,可能需要花些时间才能解决问题
总的来说,容器技术的优点远大于缺点,特别是在现代应用程序开发和部署中,容器技术已经成为一种不可或缺的工具,可以提高开发效率、部署速度和系统可靠性
4、容器的相关技术
- Docker
Docker 是一个基于Go语言实现的开源的容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上
- Podman
Podman 是一个用于管理容器和镜像的工具,类似于 Docker。它是一个开源项目,旨在提供一个简单、快速和安全的容器管理解决方案
- K8s
Kubernetes,它是一个用于自动部署、扩展和管理容器化应用程序的开源平台。提供了一个可靠的基础设施平台,可以用于构建、部署和管理跨主机的容器化应用程序
- container
docker核心组件之一,container是 Docker 打包的核心,它包含了应用程序及其依赖项、文件系统和运行时环境,以便在不同的计算环境中统一运行。容器化技术使得应用程序可以在各种环境中以相同的方式运行,而无需关心底层的操作系统和硬件差异
- LXC
linux 容器化技术,类似于 Docker。LXC 不同于传统的虚拟机技术,它通过利用 Linux 内核提供的命名空间和 cgroups 等功能,实现了对进程和资源的隔离,从而能够在单一 Linux 主机上运行多个独立的 Linux 系统容器
- crio
轻量级,一个专门为 Kubernetes 设计的轻量级容器运行时工具。它作为 Kubernetes CRI(容器运行时接口)的一部分,用于在 Kubernetes 集群中运行容器。CRI-O 专注于符合 Open Container Initiative(OCI)规范的容器运行,同时支持容器管理和生命周期操作
- apche mesos
是一个开源的集群管理系统,旨在提供高效且可扩展的资源隔离和共享。它允许用户在整个数据中心的服务器上运行各种应用程序框架,并有效地管理计算资源。Mesos可以自动化任务分配和资源调度,使得整个集群的利用率更高,同时提供了弹性和容错能力。Apache Mesos还支持多种不同类型的工作负载,包括大数据处理、容器化应用程序等
三、认识Docker
1、Docker 概念
docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 linux服务器,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类iphone的app),并且容器开销极其低
Docker的设计宗旨:Build,Ship and Run Any App,Anywhere,即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统
Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序
2、Docker发展史
文档:https://www.cnblogs.com/rongba/articles/14782624.html
3、Docker与虚拟机的区别
传统部署 ----> 虚拟机部署 ----> 容器化部署的演变如下图所示:
- Docker容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量
- 虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多
特性 | Docker | 虚拟机 |
---|---|---|
部署难度 | 非常简单 | 组件多,部署复杂 |
启动速度 | 秒级 | 分钟级 |
执行性能 | 和物理系统一致 | VM会占用部分资源 |
镜像体积 | MB级别 | GB级别 |
管理效率 | 简单 | 各组件相互依赖,管理复杂 |
可管理性 | 单进程 | 完整的系统管理 |
网络连接 | 弱 | 借助neutron可以灵活组件各类网络管理 |
性能 | 接近原生(直接在内核中运行) | 50%左右的所示 |
系统支持量(单机) | 上千个 | 几十个 |
隔离性 | 进程级别 | 操作系统级别 |
封装程度 | 直达包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |
4、Docker 三大核心概念
4.1 image 镜像
- Docker 的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板
- 通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量和配置文件
- Docker 镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统。因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是 Docker 镜像的精髓
4.2 container 容器
- Docker 的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性
- 可以把容器看做是一个简易版的 linux 环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序
- 镜像 nginx(run) 起来之后的一个实例,可以把容器看做时一个简易版的linux环境容器就是集装箱(logo上的集装箱)
4.3 repostory 仓库
- Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取
- Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker
- 仓库就是放镜像的场所,最大的公开库是docker hub
- registry 是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag) 仓库分为两种,公有仓库和私有仓库,最大的公开仓库是 docker Hub,存放了数量庞大的镜像供用户下载,国内的有docker pool。这里仓库的概念与 Git 类似,registry 可以理解为 github 这样的托管服务
5、Docker容器在内核中支持两种重要技术
docker 本质就是宿主机的一个进程,docker是通过 namespace 实现资源隔离,通过 cgroup 实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)
5.1 Namespace(命名空间)
命名空间是Linux内核提供的一种机制,用于隔离系统资源,使得一个进程看到的资源是有限的。Docker使用不同类型的命名空间(如PID、Network、Mount、IPC等)来实现容器之间的隔离,确保各个容器拥有自己独立的运行环境
namespace | 系统调用参数 | 隔离内容 |
---|---|---|
UTS | CLONE_NEWUTS | 主机名与域名 |
IPC | CLONE_NEWWIPC | 信号量、消息队列和共享内存 |
PID | CLONE_NEWPID | 进程编号 |
NETWORK | CLONE_NEWNET | 网络设备、网络栈、端口等 |
MOUNT | CLONE_NEWNS | 挂载点(文件系统) |
UDER | CLONE_NEWUSER | 用户和组(3.8以后的内核才支持) |
5.2 Control Groups (cgroups)
cgroups是Linux内核提供的另一种机制,用于限制、账户和隔离一个或多个进程的资源使用(如CPU、内存、磁盘I/O等)。Docker使用cgroups来管理容器的资源配额,确保容器在运行时不会占用过多的系统资源,从而实现资源控制和管理
- cgroup的特点
①cgroup的api以一个伪文件系统的实现方式,用户的程序可以通过文件系统实现cgroup的组件管理
②cgroup的组件管理操作单元可以细粒度到线程级别,另外用户可以创建和销毁cgroup,从而实现资源的分配和再利用
③所有资源管理的功能都以子系统的方式实现,接口统一子任务创建之初与其父任务处于同一个cgroup的控制组
- cgroup的四大功能
①资源限制:可以对任务使用的资源总额进行限制
②优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级
③资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
④任务控制:cgroup可以对任务执行挂起、恢复等操作
⑤总的来说,cgroup就是控制容器能够使用资源的上限
四、安装Docker
1、yum安装
#环境设置:关闭防火墙和核心防护
systemctl stop firewalld.service
setenforce 0
-------------------------------------------------------------------------------------------
#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
#yum-utils:提供了 yum-config-manager 工具
#device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构
#device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2
-------------------------------------------------------------------------------------------
#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-------------------------------------------------------------------------------------------
#安装 Docker-CE
yum install -y docker-ce docker-ce-cli containerd.io #默认安装最新版本
#yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io #指定版本安装
-------------------------------------------------------------------------------------------
#开启Docker,并设置为开机自启动
systemctl enable --now docker.service
注:
- 安装好的Docker系统有两个程序,Docker服务端和Docker客户端
- 其中Docker服务端是一个服务进程,负责管理所有容器
- Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程
- 大部分情况下Docker服务端和客户端运行在一台机器上
docker version #查看 docker 版本信息
2、编译安装
安装包下载地址:https://download.docker.com/linux/static/stable
#下载安装包并解压
wget https://download.docker.com/linux/static/stable/x86_64/docker-26.1.0.tgz
tar xzvf docker-26.1.0.tgz
----------------------------------------------------------------------------------------
#将二进制文件移动到可执行路径上的目录,例如/usr/bin/
cp docker/* /usr/bin/
----------------------------------------------------------------------------------------
#启动
dockerd &
#此命令下载测试映像并在容器中运行它
docker run hello-world
----------------------------------------------------------------------------------------
#使用 systemctl 管理
vim /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
#重新加载systemctl服务,并开启Docker,设置为开机自启动
systemctl daemon-reload
systemctl enable --now docker.service
3、查看 Docker 详细信息
docker info
4、Docker 相关目录与文件
/var/lib/docker 是 Docker 引擎默认的工作目录,用于存储 Docker 运行时的各种数据
目录/文件 | 说明 |
---|---|
buildkit | 这是用于构建镜像的工具 BuildKit 的工作目录,包含构建镜像时使用的临时文件和缓存 |
containers | 存放 Docker 容器的相关信息,每个容器都有一个对应的目录,包括容器的元数据、日志、进程信息等 |
engine-id | 存放 Docker 引擎的唯一标识符,用于标识不同的 Docker 引擎实例 |
image | 存放 Docker 镜像的文件,每个镜像都有一个对应的目录,包括镜像的各个层和元数据信息 |
network | 存放 Docker 网络的相关信息,包括网络配置、状态等 |
overlay2 | 存放 Docker 使用的存储驱动 Overlay2 的数据,包括镜像层、容器文件系统等 |
plugins | 存放 Docker 插件的相关信息,包括插件的执行文件、配置等 |
runtimes | 存放 Docker 运行时的相关信息,包括不同的运行时的配置、状态等 |
swarm | 存放 Docker Swarm 集群的相关信息,包括集群配置、状态等 |
tmp | 用于存放临时文件的目录,Docker 在运行过程中会在这里创建临时文件 |
volumes | 存放 Docker 卷的数据,包括卷的内容、元数据信息等 |
这些目录中的数据对于 Docker 引擎的正常运行非常重要,因此在管理 Docker 环境时需要谨慎处理这些目录中的数据,避免意外删除或修改导致系统故障或数据丢失