一、引入
1、什么是虚拟化
在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,它允许在一台物理机上创建多个独立的虚拟环境,这些环境被称为虚拟机(VM)。每个虚拟机都可以运行自己的操作系统和应用程序,就像它们在单独的物理机上运行一样。虚拟化技术的关键在于它能够将物理资源(如处理器、内存、存储和网络)抽象化,使得这些资源可以被多个虚拟机共享和有效利用。
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件 对资源充分利用。
虚拟化主要有以下几种类型:
-
服务器虚拟化:这是最常见的虚拟化形式,它允许在一台物理服务器上运行多个虚拟服务器。这种技术通过使用虚拟机监视器(VMM)或称为Hypervisor的软件层来实现。Hypervisor可以直接安装在物理硬件上(类型1或裸机Hypervisor),或者作为操作系统之上的一个软件层(类型2或托管Hypervisor)。
-
存储虚拟化:这种虚拟化形式将多个存储设备的物理存储资源整合成一个或多个逻辑存储单元,从而简化管理和提高存储资源的利用率。
-
网络虚拟化:网络虚拟化涉及创建虚拟网络资源,如虚拟交换机、虚拟路由器和虚拟网络,这些资源可以在物理网络基础设施上创建多个隔离的网络环境。
-
桌面虚拟化:这种虚拟化允许用户通过远程访问在数据中心运行的虚拟桌面环境。用户可以在任何设备上访问他们的桌面,而桌面本身则运行在服务器上。
-
应用虚拟化:应用虚拟化允许应用程序在不同的操作系统和硬件平台上运行,而无需进行修改。这种技术通过将应用程序与底层操作系统分离来实现。
虚拟化的好处包括:
- 资源利用率提高:通过共享物理资源,可以更有效地使用硬件。
- 成本节约:减少了物理服务器的数量,从而降低了硬件、电力和冷却成本。
- 灵活性和可扩展性:可以快速创建、复制和移动虚拟机,以适应不断变化的业务需求。
- 灾难恢复和备份:虚拟化简化了备份和恢复过程,因为虚拟机可以很容易地被复制和迁移。
- 隔离和安全性:每个虚拟机都是隔离的,一个虚拟机的故障不会影响其他虚拟机。
虚拟化技术已经成为现代数据中心和云计算基础设施的核心组成部分,它使得IT资源的管理和部署更加灵活和高效。
2、与虚拟化相关的东西
(1)虚拟化软件
KVM(Kernel-based Virtual Machine)和 VMware 是两种流行的虚拟化技术,它们在虚拟化领域中扮演着重要角色。下面是对这两种技术的简要介绍:
① KVM(Kernel-based Virtual Machine)
KVM 是一种基于 Linux 内核的开源虚拟化解决方案。它允许 Linux 内核本身作为一个 Hypervisor 来运行虚拟机。KVM 使用硬件虚拟化扩展(如 Intel VT 或 AMD-V)来提供虚拟化功能。KVM 虚拟化模型包括一个内核模块 kvm.ko
来实现核心虚拟化基础设施,以及一个或多个处理特定硬件设备扩展的模块。
主要特点:
- 开源:KVM 是开源的,可以免费使用。
- 集成于 Linux:KVM 是 Linux 内核的一部分,因此它与 Linux 操作系统紧密集成。
- 硬件支持:KVM 利用现代处理器的硬件虚拟化扩展。
- 灵活性:KVM 可以与 QEMU 结合使用,提供灵活的虚拟化解决方案。
- 性能:KVM 提供了接近原生性能的虚拟化环境。
② VMware
VMware 是一家提供虚拟化和云基础设施解决方案的公司,其产品广泛应用于企业和数据中心。VMware 提供多种虚拟化产品,包括 VMware vSphere(用于服务器虚拟化)、VMware Workstation(用于桌面虚拟化)和 VMware Fusion(用于 Mac 平台)。
主要特点:
- 商业产品:VMware 提供的产品是商业软件,通常需要购买许可证。
- 成熟稳定:VMware 产品以其成熟稳定和丰富的功能而闻名。
- 广泛的支持:VMware 提供了广泛的企业支持和服务。
- 高级功能:VMware 提供了许多高级功能,如 vMotion(虚拟机迁移)、HA(高可用性)和 DRS(分布式资源调度)。
- 生态系统:VMware 拥有庞大的生态系统,包括第三方工具和集成解决方案。
③ 比较
- 成本:KVM 是免费的,而 VMware 是商业软件,需要购买许可证。
- 支持:VMware 提供专业的技术支持和维护服务,而 KVM 主要依赖社区支持。
- 功能和集成:VMware 提供了更多的高级功能和集成解决方案,而 KVM 则提供了基本的虚拟化功能,并可以与开源工具(如 QEMU)结合使用。
- 性能:两者在性能上都非常接近原生性能,但具体的性能表现可能会因配置和使用场景而异。
选择 KVM 还是 VMware 取决于具体的需求、预算和技术偏好。对于需要高级功能和专业支持的企业环境,VMware 可能是更好的选择。而对于寻求成本效益和开源解决方案的用户,KVM 可能更合适。
(2)虚拟化软件管理web项目
OpenStack 和阿里云的飞天(Apsara)是两种不同的云计算平台,它们各自服务于不同的市场和用户需求。以下是对这两种平台的简要介绍和比较:
① OpenStack
OpenStack 是一个开源的云计算平台,旨在为企业提供构建和管理私有云和公有云的能力。它由一系列相互关联的服务组成,这些服务共同提供了一个完整的云基础设施解决方案。OpenStack 的组件包括计算(Nova)、存储(Cinder, Swift)、网络(Neutron)、身份认证(Keystone)、镜像服务(Glance)等。
主要特点:
- 开源:OpenStack 是开源的,社区驱动,允许用户自由地修改和分发。
- 模块化:OpenStack 由多个独立的模块(服务)组成,可以根据需要选择和部署。
- 灵活性:用户可以根据自己的需求定制 OpenStack 的配置和部署。
- 社区支持:OpenStack 拥有一个庞大的全球社区,提供丰富的文档和社区支持。
② 阿里云飞天(Apsara)
飞天是阿里云自主研发的云计算操作系统,它支撑了阿里云的公有云服务,并为企业和开发者提供了一系列的云服务和解决方案。飞天系统包括了计算、存储、网络、数据库、大数据处理等多个层面的服务,旨在提供稳定、可靠、高效的云计算基础设施。
主要特点:
- 自主研发:飞天是阿里云自主研发的技术,与阿里云的其他服务紧密集成。
- 企业级服务:飞天提供了企业级的云服务,包括高可用性、安全性、弹性伸缩等特性。
- 生态系统:阿里云拥有庞大的生态系统,包括各种云产品和解决方案。
- 专业支持:阿里云提供了专业的技术支持和客户服务。
③ 比较
- 开源 vs 闭源:OpenStack 是开源的,而飞天是闭源的,属于阿里云的商业产品。
- 灵活性 vs 集成性:OpenStack 提供了高度的灵活性和定制性,而飞天则提供了与阿里云其他服务的紧密集成。
- 社区支持 vs 专业支持:OpenStack 依赖于社区支持,而飞天则提供了专业的技术支持和维护服务。
- 成本:OpenStack 的部署和维护成本可能会因定制化和社区支持而有所不同,而飞天的成本则与阿里云的服务定价相关。
选择 OpenStack 还是飞天取决于用户的具体需求。如果用户需要一个灵活、可定制的云平台,并且希望利用开源社区的力量,OpenStack 可能是一个好选择。如果用户更倾向于使用一个成熟、集成度高的云服务,并且需要专业的技术支持,那么飞天可能更适合。
(3)容器化
容器化是一种轻量级的虚拟化技术,它允许开发者将应用程序及其依赖打包成一个独立的、可移植的容器。这个容器可以在任何支持容器技术的环境中运行,无需担心环境差异导致的问题。容器化技术最著名的实现是Docker。
① 主要特点
- 轻量级:容器共享宿主机的操作系统内核,不需要为每个应用启动一个完整的操作系统,因此启动速度快,资源消耗少。
- 隔离性:虽然容器共享宿主机的内核,但它们在用户空间提供了隔离,每个容器都有自己的文件系统、网络、进程空间等。
- 可移植性:容器将应用程序及其所有依赖打包在一起,确保了应用在不同环境中的一致性。
- 快速部署:容器可以快速启动和停止,非常适合微服务架构和持续集成/持续部署(CI/CD)流程。
- 弹性伸缩:容器可以轻松地根据需求进行扩展或缩减,提高资源利用率。
② 优势
- 环境一致性:容器确保了开发、测试和生产环境的一致性,减少了“在我的机器上可以运行”的问题。
- 快速部署和回滚:容器可以快速部署新版本的应用,并且在出现问题时快速回滚到之前的版本。
- 资源高效:容器比传统虚拟机更高效地使用系统资源,因为它们不需要额外的操作系统开销。
- 微服务架构:容器非常适合微服务架构,每个服务可以打包成一个容器,独立部署和扩展。
③ 容器化的挑战
- 安全性:容器共享宿主机的内核,如果容器被攻破,可能会影响到宿主机或其他容器。
- 复杂性:随着容器数量的增加,管理和编排容器变得复杂,需要使用如Kubernetes这样的容器编排工具。
- 存储和网络:容器化带来了新的存储和网络挑战,需要专门的解决方案来管理容器的数据持久化和网络通信。
④ 应用场景
- 微服务架构:容器化是实现微服务架构的理想选择,每个微服务可以打包成一个容器。
- 持续集成/持续部署(CI/CD):容器化简化了构建、测试和部署流程,提高了开发效率。
- 云原生应用:容器化是云原生应用开发和部署的核心技术之一。
- 遗留应用现代化:容器化可以帮助将遗留应用现代化,提高其可移植性和可维护性。
(4)容器管理编排
容器管理编排是指自动化和管理容器化应用程序的过程,包括容器的部署、管理、扩展和网络配置等。随着容器技术的普及,特别是微服务架构的兴起,容器管理编排工具变得至关重要,因为它们可以帮助开发者有效地管理大量容器,确保应用程序的高可用性、可靠性和可扩展性。
① 主要功能
- 自动化部署和回滚:自动部署容器到集群中,并在出现问题时自动回滚到稳定版本。
- 服务发现和负载均衡:确保容器化服务可以被其他服务发现,并提供负载均衡以分散流量。
- 自动扩展:根据负载自动增加或减少容器实例,以保持应用性能和资源效率。
- 存储编排:自动挂载外部存储系统,如云存储、网络文件系统(NFS)等。
- 配置管理:管理容器应用的配置信息,确保配置的一致性和安全性。
- 密钥和配置管理:安全地存储和管理敏感信息,如密码、OAuth令牌和SSH密钥。
- 批量执行:在集群中批量执行任务,如数据备份、日志清理等。
- 资源监控和日志管理:监控容器和集群的资源使用情况,收集和分析日志。
② 常见的容器管理编排工具
- Kubernetes:由Google开发,是目前最流行的容器编排工具,提供了强大的自动化部署、扩展和管理容器化应用的能力。
- Docker Swarm:Docker官方提供的容器编排工具,与Docker平台紧密集成,易于使用。
- Apache Mesos:一个开源的集群管理器,可以运行Hadoop、Spark等多种框架,也支持容器编排。
- Amazon ECS/EKS:亚马逊云服务提供的容器编排服务,ECS是AWS原生的服务,EKS是托管的Kubernetes服务。
- Azure AKS:微软Azure提供的托管Kubernetes服务,简化了Kubernetes集群的部署和管理。
- Google GKE:谷歌云提供的托管Kubernetes服务,基于Google的Kubernetes引擎。
③ 容器管理编排的挑战
- 复杂性:随着集群规模的增大,管理和维护编排系统变得更加复杂。
- 安全性:需要确保容器和编排系统的安全性,防止未授权访问和数据泄露。
- 性能监控:需要有效的监控工具来跟踪容器和集群的性能,及时发现和解决问题。
- 故障恢复:需要设计有效的故障恢复策略,以确保应用的高可用性。
容器管理编排是容器化技术的关键组成部分,它使得大规模容器化应用的部署和管理变得更加高效和可靠。
二、docker介绍
1、什么是docker
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 加了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在上进行维护。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。容器不是一台机器,docker利用的是linux的资源分离机制,例如cgroups,以及linux核心命名空间(namespaces),来建立独立的容器(containers) 。容器看上去是一台机器,实际上是一个进程。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
试想下边这样一个场景:当我们把我们的web网站做成分布式的时候,我们就要加服务器,然后在各个服务器配置web所需要的配置,比如:数据库、web服务器、运行时啥,这样的我们的网站才能跑起来,但是每当我们加服务器的时候,我们都要再重新配置一下,很繁琐,有了docker,我们就可以把我们的网站和所需要的环境配置好,打成一个包(docker镜像),然后在服务器上安装docker,用docker拉取打包好的镜像,直接run(容器)起来就行了,什么都不用管了,很方便,更加的便于管理,镜像中修改配置,重新更新,所有的容器就也能修改了,我们的网站也就修改更新了,特别的方便。
2、Docker 的优点
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
(1)快速,一致地交付您的应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:
- 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
- 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
- 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
- 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
(2)响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
(3)在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
(4)Docker典型场景
- 使应用的打包与部署自动化
- 创建轻量、私密的PAAS环境
- 实现自动化测试和持续的集成/部署
- 部署与扩展webapp、数据库和后台服务
3、 docker和虚拟机比较
一说到docker,相信大家之前也了解过,那就必须要和虚拟机做一下比较,其实docker是和虚拟机是类似的东西,我们应该知道虚拟机就是在我们的操作系统上虚拟出来一个电脑,然后里边可以安装、运行各种各样的软件,和我们真的电脑是差不多的,我们可以拿着这个虚拟好的电脑(其实是一个文件)在按了虚拟机的其他电脑上可以直接运行,里边的东西就不用我们来回安装和配置了,也是很方便的。
docker其实提供的也是这么一种的技术,只不过它比虚拟机效率更加的高,启动快,占用资源小等一系列的优点,而且虚拟机比较笨重,这是因为虚拟机和docker来实现思想上有本质的区别,我们可以通过下边的两张图可以对比一下:
当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。当新建一个虚拟机时,虚拟机软件需要加载GuestOS,整个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,省略了这个复杂的过程,因此新建一个docker容器只需要几秒钟。因此docker更轻量级,所占的空间会更小,并且还能实现隔离。
这里要注意一下:但是docker本身并不是容器,而是创建容器的工具;而虚拟机它就是虚拟机了。
特性 | Docker容器 | VMware |
---|---|---|
虚拟化类型 | OS虚拟化 | 硬件虚拟化 |
性能 | =物理机性能 | 5%~20%损耗 |
隔离级别 | 进程级 | 操作系统级 |
隔离策略 | Cgroups | Hypervisor |
启动时间 | 秒级 | 分钟级 |
镜像存储 | KB~MB | GB~TB |
集群规模 | 上万 | 上百 |
补充:
Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg),目前已经成为容器编排一个标准。为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩、高可用等一系列完整功能,提高了大规模容器集群管理的便捷性。
总结:
虚拟机技术的缺点:
- 资源占用太多
- 冗余步骤多
- 启动很慢
容器化技术的优点:
- 服务器资源利用率高
- 比较轻量化
- 打包镜像测试,一键运行
比较Docker和虚拟机技术不同:
- 传统虚拟机,虚出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
- 容器内的应用之间运行在 宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以久轻便了
- 每个容器间是互相隔离的,每个容器内都有属于自己的文件系统,互不影响
- 安全性,docker的安全性更弱,
- 与虚拟机相比,docker隔离性更弱,docker属于进程之间的隔离,虚拟机可实现系统级别隔离
- docker创建时秒级的,docker的快速迭代性,无论是开发、测试、部署都可以节约大量时间
4、docker架构
Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
-
Docker daemon( Docker守护进程)
Docker daemon是一个运行在宿主机1( DOCKER-HOST)的后台进程。可通过 Docker客户端与之通信。
-
Client( Docker客户端)
Docker客户端是 Docker的用户界面,它可以接受用户命令和配置标识,并与 Docker daemon通信。图中, docker build等都是 Docker的相关命令。
-
Images( Docker镜像)
Docker镜像是一个只读模板,它包含创建 Docker容器的说明。它和系统安装光盘有点像,使用系统安装光盘可以安装系统,同理,使用Docker镜像可以运行 Docker镜像中的程序。
镜像到底是个什么东西呢,很多人在学习docker的时候都是一头雾水的,可是是歪果仁对镜像情有独钟吧,好多东西都有镜像的概念。比如我们安装系统的.iso文件,其实就是镜像,这里你就可以把镜像认为是一种模板。我们可以使用docker根据这个模板创建容器来运行,其实更可以理解为镜像是好比github上的仓库一样,我们可以克隆下来源代码然后运行,运行起来的代码可以是一个网站、一个应用程序啥的,这就可以叫做容器。说白了,镜像就是一堆静态的模板,运行起来的镜像就是容器。镜像一般需要我们拉取下来,是只读的,这个我们克隆github上的仓库是一样一样的。
docker镜像中有分层的概念,就是一个镜像可能基于好几个镜像,比如一个web运行环境可能需要操作系统ubuntu、数据库mysql、.net core runtime运行时,那我们拉取的这个镜像就会包好这好几个镜像,这就好像我们前边说的打包好的运行环境一样,直接就拉下来一个小电脑一样。
-
Container(容器)
当我们拉取了一个镜像,然后run一下,就会根据这个镜像运行出来一个容器,运行的容器就好像我们的应用程序一样,可以访问可以停止,我们运用多次run命令,就运行了很多很多容器,也可以说是镜像的实例。从这个角度来看,镜像和容器的关系有点类似于面向对象中,类和对象的关系。可通过 Docker API或者 CLI命令来启停、移动、删除容器。
-
Repository(仓库)
存放镜像的地方就是仓库,就好比存放代码的地方是github一样,我们就把github称为代码的仓库,github算是最大的仓库。那么存放docker镜像的地方我们叫做dockerhub,是docker的中央仓库。其实已经有dockerhub这个网站了(https://hub.docker.com/),这就是 存放docker镜像的官方仓库,好多官方的也保存在这里,保证了镜像的安全性和可靠性,我们可以从上边拉取一下镜像来运行我们的软件。当然我们也可以制作好我们自己镜像推送上去,不过这些肯定是要官方审核的,防止有些人写入一些恶意代码。不过我们可以推到我们自己的dockerhub上去,供我们自己使用,这个就好我们的github账号一样了,属于私有镜像了。
三、docker安装和配置
# 1 linux win 安装
# 2 win:https://www.docker.com/products/docker-desktop/ 下载 docker-desktop
-一路下一步安装
# 3 centos 7.9 安装
-视频,软件:vmware ,镜像文件
# 4 创建一个centos 7.9的虚拟机,在这个基础上讲docker
# 5 如果之前装过,卸载
# yum remove docker docker-common docker-selinux docker-engine
# rm -rf /var/lib/docker
yum update # 更新yum仓库
# 6 安装
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce -y
# 7 查看安装的版本
docker --version
# 8 目前我们只装了 docker-ce,
-只有:c 和 s端
-没有docker-compose
-没有图形化解码
-跟docker-destop的区别
# 9 启动docker
systemctl status docker
systemctl start docker
# 10 镜像--》从远程下载下来的---》hub.docker.com -->仓库下的
-有非常多镜:可以搜索,搜到以后,镜像有不同版本
-目前:访问不到了,拉去不下来
-配置:国内镜像站:阿里云
-https://cr.console.aliyun.com/cn-shanghai/instances/mirrors
sudo mkdir -p /etc/docker # 如果有,就不需要创建了
vi /etc/docker/daemon.json
# 加入
{
"registry-mirrors": ["https://x1566319.mirror.aliyuncs.com"]
}
# 按 esc
# 输入 :wq 敲回车
# 保存退出
systemctl daemon-reload # 重新加载docker配置
systemctl restart docker # 重启docker
四、Docker镜像和容器介绍
1、镜像(images)
Docker 镜像是一个独立的、轻量级的、可执行的软件包,它包含了运行应用程序所需的所有内容:代码、运行时、系统工具、系统库等。镜像是一个只读的模板,用于创建容器。它包含了应用程序运行所需的一切,因此可以确保在任何环境中都能一致地运行。
Docker 镜像通常是通过 Dockerfile 来创建的,Dockerfile 是一个文本文件,包含了一系列的指令,用于描述如何构建 Docker 镜像。通过运行 docker build
命令,可以根据 Dockerfile 构建出一个新的镜像。
2、容器(container)
Docker 容器是 Docker 镜像的运行实例。它包含了应用程序及其所有依赖的运行环境,包括文件系统、系统工具、库等。容器是独立于宿主机的,因此可以在任何支持 Docker 的平台上运行。
通过 Docker 容器,可以轻松地部署、复制和扩展应用程序。容器还提供了隔离性,使得应用程序之间不会相互影响。每个容器都是相互隔离的,因此可以同时运行多个容器,而它们之间不会发生冲突。
3、镜像和容器的关系
可以将 Docker 镜像看作是一个类比于类的概念,而 Docker 容器则是类的实例。镜像定义了应用程序运行所需的一切,而容器则是镜像的运行实例,它们之间是一种类与实例的关系。
容器是由镜像实例化而来,这和我们学习的面向对象的概念十分相似,我们可以把镜像看作类,把容器看作类实例化后的对象。也可以说镜像是文件, 容器是进程。 容器是基于镜像创建的, 即容器中的进程依赖于镜像中的文件, 这里的文件包括进程运行所需要的可执行文件,依赖软件,库文件,配置文件等等…
总的来说,Docker 镜像是一个静态的定义,用于创建容器,而容器则是一个运行时实体,可以被启动、停止、删除等操作。docker的整个生命周期有三部分组成:镜像(image)+容器(container)+仓库(repository)。
五、镜像操作
1、搜索镜像
- 去网站搜索
https://hub.docker.com/
- 使用命令行搜
docker search mysql
2、查看镜像
docker images
3、拉取镜像
- 从register下载到本地,使用阿里云镜像站加速拉取
- 注意拉取的对象在上面的网站一定能搜索得到的,在远程仓库,每一个镜像都有 对应的镜像名字和标签(tag),比如 ubuntu 和 latest。
docker pull mysql:5.7 # 下载mysql 5.7镜像
docker pull redis:latest # 下载redis最新的镜像
docker pull nginx:latest # 下载 nginx最新的镜像
docker pull centos:centos7 # 下载 centos7 的镜像
4、删除镜像
# 删除指定镜像
docker rmi redis:latest
或
docker image rm ed21b7a8aee9
# 删除所有镜像
docker image rm $(docker image ls -q) -f
# 清理临时的、没有被使用的镜像文件
docker image prune
# -a 删除全部未使用到的镜像
docker image prune -a
# -f 强制删除,不需要确认
docker image prune -a -f
六、容器操作
容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。
1、创建并运行一个容器,处于运行状态(run)
docker run [OPTIONS] IMAGE
# 1.OPTIONS(可选)
-d 在后台运行容器并打印容器ID(这也是非常常见的操作)
-i 意思就是会把交互界面保留着
-t 分配一个虚拟终端,在docker中启动bash就会有提示符,通常和-it会一起出现
-p 向宿主发布(开放)容器的端口,就是把容器端口和宿主机端口进行映射。 (-p + 宿主机端口:容器端口