17、Docker 存储驱动与公共云部署指南

Docker 存储驱动与公共云部署指南

1. Docker 存储驱动概述

在 Docker 应用中,存储驱动的选择至关重要,不同的存储驱动在性能、稳定性和适用场景上存在差异。

1.1 各存储驱动的特性

存储驱动 特性 适用场景 性能表现
Device Mapper 每次容器更新现有数据时,存储驱动执行写时复制(CoW)操作,从镜像快照复制到容器快照 适用于某些特定的企业级应用场景 性能较差,对容器性能有明显影响
AuFS 能在运行的容器间高效共享镜像,启动时间快,磁盘空间使用少,能高效利用系统页面缓存 适用于平台即服务(PaaS)等对容器密度要求高的场景 性能较好
OverlayFS 类似于 AuFS,但设计更简单,可能更快 未来可能替代 AuFS,但目前在生产环境中不够成熟 具有潜力,但目前不适用于生产环境

1.2 存储驱动选择建议

用户应根据应用的使用场景和所需的稳定性来选择 Docker 存储驱动,也可使用发行版 Docker 包安装的默认驱动。例如,若主机系统是 RHEL 或其变体,默认存储驱动是 Device Mapper;对于 Ubuntu,默认驱动是 AuFS。

2. Docker 数据卷管理

数据卷管理是 Docker 应用中的重要环节,以下介绍四种常见的数据存储方式及其优缺点。

2.1 四种数据存储方式

  1. 将数据存储在 Docker 容器内 :这是最基本的方式,但在生产环境中管理和处理数据缺乏灵活性。
  2. 使用仅用于存储数据的容器 :有助于提供一定的可靠性,但依赖主机的可用性。
  3. 直接将数据存储在主机上 :同样能提供可靠性,但也依赖主机的可用性。
  4. 使用第三方卷插件(如 Flocker 或 Convoy) :将数据存储在单独的块中,解决了上述方式的问题,即使容器在主机间转移或容器死亡,数据仍具有可靠性。

3. Amazon EC2 容器服务(Amazon ECS)

3.1 Amazon ECS 架构

Amazon ECS 的核心架构由集群管理器和调度器管理器组成。
- 集群管理器 :负责集群协调和状态管理任务,其状态存储在键/值存储中,为保证健壮性和可扩展性,该存储需具备持久性、可用性,并能抵御网络分区和硬件故障。通过维护基于事务日志的数据存储来实现并发控制。同时,集群管理器开放了一组 API,用户可通过列表命令检索管理的集群、运行的任务和 EC2 实例,通过描述命令获取特定 EC2 实例及其可用资源的详细信息。
- 调度器管理器 :位于集群管理器之上,二者相互解耦,允许客户构建自己的调度器。

资源池包括由容器划分的 Amazon EC2 实例的 CPU、内存和网络资源。Amazon ECS 通过在每个 EC2 实例上运行的开源 Amazon ECS 容器代理来协调集群,根据调度器的请求启动、停止和监控容器。

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(集群管理器):::process --> B(调度器管理器):::process
    B --> C(ECS 容器代理):::process
    C --> D(EC2 实例):::process
    A --> E(键/值存储):::process
    E --> F(事务日志数据存储):::process
    A --> G(API):::process
    G --> H(列表命令):::process
    G --> I(描述命令):::process

3.2 故障排除 - AWS ECS 部署

以下是在 AWS 上设置 ECS 的基本步骤,可帮助排除基本配置错误。
1. 启动 EC2 容器服务 :从 AWS 控制台的“计算”中启动 EC2 容器服务,点击“开始使用”按钮。
2. 创建资源 :在下一步屏幕中,选择部署示例应用程序、创建和管理私有存储库。提供存储库名称,生成容器镜像需要推送的存储库地址。
3. 安装和配置 AWS CLI :使用 pip 包管理器安装 AWS CLI。

$ pip install awscl

使用 aws configure 命令并提供 AWS 访问密钥 ID 和 AWS 秘密访问密钥进行登录。

$ aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]:
  1. 认证 Docker 客户端 :获取 Docker 登录命令,将本地 Docker 客户端认证到私有 AWS 注册表。
$ aws ecr get-login --region us-east-1
docker login -u AWS -p Key...

使用上述命令的输出链接配置 Docker 客户端,使其与部署在 AWS 中的私有存储库配合使用。

$ docker login -u AWS -p Key...
Flag --email has been deprecated, will be removed in 1.13.
Login Succeeded
  1. 标记并推送镜像 :标记 nginx 基本容器镜像,将其推送到私有存储库。
$ docker images
REPOSITORY  TAG     IMAGE ID      CREATED     SIZE
nginx       latest  19146d5729dc  6 days ago  181.6 MB
$ docker tag nginx:latest private-repo.amazonaws.com/sample:latest
$ docker push private-repo.amazonaws.com/sample:latest
The push refers to a repository [private-repo.amazonaws.com/sample]
e03d01018b72: Pushed
ee3b1534c826: Pushing [==>] 2.674 MB/58.56 MB
b6ca02dfe5e6: Pushing [>] 1.064 MB/123.1 MB
... Image successfully pushed
  1. 创建任务定义 :定义要运行的 Docker 镜像、分配的资源、挂载的卷、链接的 Docker 容器、启动时运行的命令、设置的环境变量、任务使用的 IAM 角色、是否为特权 Docker 容器、Docker 容器的标签、端口映射和网络以及 Docker 网络模式等。
  2. 声明服务 :对于持续运行的任务(如 Web 服务),声明服务可在 ECS 集群中同时运行和维护指定数量的任务定义。若任务失败,Amazon ECS 服务调度器会启动另一个实例,以维持服务中所需的任务数量。还可选择在负载均衡器后面运行所需数量的任务,Amazon ECS 支持配置弹性负载均衡,负载均衡器可配置为应用程序负载均衡器或经典负载均衡器。
  3. 配置集群 :配置集群,默认定义 t2.micro 为 EC2 实例类型,当前实例数量为 1。
  4. 部署和查看服务 :审查配置并部署 ECS 集群,创建集群后,点击“查看服务”按钮查看服务详细信息,点击 EC2 容器负载均衡器获取可公开访问的服务 URL,在负载均衡器的描述中,DNS 名称即为从互联网访问服务的 URL,访问该 URL 可看到“Welcome to nginx”页面。

3.3 更新 ECS 集群中的 Docker 容器

在持续交付模型中,通常需要更新容器和服务。可采用蓝绿部署方式,实现快速回滚。
1. 创建新的任务定义 :选择创建的 ECS 任务,点击“创建新任务定义”按钮。
2. 更新任务定义 :在新的任务定义中,可附加新容器或点击容器定义进行更新,还可使用高级容器配置设置环境变量。
3. 更新服务 :创建最新任务后,点击“操作”,然后点击“更新服务”。在更新过程中,可设置任务数量和自动缩放选项等。自动缩放组会根据所需信息启动,使用缩放策略可对集群实例和服务进行缩放,当需求减少时可安全地缩小规模。可用性区域感知的 ECS 调度器可管理、分配和缩放集群,使架构具有高可用性。

4. 微软 Azure 容器服务

4.1 微软 Azure 容器服务架构

Azure 是目前市场上发展最快的基础设施服务之一,支持按需扩展、创建混合环境和处理大数据。Azure 容器服务可部署开源容器集群和编排解决方案,通过 Azure 门户的简单 UI 和 CLI 支持,能部署基于 DC/OS(Marathon)、Kubernetes 和 Swarm 的容器集群。

微软 Azure 是首个官方支持主流容器编排引擎的公共云,其 Azure 容器服务引擎在 GitHub 上开源。Azure 资源管理器(ARM)模板是通过 ACS API 部署集群的基础,ACS 引擎用 Go 语言构建,用户可组合不同的配置片段,构建用于部署集群的最终模板。

Azure 容器引擎具有以下特性:
| 特性 | 说明 |
| — | — |
| 编排器选择 | 可选择 DC/OS、Kubernetes 或 Swarm 等编排器 |
| 多代理池 | 包含可用性集和虚拟机集 |
| Docker 集群规模 | 最大支持 1200 个节点 |
| 自定义 vNET 支持 | 支持自定义虚拟网络 |

Azure 容器服务主要以 DC/OS 为关键组件构建,其架构有三个基本组件:
- Azure 计算 :负责管理 VM 健康。
- Mesos :用于容器健康管理。
- Swarm :用于 Docker API 管理。

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(Azure 容器服务):::process --> B(Azure 计算):::process
    A --> C(Mesos):::process
    A --> D(Swarm):::process
    B --> E(VM 健康管理):::process
    C --> F(容器健康管理):::process
    D --> G(Docker API 管理):::process

4.2 故障排除 - 微软 Azure 容器服务

以下是在 Microsoft Azure 上部署 Docker Swarm 集群并提供编排器配置详细信息的步骤:
1. 创建 RSA 密钥 :创建 RSA 密钥,用于部署后登录到已部署的机器。

$ ssh-keygen

生成的密钥可在 ~/root/id_rsa 中找到。
2. 搜索并选择服务 :在 Azure 账户门户中点击“新建”按钮,搜索“Azure 容器服务”并选择它。
3. 选择部署模型 :选择资源管理器作为部署模型,然后点击“创建”按钮。
4. 配置基本设置 :在基本设置页面,需要提供以下信息:
- 用户名 :作为 Docker Swarm 集群中部署的虚拟机的管理员。
- SSH 公钥 :即步骤 1 中创建的 SSH 公钥。
- 资源组 :指定资源组名称来创建新的资源组。
5. 选择编排器配置 :根据需要选择编排器配置,如 Swarm、DC/OS 或 Kubernetes。
6. 提供详细配置 :提供编排器配置、代理数量、主节点数量,还可根据需要提供 DNS 前缀(如 dockerswarm)。
7. 检查并部署 :检查摘要,验证通过后点击“确定”,在下一步屏幕上点击“购买”按钮进行部署。
8. 查看部署状态 :部署开始后,可在 Azure 主仪表板上查看状态。
9. 连接到主节点 :Docker Swarm 集群创建完成后,从仪表板显示的 Docker Swarm 资源中点击“swarm - master”。在“swarm - master”的“基本信息”部分,可找到 DNS 条目。使用以下命令通过 SSH 连接到 swarm - master:

ssh <DNS_FROM_FIELD> -A -p 2200 -i <PUB_FILE_LOCATION>

连接到主节点后,即可执行基本的 Docker Swarm 命令,并在部署于 Microsoft Azure 的 Swarm 集群上进行容器部署。

综上所述,无论是 Amazon ECS 还是微软 Azure 容器服务,都为 Docker 容器的部署和管理提供了强大的支持。用户可根据自身的业务需求、技术栈和预算等因素,选择适合的云平台和相应的配置,以实现高效、稳定的容器化应用部署。同时,在实际操作过程中,要注意各平台的特性和配置要点,遇到问题时可按照上述的故障排除步骤进行解决。

已经博主授权,源码转载自 https://pan.quark.cn/s/053f1da40351 在计算机科学领域,MIPS(Microprocessor without Interlocked Pipeline Stages)被视作一种精简指令集计算机(RISC)的架构,其应用广泛存在于教学实践和嵌入式系统设计中。 本篇内容将深入阐释MIPS汇编语言中涉及数组处理的核心概念实用操作技巧。 数组作为一种常见的数据结构,在编程中能够以有序化的形式储存及访问具有相同类型的数据元素集合。 在MIPS汇编语言环境下,数组通常借助内存地址索引进行操作。 以下列举了运用MIPS汇编处理数组的关键要素:1. **数据存储**: - MIPS汇编架构采用32位地址系统,从而能够访问高达4GB的内存容量。 - 数组元素一般以连续方式存放在内存之中,且每个元素占据固定大小的字节空间。 例如,针对32位的整型数组,其每个元素将占用4字节的存储空间。 - 数组首元素的地址被称为基地址,而数组任一元素的地址可通过基地址加上元素索引乘以元素尺寸的方式计算得出。 2. **寄存器运用**: - MIPS汇编系统配备了32个通用寄存器,包括$zero, $t0, $s0等。 其中,$zero寄存器通常用于表示恒定的零值,$t0-$t9寄存器用于暂存临时数据,而$s0-$s7寄存器则用于保存子程序的静态变量或参数。 - 在数组处理过程中,基地址常被保存在$s0或$s1寄存器内,索引则存储在$t0或$t1寄存器中,运算结果通常保存在$v0或$v1寄存器。 3. **数组操作指令**: - **Load/Store指令**:这些指令用于在内存寄存器之间进行数据传输,例如`lw`指令用于加载32位数据至寄存器,`sw`指令...
根据原作 https://pan.quark.cn/s/cb681ec34bd2 的源码改编 基于Python编程语言完成的飞机大战项目,作为一项期末学习任务,主要呈现了游戏开发的基本概念和技术方法。 该项目整体构成约500行代码,涵盖了游戏的核心运作机制、图形用户界面以及用户互动等关键构成部分。 该项目配套提供了完整的源代码文件、相关技术文档、项目介绍演示文稿以及运行效果展示视频,为学习者构建了一个实用的参考范例,有助于加深对Python在游戏开发领域实际应用的认识。 我们进一步研究Python编程技术在游戏开发中的具体运用。 Python作为一门高级编程语言,因其语法结构清晰易懂和拥有丰富的库函数支持,在开发者群体中获得了广泛的认可和使用。 在游戏开发过程中,Python经常Pygame库协同工作,Pygame是Python语言下的一款开源工具包,它提供了构建2D游戏所需的基础功能模块,包括窗口系统管理、事件响应机制、图形渲染处理、音频播放控制等。 在"飞机大战"这一具体游戏实例中,开发者可能运用了以下核心知识点:1. **Pygame基础操作**:掌握如何初始化Pygame环境,设定窗口显示尺寸,加载图像和音频资源,以及如何启动和结束游戏的主循环流程。 2. **面向对象编程**:游戏中的飞机、子弹、敌人等游戏元素通常通过类的设计来实现,利用实例化机制来生成具体的游戏对象。 每个类都定义了自身的属性(例如位置坐标、移动速度、生命值状态)和方法(比如移动行为、碰撞响应、状态更新)。 3. **事件响应机制**:Pygame能够捕获键盘输入和鼠标操作事件,使得玩家可以通过按键指令来控制飞机的移动和射击行为。 游戏会根据这些事件的发生来实时更新游戏场景状态。 4. **图形显示刷新**:...
【顶级SCI复现】高比例可再生能源并网如何平衡灵活性储能成本?虚拟电厂多时间尺度调度及衰减建模(Matlab代码实现)内容概要:本文围绕高比例可再生能源并网背景下虚拟电厂的多时间尺度调度储能成本优化问题展开研究,重点探讨如何在保证系统灵活性的同时降低储能配置运行成本。通过构建多时间尺度(如日前、日内、实时)协调调度模型,并引入储能设备衰减建模,提升调度精度经济性。研究结合Matlab代码实现,复现顶级SCI论文中的优化算法建模方法,涵盖鲁棒优化、分布鲁棒、模型预测控制(MPC)等先进手段,兼顾风光出力不确定性需求响应因素,实现虚拟电厂内部多能源协同优化。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源、智能电网、能源互联网领域的工程技术人员。; 使用场景及目标:① 掌握虚拟电厂多时间尺度调度的核心建模思路实现方法;② 学习如何将储能寿命衰减纳入优化模型以提升经济性;③ 复现高水平SCI论文中的优化算法仿真流程,服务于科研论文写作项目开发。; 阅读建议:建议结合文中提供的Matlab代码逐模块分析,重点关注目标函数设计、约束条件构建及求解器调用过程,配合实际案例数据进行调试验证,深入理解优化模型物理系统的映射关系。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值