物理机 > 虚拟机 > 容器
物理机到虚拟机再到容器的发展,是计算机和信息技术领域的重要演进过程,这一发展极大地提升了资源的利用效率、应用的灵活性和部署的便捷性。
以下是这一发展历程的详细概述:
- 物理机时代
- 早期的软件部署是基于物理服务器的。每个应用程序或服务都需要在独立的物理服务器上安装和运行。
- 这种方式简单直接,但存在许多挑战,如服务器的资源利用率低、硬件故障可能导致应用程序中断、资源浪费、硬件依赖性等。
- 例子:
一家电子商务网站,其商品目录和订单系统每个都运行在单独的物理服务器上,导致硬件资源浪费和维护成本增加。
“每个应用程序或服务都需要在独立的物理服务器上安装和运行”
即指:每一个不同的应用程序或者服务都必须被安装在单独的、专门的物理服务器设备上,并且各自独立地在该物理服务器上运行。
- 例如,一个企业可能有邮件应用程序、客户关系管理系统、财务软件等不同的应用。按照这种要求,就需要为邮件应用准备一台专门的物理服务器,将邮件应用安装在这台服务器上运行;同时为客户关系管理系统准备另一台独立的物理服务器进行安装和运行,以此类推。
“独立的物理服务器”
即指:一台单独的、有实际硬件设备的服务器计算机。它有自己独立的 CPU、内存、硬盘等硬件,不与其他服务器共享这些资源,在性能、安全性等方面有一定优势,并且管理员可以完全掌控它的管理和配置。
- 例如,一台配置了两颗高性能多核 CPU、大容量内存和高速固态硬盘的物理服务器,其所有这些硬件资源仅供特定的应用程序或服务使用,不会被其他应用程序共享。
- 虚拟机时代
- 为了解决物理机部署的问题,虚拟机(VM)技术被引入。
- 虚拟机允许多个虚拟操作系统运行在同一台物理服务器上,每个虚拟机都被认为是一个独立的服务器,可以运行自己的操作系统和应用程序。
- 特点:
- 提高了资源利用率和硬件的隔离性,使服务器的灵活性大大提高。
- 但也存在资源占用、启动时间、管理复杂性、依赖问题、版本控制、CI/CD流程、资源效率和移植性等问题。
- 例子:
电子商务网站可以将商品目录和订单系统部署在不同的虚拟机上,共享同一台物理服务器,以更好地利用硬件资源,降低成本。 - 主流技术:
KVM
(Kernel-based Virtual Machine):基于硬件虚拟化扩展(如Intel VT-x)和QEMU的修改版,是Linux下的一种主流虚拟化技术。- QEMU(Quick Emulator):一款采用了动态二进制翻译技术的虚拟化软件,常与KVM结合使用。
“虚拟机允许多个虚拟操作系统运行在同一台物理服务器上”
- 虚拟机可以同时运行多个虚拟操作系统在同一台物理服务器上,但这并不意味着可以无限制地同时运行。
- 这取决于物理服务器的硬件性能,如 CPU 处理能力、内存容量、存储读写速度和网络带宽等。
- 如果同时运行的虚拟机数量过多,超过了物理服务器的承载能力,就会出现性能下降、响应迟缓甚至系统崩溃等问题。
- 容器时代
- 容器化技术的出现弥补了虚拟机技术的不足,成为现代IT架构中的重要组成部分。
- 特点:
- 容器是轻量级、独立和可移植的,允许应用程序及其依赖项被封装在一个独立的容器中。
- 容器可以在不同环境中快速部署和运行,确保应用程序在各个阶段的一致性。
- 与虚拟机相比,容器具有更轻量级、更快速启动和更高效的资源利用等优势。
- 例子:
电子商务网站可以将商品目录和订单系统分别封装在独立的容器中,这些容器可以在开发、测试和生产环境中轻松部署,缩短交付周期。 - 主流技术:
Docker
:基于Linux内核的Cgroups、Namespace以及Union FS等技术开发的开源容器引擎,已成为容器技术的市场标准。- Kubernetes:一种流行的容器编排工具,提供自动化、伸缩性和高可用性,确保应用程序在容器集群中稳定运行。
从物理机到虚拟机再到容器的发展,是技术不断进步的体现。每个阶段都有其独特的优势和局限性,而容器技术的出现,更是为现代软件开发和部署带来了革命性的变化。随着技术的不断发展,我们可以期待未来在软件部署和运维方面会有更多的创新和突破。
以下是物理机、虚拟机和容器三种部署技术的对比及优缺点:
一、物理机部署
-
优点:
- 性能优势:没有虚拟化层的开销,可直接访问硬件资源,在某些对性能要求极高的场景下能发挥最大性能。
- 稳定性高:如果经过精心配置和维护,由于没有额外的虚拟化层干扰,可能具有较高的稳定性。
-
缺点:
- 资源利用率低:一台物理机通常只能运行单一的操作系统和应用,即使应用只使用部分资源,剩余资源也难以被其他应用利用。
- 部署灵活性差:部署新应用时,需要准备新的物理硬件,耗时较长。硬件采购成本高,且难以快速扩展或收缩资源。
- 管理复杂:对每台物理机都需要单独管理,包括安装操作系统、打补丁、维护硬件等,管理成本高。
二、虚拟机部署
-
优点:
- 资源隔离性好:每个虚拟机都有独立的操作系统,相互之间的资源是隔离的,一个虚拟机的故障或安全问题一般不会影响到其他虚拟机。
- 灵活性高:可以根据需求动态分配资源,如增加或减少 CPU、内存等。可以快速创建、复制和迁移虚拟机,方便部署和扩展。
- 兼容性好:可以在同一物理服务器上运行不同操作系统的虚拟机,满足不同应用的需求。
-
缺点:
- 性能开销:由于存在虚拟化层,会有一定的性能损失。虽然现代虚拟化技术已经将这种损失降到很低,但在一些对性能要求极高的场景下可能仍然是个问题。
- 资源占用较大:每个虚拟机都需要占用一定的磁盘空间来存储操作系统和应用程序,启动时也需要一定的时间和资源。
- 管理复杂性:需要专门的虚拟化管理软件,增加了管理的复杂性和成本。
三、容器部署
-
优点:
- 轻量级:容器只包含应用程序及其依赖项,不需要模拟完整的操作系统,启动速度快,资源占用少。
- 可移植性强:由于容器与底层操作系统解耦,只要目标环境支持容器运行时,就可以轻松地在不同的服务器、云平台甚至个人电脑上运行相同的容器。
- 高效部署:容器化应用可以通过标准化的镜像进行部署,方便实现持续集成和持续部署(CI/CD),提高开发和运维效率。
- 资源利用率高:可以在同一台物理服务器上运行大量的容器,根据实际需求动态分配资源,充分利用硬件资源。
-
缺点:
- 隔离性相对较弱:虽然容器提供了一定的隔离性,但与虚拟机相比,隔离程度较低。如果某个容器出现问题,可能会对同一宿主机上的其他容器产生一定影响。
- 安全性挑战:容器共享宿主机的内核,一旦内核出现安全漏洞,可能会影响所有容器。同时,容器的安全管理相对复杂,需要专门的安全策略和工具。
- 技术复杂性:容器技术相对较新,对于一些传统的运维团队来说,可能需要一定的学习成本来掌握和管理容器化环境。
以下是对不同部署技术应用场景的总结:
物理机:
- 适用于对性能要求极致的高性能计算场景,以及有特定硬件需求和安全隔离要求极高的情况。
虚拟机:
- 在多租户环境中为不同用户提供隔离的服务。
- 适合传统企业应用,可模拟特定操作系统和软件环境。
- 是开发和测试环境的良好选择,便于快速创建不同配置的环境。
容器:
- 是微服务架构的理想部署方式,可独立部署和扩展微服务。
- 非常适合持续集成和持续部署流程,保证部署的可靠性和高效性。
- 适用于云原生应用,与云平台良好集成,实现自动化部署和弹性扩展。
“微服务”
微服务就是一种架构风格,就是把一个项目拆分成独立的多个服务,并且多个服务是可以独立运行的,而每个服务都会占用线程。
容器的由来
容器的概念最早可以追溯到1979年UNIX系统中的chroot系统调用。chroot是一个UNIX操作系统的系统调用,它的主要作用是将一个进程及其子进程的根目录改变到文件系统中的一个新位置,使得这些进程只能访问到这个新的位置,从而达到了进程隔离的目的。这是容器技术最早的雏形。
为什么需要容器
容器技术的出现和发展,主要源于以下几个方面的需求:
- 标准化运行环境:容器提供了一种标准化的运行环境,其中包含应用程序所需的所有依赖项和库。这使得应用程序在不同的开发、测试和生产环境中都能保持一致的表现,减少了“在我的机器上运行正常”这类问题的出现。
- 隔离性:通过容器化,每个应用程序都运行在其自己的隔离环境中,与其他应用程序相互独立。这不仅增强了应用程序的安全性(因为恶意软件或漏洞不会影响到其他容器),也提高了可维护性(因为可以单独管理、更新或回滚每个容器)。
- 资源利用率:在同一台服务器上运行多个容器,可以充分利用硬件资源,提高资源利用率。
- 可移植性:容器镜像包含了应用程序及其所有依赖项,因此可以轻松地从一个环境迁移到另一个环境,无论是物理机、虚拟机还是云主机。这种“构建一次,到处运行”的能力极大地简化了部署流程。
- 快速启动和停止:容器共享宿主机内核,因此启动和停止速度非常快,这使得在CI/CD管道中频繁地构建、测试和部署应用程序变得更加高效。
容器的演化过程
容器技术的演化过程是一个不断发展和完善的过程,主要经历了以下几个阶段:
-
早期容器技术:
- 2000年,FreeBSD开发了一个类似于chroot的容器技术Jails,这是最早期的容器技术之一。
- 2001年,Linux也发布了自己的容器技术Linux VServer。
- 2004年,Solaris发布了Solaris Containers,将资源进行划分,形成一个个zones,又叫做虚拟服务器。
-
虚拟化支持的容器技术:
- 2005年,推出OpenVZ,它通过对Linux内核进行补丁来提供虚拟化的支持,每个OpenVZ容器完整支持了文件系统、用户及用户组、进程、网络、设备和IPC对象的隔离。
-
Linux内核支持:
- 2007年,Google实现了Control Groups(cgroups),并加入到Linux内核中,为后期容器的资源配额提供了技术保障。
- 2008年,基于cgroups和linux namespace推出了第一个最为完善的Linux容器LXC。
-
Docker的兴起:
- 2013年,Docker作为目前最为流行和使用最广泛的容器技术出现。Docker引入了一整套容器管理的生态系统,包括分层的镜像模型、容器注册库、友好的Rest API等。
- 随后,Docker逐渐发展出企业版(EE)和社区版(CE),每个季度都会发布一个稳定版本,为不同需求的用户提供支持。
-
容器云的发展:
- 随着容器技术的成熟,容器云的发展也逐渐兴起。以Kubernetes为代表的容器集群管理技术为微服务的发展奠定了基石。
- 容器云平台管理技术不断演进,提供了更加高效、灵活的容器管理方案,推动了云计算和微服务架构的广泛应用。
=> 容器的由来可以追溯到UNIX系统中的chroot系统调用,而容器技术的发展则是为了满足标准化运行环境、隔离性、资源利用率、可移植性和快速启动等需求。随着技术的不断演进和完善,容器技术已经成为云计算和微服务架构中不可或缺的一部分。
Docker是什么
Docker是一个开源的应用容器引擎,它基于Go语言开发并遵从Apache2.0协议。Docker的主要作用是将应用程序及其依赖环境打包成一个轻量级、可移植的容器,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。
以下是Docker的详细解释:
-
Docker的基本概念
- 镜像(Image):
Docker镜像是一个只读的模板,包含了运行某个容器所需要的所有文件系统层、配置、元数据等。它类似于虚拟机镜像,但更为轻量级和高效。 - 容器(Container):
容器是镜像运行时的实体,是Docker利用容器技术来运行和隔离应用的一个轻量级的沙箱。容器可以被创建、启动、停止、删除、暂停等,且容器之间是相互隔离的。 - 仓库(Repository):
Docker仓库类似于代码仓库,是Docker集中存放镜像文件的场所。它允许用户上传、下载和管理自己的镜像。
- 镜像(Image):
-
Docker的特点
- 轻量级与可移植性:
Docker容器不需要额外的虚拟机管理程序,直接在宿主机的操作系统内核上运行,因此具有更高的性能和更低的资源消耗。同时,Docker容器可以在不同的机器和环境中无缝迁移,保证了应用的可移植性。 - 隔离性:
Docker容器之间是相互隔离的,每个容器都有自己独立的文件系统、进程空间、用户空间和网络空间等,确保了应用的安全性和稳定性。 - 快速部署与迭代:
Docker容器可以快速创建和销毁,使得应用的部署和迭代变得更加高效和灵活。
- 轻量级与可移植性:
-
Docker的用途
- 快速搭建开发环境:
Docker可以让开发者在本地快速搭建出与生产环境一致的开发环境,降低了环境配置的难度和成本。 - 持续集成与持续部署:
Docker容器可以在不同的环境中保持一致的运行状态,非常适合用于持续集成和持续部署的工作流程。 - 微服务架构:
Docker容器可以轻松地实现微服务的部署和管理,使得微服务架构的落地变得更加简单和高效。 - 云原生应用:
Docker是云原生应用的重要组成部分,它提供了应用容器化的能力,使得应用可以更加灵活地部署在云平台上。
- 快速搭建开发环境:
-
Docker与虚拟化的区别
- 虽然Docker和虚拟化技术都可以实现应用的隔离和部署,但它们在实现方式和资源利用方面存在很大的区别。
- Docker使用半虚拟化的实现方式,相当于在物理操作系统上创建多个进程,每个进程只包含了物理操作系统的一些库文件和应用程序所需要的依赖包。
- 而虚拟机则使用全虚拟化的实现方式,相当于在物理操作系统上再创建多个独立的操作系统。
- 因此,Docker在启动时间、资源利用率和性能等方面都优于传统的虚拟机技术。
=> Docker是一种高效、轻量级、可移植的应用容器引擎,它通过将应用程序及其依赖环境打包成容器的方式,实现了应用的快速部署、迭代和迁移。随着云原生技术的不断发展,Docker已经成为云原生应用不可或缺的一部分。
Docker作为一个强大的容器化平台,其核心要素包括镜像(Images)、容器(Containers)和仓库(Registries)。
以下是对这三个要素的详细解释:
镜像(Images)
定义:
- Docker镜像是一个只读的模板,它包含了运行某个软件所需的所有内容,包括代码、运行时环境、库、环境变量和配置文件等。简单来说,镜像就是一个轻量级、可执行的独立软件包。
特性:
- 只读性:镜像在创建后是不可变的,保证了其一致性和可靠性。
- 分层结构:Docker镜像由多层组成,每一层都是构建在上一层之上的,这种分层结构使得镜像的复用和修改变得更加高效。
- 基础镜像:大多数镜像都是基于一个基础镜像(如Ubuntu、CentOS等)构建的,通过在这些基础镜像上添加额外的层来创建新的镜像。
操作:
- 拉取镜像:使用
docker pull
命令从远程仓库(如Docker Hub)拉取镜像到本地。 - 查看镜像:使用
docker images
或docker image ls
命令查看本地已存在的镜像。 - 构建镜像:可以使用
docker build
命令基于Dockerfile构建新的镜像,也可以使用docker commit
命令从正在运行的容器中提交为新的镜像。
容器(Containers)
定义:
- Docker容器是镜像的运行实例,它是通过Docker镜像创建的运行环境。容器是轻量级的,每个容器都可以运行自己的应用和服务,并且容器之间是相互隔离的。
特性:
- 轻量级:容器与虚拟机不同,它不需要额外的操作系统,只需要一个宿主机的内核就可以运行。
- 隔离性:容器之间是相互隔离的,每个容器都有自己的文件系统、网络、进程等,保证了应用的安全性和稳定性。
- 可移植性:容器可以在任何安装了Docker的服务器上运行,无论是物理机还是虚拟机。
操作:
- 创建并启动容器:使用
docker run
命令基于镜像创建并启动容器。 - 查看容器:使用
docker ps
命令查看正在运行的容器,使用docker ps -a
查看所有容器(包括未运行的)。 - 停止和删除容器:使用
docker stop
命令停止容器,使用docker rm
命令删除容器。
仓库(Registries)
定义:
- Docker仓库是集中存放镜像的地方,可以看作是一个镜像的存储库。仓库分为公共仓库和私有仓库,Docker Hub是Docker官方提供的最大的公共镜像仓库。
特性:
- 集中管理:仓库提供了镜像的集中管理功能,用户可以方便地查找、下载和上传镜像。
- 权限控制:私有仓库提供了权限控制功能,只有授权的用户才能访问和修改仓库中的镜像。
操作:
- 登录仓库:使用
docker login
命令登录到Docker仓库。 - 上传镜像:使用
docker push
命令将本地镜像上传到仓库。 - 搜索镜像:使用
docker search
命令在仓库中搜索镜像。
=> Docker的镜像、容器和仓库共同构成了Docker的核心架构,它们相互协作,使得Docker成为了一个强大的容器化平台。
一文搞清楚 Docker 镜像、容器、仓库 – 阿里云
Docker的主要作用可以概括为以下几个方面:
- 应用打包与分发:
Docker允许开发者将应用及其依赖打包成一个轻量级的、可移植的容器镜像。这个镜像包含了运行应用所需的一切,如代码、运行时环境、库、环境变量和配置文件等。开发者可以将这个镜像推送到Docker仓库中,然后其他用户或系统就可以从仓库中拉取这个镜像,并在本地或云端快速部署应用。这种方式极大地简化了应用的分发和部署过程。 - 环境一致性:
在软件开发过程中,不同开发者和不同环境之间的配置差异经常导致“在我这里可以运行”的问题。Docker通过提供一致的运行环境,确保了应用在不同环境(开发、测试、生产)中的行为是一致的。这有助于减少因环境差异导致的问题,提高开发效率和应用的稳定性。 - 资源隔离与安全性:
Docker容器之间是相互隔离的,每个容器都有自己独立的文件系统、进程空间、用户空间和网络空间等。这种隔离性有助于防止应用之间的相互影响,提高系统的安全性。同时,Docker还提供了多种安全特性,如镜像签名、内容信任、安全扫描等,进一步增强了容器的安全性。 - 快速部署与扩展:
Docker容器可以快速创建和销毁,这使得应用的部署和扩展变得非常灵活和高效。开发者可以轻松地增加或减少容器的数量,以适应不同的负载需求。此外,Docker还支持容器编排工具(如Kubernetes),可以自动化地管理容器的部署、扩展、更新和故障恢复等任务。 - 促进微服务架构:
Docker容器非常适合用于实现微服务架构。每个微服务都可以被打包成一个独立的Docker容器,并在不同的容器中运行。这种方式有助于降低微服务之间的耦合度,提高系统的可维护性和可扩展性。同时,Docker还提供了服务发现和负载均衡等特性,以支持微服务之间的通信和协作。 - 云原生应用的基础:
随着云原生技术的兴起,Docker已经成为云原生应用不可或缺的一部分。云原生应用通常运行在容器化环境中,并利用容器编排工具进行自动化管理。Docker为云原生应用提供了轻量级、可移植的容器化解决方案,使得应用可以更加灵活地部署在云平台上,并充分利用云平台的弹性和可扩展性。
=> Docker的主要作用是通过提供容器化技术来简化应用的打包、分发、部署、扩展和管理过程,同时提高应用的可靠性、安全性和可维护性。
Docker能够用于多种具体的应用场景,以下是一些典型的应用实例:
-
快速搭建开发环境
Docker允许开发者将应用程序及其所有依赖项打包到一个容器中,从而快速搭建出与生产环境一致的开发环境。这种方式极大地简化了环境配置的过程,减少了因环境差异导致的问题,提高了开发效率。 -
微服务架构的实现
在微服务架构中,Docker容器可以将应用程序分解为多个独立的模块化服务,每个服务都运行在自己的容器中,并通过API相互通信。这种方式提高了系统的可维护性和可扩展性,使得开发者可以更容易地对系统进行升级和扩展。同时,Docker还提供了服务发现和负载均衡等特性,以支持微服务之间的通信和协作。 -
持续集成/持续部署(CI/CD)
Docker容器可以在不同的环境中保持一致的运行状态,非常适合用于持续集成和持续部署的工作流程。通过使用Docker容器,开发者可以在一个一致的环境中构建、测试和部署应用,从而简化了软件开发和交付过程。此外,Docker还支持与CI/CD工具的集成,如Jenkins、GitLab CI等,以实现自动化的构建、测试和部署流程。 -
容器化的数据库和中间件
Docker容器还可以用于部署数据库和中间件等基础设施服务。通过将数据库和中间件服务容器化,开发者可以更容易地管理这些服务的版本和配置,同时也能够更灵活地进行扩展和迁移。此外,Docker还提供了数据持久化和容器间通信等特性,以支持数据库和中间件服务的稳定运行和协作。 -
云计算和云原生应用
随着云计算和云原生技术的兴起,Docker已经成为云原生应用不可或缺的一部分。云原生应用通常运行在容器化环境中,并利用容器编排工具进行自动化管理。Docker为云原生应用提供了轻量级、可移植的容器化解决方案,使得应用可以更加灵活地部署在云平台上,并充分利用云平台的弹性和可扩展性。 -
自动化测试
Docker容器可以用于自动化测试场景。通过将测试环境和应用程序一起打包到容器中,可以确保测试环境的一致性和可重复性。这样,开发者可以更容易地编写和执行自动化测试用例,以验证应用程序的功能和性能。 -
多租户应用
在多租户应用中,Docker容器可以用于为每个租户提供隔离的运行环境。通过使用Docker容器,可以为每个租户创建独立的数据库和应用程序实例,并确保它们之间的数据和资源相互隔离。这种方式提高了系统的安全性和稳定性,同时也使得租户可以更容易地管理和维护自己的应用和数据。
=> Docker具有广泛的应用场景和实用价值。无论是用于快速搭建开发环境、实现微服务架构、支持CI/CD流程还是云计算和云原生应用等领域,Docker都能够为开发者提供高效、可靠和灵活的解决方案。
Docker的使用流程
Docker的使用流程主要涵盖了从安装Docker、获取镜像、运行容器到管理容器和镜像等一系列操作。以下是Docker使用的详细流程:
1. 安装Docker
Windows系统:
- 开启Hyper-V。
- 下载Docker Desktop并安装。
- 注册并配置Docker加速器(如阿里云),以加速镜像下载。
Linux系统(以Ubuntu为例):
- 卸载旧版本的Docker(如果已安装)。
- 更新apt包索引。
- 安装必要的工具包。
- 添加Docker GPG秘钥。
- 配置仓库源(推荐使用国内源以提高下载速度)。
- 安装Docker Engine。
- 启动Docker服务。
2. 获取镜像
Docker镜像可以从多个来源获取,包括Docker Hub、私有仓库或本地文件。
-
从Docker Hub获取:
- 使用
docker pull [镜像名]:[标签]
命令从Docker Hub下载镜像。 - 例如:
docker pull ubuntu:latest
将下载最新版本的Ubuntu镜像。
- 使用
-
从私有仓库获取:
- 需要先登录到私有仓库。
- 使用与从Docker Hub相同的
docker pull
命令下载镜像。
-
从本地文件获取:
- 使用
docker load -i [镜像文件]
命令加载本地保存的.tar格式的镜像文件。
- 使用
3. 运行容器
获取镜像后,可以基于镜像运行容器。
-
直接运行:
- 使用
docker run [选项] [镜像名] [命令]
命令运行容器。 - 例如:
docker run -it ubuntu bash
将启动一个Ubuntu容器并打开一个bash终端。
- 使用
-
创建并运行交互式容器:
- 使用
-it
选项以交互模式运行容器,并分配一个伪终端。
- 使用
4. 管理容器
-
查看容器:
- 使用
docker ps
查看正在运行的容器。 - 使用
docker ps -a
查看所有容器(包括已停止的)。
- 使用
-
停止和启动容器:
- 使用
docker stop [容器ID或名称]
停止容器。 - 使用
docker start [容器ID或名称]
启动已停止的容器。
- 使用
-
删除容器:
- 使用
docker rm [容器ID或名称]
删除容器。如果容器正在运行,需要先停止它。
- 使用
5. 管理镜像
-
查看镜像:
- 使用
docker images
查看本地所有镜像。
- 使用
-
删除镜像:
- 使用
docker rmi [镜像ID或名称]
删除镜像。如果镜像被容器使用,需要先删除容器或强制删除镜像。
- 使用
6. 其他操作
-
容器备份与迁移:
- 可以将容器导出为.tar文件进行备份,然后导入到其他Docker环境中。
-
配置Docker:
- 可以为Docker配置加速器、修改镜像存储路径等,以提高性能和方便管理。
-
使用Dockerfile:
- Dockerfile是一个文本文件,包含了一系列的命令和参数,用于自动构建Docker镜像。通过编写Dockerfile,可以自定义镜像的构建过程。