容器---介绍

  • 6. changeset 的分层以及复用特点能够带来几点优势

  • 7. 如何构建镜像?

  • 8. 如何运行容器?

  • 二、容器的生命周期

  • 三、容器项目架构

  • 四、容器 对比 VM

一 .什么是容器

===========================================================================

补充

操作系统是如何管理进程 的。首先,当我们登录到操作系统之后,可以通过 ps 等操作看到各式各样的进程,这些进程包括系统自带的服务和用户的应用进程。

1. 进程 都有什么样的特点?


第一,这些进程可以相互看到、相互通信;

第二,它们使用的是同一个文件系统,可以对同一个文件进行读写操 作;

第三,这些进程会使用相同的系统资源。

2.这样的三个特点会带来什么问题呢?


  1. 因为这些进程能够相互看到并且进行通信,高级权限的进程可以攻击 其他进程;
  1. 因为它们使用的是同一个文件系统,因此会带来两个问题:
这些进程可以对于已有的数据进行增删改查,具有高级权限的进程可能会将其 他进程的数据删除掉,破坏掉其他进程的正常运行;  
此外,进程与进程之间的依赖可能会存在冲突,如此一来就会给运维带来很大的压力;
  1. 因为这些进程使用的是同一个宿主机的资源,应用之间可能会存在资 源抢占的问题,当一个应用需要消耗大量 CPU 和内存资源的时候, 就可能会破坏其他应用的运行,导致其他应用无法正常地提供服务。

3. 如何为进程提供一个独立的运行环境呢?


  1. 针 对 不 同 进 程 使 用 同 一 个 文 件 系 统 所 造 成 的 问 题 而 言 , Linux 和 Unix 操作系统可以通过 chroot 系统调用将子目录变成根目 录,达到视图级别的隔离;进程在 chroot 的帮助下可以具有独立的文件系统,对于这样的文件系统进行增删改查不会影响到其他进程;
  1. 因为进程之间相互可见并且可以相互通信,使用 Namespace 技术来实现进程在资源的视图上进行隔离。在 chroot 和 Namespace 的帮助 下,进程就能够运行在一个独立的环境下了;
  1. 但在独立的环境下,进程所使用的还是同一个操作系统的资源,一些 进程可能会侵蚀掉整个系统的资源。为了减少进程彼此之间的影响, 可以通过 Cgroup 来限制其资源使用率,设置其能够使用的 CPU 以 及内存量。

4. 应该如何定义这样的进程集合呢?


容器就是一个视图隔离、资源可限制、独立文件系统的进程集合。 所谓“视图隔离”就是能够看到部分进程以及具有独立的主机名等;

控制资源使用率则是可以对于内存大小以及 CPU 使用个数等进行限制。

容器就 是一个进程集合,它将系统的其他资源隔离开来,具有自己独立的资源视 图。

容器具有一个独立的文件系统,因为使用的是系统的资源,所以在独立的 文件系统内不需要具备内核相关的代码或者工具,我们只需要提供容器所 需的二进制文件、配置文件以及依赖即可。

只要容器运行时所需的文件集 合都能够具备,那么这个容器就能够运行起来

5. 什么是镜像?*


综上所述,我们将这些容器运行时所需要的所有的文件集合称之为容器镜 像。

那么,一般都是通过什么样的方式来构建镜像的呢?通常情况下,我们会 采用 Dockerfile 来构建镜像,这是因为 Dockerfile 提供了非常便利的语法,能够帮助我们很好地描述构建的每个步骤。

当然,每个构建步骤都会对已有的文件系统进行操作,这样就会带来文件系统内容的变化,我们将 这些变化称之为 changeset。当我们把构建步骤所产生的变化依次作用到 一个空文件夹上,就能够得到一个完整的镜像。

6. changeset 的分层以及复用特点能够带来几点优势


第一,能够提高分发效率,简单试想一下,对于大的镜像而言,如果 将其拆分成各个小块就能够提高镜像的分发效率,这是因为镜像拆分 之后就可以并行下载这些数据;

第二,因为这些数据是相互共享的,也就意味着当本地存储上包含了 一些数据的时候,只需要下载本地没有的数据即可,举个简单的例子 就是 golang 镜像是基于 alpine 镜像进行构建的,当本地已经具有 了 alpine 镜 像 之 后 , 在 下 载 golang 镜 像 的 时 候 只 需 要 下 载 本 地 alpine 镜像中没有的部分即可;

第三,因为镜像数据是共享的,因此可以节约大量的磁盘空间,简单 设想一下,当本地存储具有了 alpine 镜像和 golang 镜像,在没有复 用的能力之前,alpine 镜像具有 5M 大小,golang 镜像有 300M 大小, 因 此 就 会 占 用 305M 空 间 ; 而 当 具 有 了 复 用 能 力 之 后 , 只 需 要 300M 空间即可。

7. 如何构建镜像?


如下图所示的 Dockerfile 适用于描述如何构建 golang 应用的

在这里插入图片描述

  1. FROM 行表示以下的构建步骤基于什么镜像进行构建,正如前面所提 到的,镜像是可以复用的;

  2. WORKDIR 行表示会把接下来的构建步骤都在哪一个相应的具体目 录下进行,其起到的作用类似于 Shell 里面的 cd;

  3. COPY 行表示的是可以将宿主机上的文件拷贝到容器镜像内;

  4. RUN 行表示在具体的文件系统内执行相应的动作。当我们运行完毕 之后就可以得到一个应用了;

  5. CMD 行表示使用镜像时的默认程序名字。

那么,这些镜像如何运行在生产环境或者测试环境上呢?

这时候就需要一 个中转站或者中心存储,我们称之为 docker registry,也就是镜像仓库, 其负责存储所有产生的镜像数据。我们只需要通过 docker push 就能够将本地镜像推动到镜像仓库中,这样一来,就能够在生产环境上或者测试环 境上将相应的数据下载下来并运行了。

8. 如何运行容器?


第一步:从镜像仓库中将相应的镜像下载下来;

第二步:当镜像下载完成之后就可以通过 docker images 来查看本地 镜像,这里会给出一个完整的列表,我们可以在列表中选中想要的镜 像

第三步:当选中镜像之后,就可以通过 docker run 来运行这个镜像得 到想要的容器,当然可以通过多次运行得到多个容器。一个镜像就相 当于是一个模板,一个容器就像是一个具体的运行实例,因此镜像就 具有了一次构建、到处运行的特点。

知其然不知其所以然,大厂常问面试技术如何复习?

1、热门面试题及答案大全

面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer

2、多线程、高并发、缓存入门到实战项目pdf书籍

3、文中提到面试题答案整理

4、Java核心知识面试宝典

覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入


、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入**

[外链图片转存中…(img-ylkcMm8X-1718920525433)]

[外链图片转存中…(img-DEGQfLsh-1718920525433)]

[外链图片转存中…(img-0vMqMAoz-1718920525434)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值