亚马逊云科技云原生之对容器入门的学习笔记

发布于:2022-11-08 ⋅ 阅读:(814) ⋅ 点赞:(0)


前言

     通过这次亚马逊云科技云原生课程的学习,我认识到了容器,知道了容器的重要性以及它的作用性多么大,以及学习到了微服务架构的特点,以及它和单体架构的区别在哪,以及为什么说容器是支持现代微服务架构使用的基础技术。

一、容器的比喻

 (1)首先,我们要学习入门一门新的东西,那肯定要认识它,知道它的前世今生,那么,容器是什么东西呢,在古代,我们经常使用船在海上进行运输,那么这个船就可以比喻为容器。  以及在现代,我们经常见到的集装箱,它们都是一个个容器。这些例子都是通过平常生活中常见的物品,来进行比喻容器。

   (2)那么在计算机领域,又该如何理解容器呢?它在计算平台中,容器是一种标准化的软件单元,它同时也是在操作系统级别实施的一种形式的虚拟化。容器它是独立的轻量级软件包,其中包括运行应用程序所需的一切。例如:代码、运行时、系统工具、系统库和设置。而且所有容器共享底层主机系统的操作系统内核。 这些容器可以是大型企业应用程序中的服务,也可以是在隔离环境中运行的独立应用程序。

二、虚拟化和抽象的区别

    (1)接下来,我们看一下容器和其他形式的虚拟化的区别,例如使用裸机服务器,人们可以构建架构层,例如基础设施和应用程序软件层。

    (2)例如在服务器硬件上安装操作系统,在该操作系统上安装所有共享库,这种运行方式持续了很长一段时间了,但这种架构的问题在于效率极低,无论你是以0%的利用率还是100%的利用率运行,硬件成本都是相同的,所有应用程序都需要争夺相同的资源,并且你必须使库的版本与所有应用程序保持同步,如果一个应用程序需要库的更新版本,但主机上运行的其他应用程序不兼容这个版本,这时就会遇到问题,你可以通过在操作系统上放置虚拟化平台来提高敏捷性,现在,你已经使用虚拟机自带的完整操作系统隔离了应用程序及其库,这样,你可以使用现有的硬件运行更多的虚拟机,从而提高了利用率并大大减少了物理占用空间,虚拟机的缺点是含有非常多的虚拟化层,在本示例中,主机上现在有四个操作系统,而不是一个,这就意味着需要更多的补丁和更新,同时在物理主机上占用了更多的空间,此外,还有很严重的冗余,你可能将相同的操作系统安装了四次,还可能将相同的库安装了三次。

     (3)为了解决上面的问题,我们就引入了容器,容器运行时共享操作系统内核,让你能够使用文件系统层创建容器镜像。容器具有轻量级、高效、快速的特点,与虚拟机相比,容器的启动和关闭速度更快,从而可以更好地利用基础硬件,你可以按需共享库,也可以为不同的应用程序提供不同的库,彼此互不影响,而且容器高度可移植,由于容器将软件与其他层隔离开来。

三、Docker的基础和DockerFile的使用

 (1)概念:Docker在2013年3月发布,它是一个轻量级容器虚拟化平台,提供用于创建、存储、管理和运行容器的工具。它的优势:可移植的运行时应用程序环境;可将应用程序和依赖项打包进单一的不可变构体中;能够同时运行具有不同依赖项的不同应用程序版本;更快的开发和部署周期;提高资源利用率和效率。

 (2)DockerFile的使用

 Dockerfile可以基于已有镜像构建镜像,Dockerfile其实就是一个文本文件,由一系列命令和参数构成,Docker可以读取Dockerfile文件并根据Dockerfile文件的描述来构建镜像。Dockerfile文件内容一般分为4部分:基础镜像信息;维护者信息;镜像操作指令;容器启动时执行的指令。

 制作JDK镜像的代码如下(示例):

# 第1步:创建目录
mkdir –p /usr/myy/dockerjdk8
cd /usr/myy/dockerjdk8
      
# 第2步:下载jdk-8u202-linux-x64.tar.gz并上传到服务器虚拟机中的/usr/myy/dockerjdk8目录 

#  第3步:在/usr/myy/dockerjdk8目录下创建Dockerfile文件,文件内容如下:
vi Dockerfile

FROM centos:7
MAINTAINER ITCAST
WORKDIR /usr
RUN mkdir  /usr/myy/java
ADD jdk-8u202-linux-x64.tar.gz /usr/myy/java/
ENV JAVA_HOME /usr/myy/java/jdk1.8.0_202
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

# 第4步:执行命令构建镜像
docker build -t='jdk1.8' .

# 第5步:查看镜像是否建立完成
docker images

四、容器与微服务架构的关联

   (1)推动容器发展的最强有力的因素之一是微服务架构的兴起,微服务是一种软件开发的架构和组织方法,旨在加快部署周期,这种方法能够促进创新和所有权,提高软件应用程序的可维护性和可扩展性。

   (2)首先,我们先看一下这个传统架构示例,对于每个应用程序,所有进程紧密耦合,这意味着,如果应用程序的一个进程遇到需求峰值,则必须扩展整个架构,随着代码库的增长,添加或改进功能变得更加复杂,这不仅限制了实验,还让实现新创意变得困难,因为许多相互依赖和紧密耦合的进程,扩大了单个进程失败的影响,而且你可以看到不同应用程序之间,在功能上有很多冗余之处。现在来看一下微服务架构中运行的三个相同的应用程序。

   (3)每个应用程序都构建成为一个可作为服务运行的独立组件,并使用轻量级API操作进行通信,每个服务执行一个可支持多个应用程序的功能,因此,可以对服务进行更新、部署和扩展,以便满足对特定应用程序功能的需求,我们还看到,可以从专用服务器迁移到抽象硬件层,在抽象硬件层可以根据性能和弹性等需求智能地放置微服务,所有这些分解带来了更快的迭代、自动化和整体敏捷性,支持快速启动、快速失败和快速恢复。

  (4)可以将微服务视作具有独立输入和输出的独立产品,无需考虑运行时环境的影响,容器会帮助你将所有依赖项和库打包到单个不可变对象中。

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

总结

       通过这次亚马逊云科技云原生课程的学习,我认识到了容器,知道了容器的重要性以及它的作用性多么大,以及了解到了微服务架构和传统架构相比,它的优势在哪,它和容器的关联,以及它们之间的互相配合所发挥出的效果。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到