目录
虚拟化部署 (Virtualization Deployment)
1. sudo yum install -y yum-utils
1. systemctl enable docker --now
2. sudo tee /etc/docker/daemon.json <<-'EOF' ... EOF
3. sudo systemctl daemon-reload
4. sudo systemctl restart docker
Docker介绍
Docker 官网: https://www.docker.com/
Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个轻量级的、可移植的容器中。
Docker优势
一致的环境
开发与生产环境一致性:Docker 确保应用程序在开发、测试和生产环境中运行一致。无论在哪个环境中,应用程序的行为都是相同的,因为所有的依赖项和配置都打包在容器中。
避免“在我的机器上可以运行”的问题:由于环境一致性,开发者可以避免因环境差异导致的运行问题。
隔离性
资源隔离:每个 Docker 容器都是独立的,它们之间相互隔离,不会相互干扰。这意味着你可以运行多个容器,每个容器都可以有自己的依赖项和配置,而不会影响其他容器。
安全性:由于隔离性,容器内的应用程序不会直接访问宿主机的资源,从而提高了安全性。
可移植性
跨平台运行:Docker 容器可以在任何支持 Docker 的平台上运行,无论是 Linux、Windows 还是 macOS。这使得应用程序可以在不同的环境中轻松部署。
云平台支持:大多数云服务提供商都支持 Docker,使得应用程序可以轻松地在不同的云环境中迁移和扩展。
快速部署和扩展
快速启动:Docker 容器启动速度非常快,通常只需几秒钟。这使得开发者在开发和测试过程中可以快速启动和停止容器。
水平扩展:Docker 容器可以轻松地进行水平扩展,通过启动多个容器实例来处理更多的请求。
版本控制和依赖管理
版本控制:Docker 镜像可以进行版本控制,开发者可以轻松地回滚到之前的版本,或者在不同的版本之间切换。
依赖管理:Docker 镜像包含了应用程序的所有依赖项,确保在不同的环境中运行时不会缺少任何依赖。
资源效率
轻量级:Docker 容器比虚拟机更轻量级,因为它们共享宿主机的操作系统内核,而不是每个容器都运行一个完整的操作系统。
资源利用率高:由于轻量级和高效的资源管理,Docker 容器可以更高效地利用系统资源。
社区和生态系统
丰富的镜像库:Docker Hub 提供了大量的公共镜像,开发者可以直接使用这些镜像来快速构建应用程序。
强大的生态系统:Docker 有庞大的社区支持和丰富的工具链,如 Kubernetes、Docker Compose 等,可以帮助开发者更高效地管理和部署容器化应用。
简化开发流程
简化开发环境配置:开发者可以使用 Docker 来定义开发环境,确保所有团队成员使用相同的环境进行开发。
简化测试流程:测试人员可以使用 Docker 容器来运行测试,确保测试环境与生产环境一致。
Docker组件
在 Docker 生态系统中,各个组件之间有着紧密的联系,共同协作以实现容器化应用的构建、分发和运行。以下是 Docker 中各个关键组件之间的关系:
Docker CLI (命令行接口)
定义:Docker CLI 是用户与 Docker 交互的主要工具。它提供了一组命令,允许用户管理 Docker 镜像、容器、网络和存储等资源。
作用:用户通过 Docker CLI 发送命令,这些命令会被发送到 Docker 守护进程(Docker Host)进行处理。
示例命令:docker run, docker build, docker pull, docker push 等。
Docker Host (Docker 守护进程)
定义:Docker Host 是运行 Docker 守护进程(dockerd)的机器。守护进程负责管理 Docker 对象,如容器、镜像、网络和卷等。
作用:Docker Host 接收来自 Docker CLI 的命令,并执行相应的操作。它还负责与 Docker 注册表(仓库)进行通信,以拉取或推送镜像。
关系:Docker Host 是 Docker CLI 和 Docker 容器之间的桥梁。
容器 (Container)
定义:容器是 Docker 中的运行实例,它是基于镜像创建的。容器包含了应用程序及其所有依赖项,并且与宿主机和其他容器隔离。
作用:容器提供了一个轻量级的、可移植的运行环境,使得应用程序可以在任何支持 Docker 的环境中运行。
关系:容器是基于镜像创建的,并且由 Docker Host 管理。容器可以被启动、停止、删除和迁移。
镜像 (Image)
定义:镜像是用于创建容器的只读模板。它包含了运行应用程序所需的所有文件、库、配置和依赖项。
作用:镜像是容器的构建块,它定义了容器的行为和环境。镜像可以通过 Dockerfile 构建,也可以从 Docker 仓库中拉取。
关系:镜像是容器的蓝图,容器是镜像的运行实例。镜像可以被推送到 Docker 仓库,也可以从仓库中拉取。
仓库 (Registry)
定义:仓库是存储和分发 Docker 镜像的地方。Docker Hub 是最常用的公共仓库,但也可以使用私有仓库。
作用:仓库允许用户共享和分发镜像,使得团队成员可以轻松获取和使用相同的镜像。
关系:Docker Host 可以从仓库中拉取镜像,也可以将本地构建的镜像推送到仓库。Docker CLI 提供了 docker pull 和 docker push 命令来与仓库交互。
关系总结
Docker CLI 是用户与 Docker 交互的接口,用户通过它发送命令。
Docker Host 是运行 Docker 守护进程的机器,负责处理 Docker CLI 的命令并管理容器和镜像。
容器 是基于镜像创建的运行实例,由 Docker Host 管理。
镜像 是容器的只读模板,定义了容器的行为和环境。
仓库 是存储和分发镜像的地方,Docker Host 可以从仓库中拉取镜像,也可以将本地镜像推送到仓库。
通过这些组件的协作,Docker 提供了一个完整的容器化解决方案,使得应用程序的构建、分发和运行变得更加简单和高效。
应用程序部署方式
传统部署、虚拟化部署和容器部署是三种不同的应用程序部署方式,它们在资源利用、隔离性、可移植性和管理复杂性等方面有着显着的区别。以下是它们的详细比较:
传统部署 (Traditional Deployment)
特点:
- 直接在物理服务器上运行:应用程序直接安装在物理服务器上,使用服务器的操作系统及其资源。
- 资源共享有限:多个应用程序通常不能在同一台物理服务器上运行,因为它们可能会相互干扰。
- 环境依赖性强:应用程序对操作系统和服务器环境的依赖性强,环境差异可能导致应用程序无法正常运行。
- 扩展性差:扩展应用程序通常需要增加物理服务器,成本高且管理复杂。
优点:
- 简单直接:部署过程相对简单,不需要额外的虚拟化或容器化技术。
- 性能高:直接在物理硬件上运行,性能通常较高。
缺点:
- 资源利用率低:物理服务器的资源利用率通常较低,因为多个应用程序不能共享同一台服务器。
- 环境一致性差:开发、测试和生产环境可能存在差异,导致“在我的机器上可以运行”的问题。
- 扩展性差:扩展应用程序需要增加物理服务器,成本高且管理复杂。