容器入门学习笔记

本篇是参加云原生主题学习月活动,学习了相关课程之后的学习笔记总结。让我们一起来看看容器怎么一步步发展过来的,以及容器的应用。

现实中(运输物品)

使用容器运输

  • 使用容器之前
    一开始运输物品,由于物品形状大小不一,不像拼图一样,摆放起来物品与物品之间会有很大的空隙,既不能高效的利用空间,也不利于物品的运输。效率低、成本高昂。

  • 使用容器之后
    后来就出现了集装箱,就是一个标准化的货物单元,有了集装箱这个容器之后,提高了生产力,降低了成本。
    在这里插入图片描述

软件世界

容器是标准化软件单元。
在这里插入图片描述
接着,让我们看一下软件世界里的容器化演变历程。

裸机服务器

在这里插入图片描述

上图的架构中,最严重的问题就是效率极低,不管你是0%的利用率还是100%的利用率运行,使用的硬件资源是相同的。所有应用程序需要的库版本要一致,否则会出问题。后来就出现了虚拟机技术。

虚拟机技术

在操作系统上放置虚拟化平台,利用虚拟机自带的操作系统隔离应用程序及其依赖库,从而解决版本更新和版本不一致问题。使用现有的硬件运行更多的虚拟机,提高利用率。

缺点:

  1. 众多相同重复的虚拟化层,资源占用多,启动慢
  2. 相同的库在虚拟机里重复安装,不能有效利用
    在这里插入图片描述

容器技术

在这里插入图片描述

容器运行时共享操作系统内核,使用文件系统层创建镜像。各软件的代码相互隔离,一次编译到处运行。

优点:

  1. 可移植
  2. 轻量级、高效
  3. 敏捷性
  4. 启动快

虚拟机和容器的不同点

  1. 传统虚拟机,虚拟出一个硬件,运行一个完成的操作系统,然后在系统上安装和运行软件
  2. 容器内的应用直接运行在宿主机的内核,容器没有自己的内核,也没有虚拟硬件,十分轻便
  3. 每个容器间是互相隔离的,每个容器内都有属于自己的文件系统,互不干扰。可移植性高。

Docker

Docker是一个开源的应用容器引擎,是一个轻量级容器技术。Docker支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像,不用担心软件运行环境的问题,可移植性高。运行中的这个镜像称为容器,容器启动是非常快速的。

优势:

  • 可移植的运行时应用程序环境
  • 可将应用程序和依赖项打包进单一的不可变构件中
  • 能够同时运行具有不同依赖项的不同应用程序版本
  • 更快的开发和部署周期
  • 提高资源利用率和效率

Docker工作流程图:
在这里插入图片描述

镜像

镜像就是一个轻量的、独立的软件包。用来打包运行环境和基于运行环境开发的软件。它包含软件运行所需的所有内容(包括代码、运行时、库、环境变量、配置文件),把这些东西打包成docker镜像,就可以运行起来。
镜像也可以看作容器的模板(也就是基础镜像),实际开发中,可以在基础镜像上进行分层写入,创建属于自己的镜像。
在这里插入图片描述

dockerfile

Dockerfile就是用来构建镜像的构建文件,就是命令脚本,通过这个脚本,可以生成一个镜像。
每个命令就是镜像的一层(对应分层下载)。

指令基础知识

  • 每个关键字都是大写
  • 从上到下顺序执行
  • # 表示注释
  • 每一个指令都会创建提交一个新的镜像层
FROM              # 基础镜像
MAINTAINER        # 作者信息(name<mail>)
RUN               # 运行命令(想让它干啥)
CMD               # 指定容器启动时要执行的命令(可以被追加的命令替代)
LABEL             # 指定生成镜像的元数据标签
EXPOSE            # 镜像内服务监听的端口
ENV               # 指定环境变量
ADD               # COPY文件,自动解压
COPY              # 复制文件
ENTRYPOINT        # 指定容器启动时要执行的命令(不能被追加的命令替换执行)
VOLUME            # 创建数据卷挂载点
USER              # 指定运行容器时的用户名或UID
WORKDIR           # 配置工作目录(进入容器时所在的目录)
ARG               # 指定镜像内使用的参数(版本号信息等)
ONBUILD           # 当多创建的镜像作为其他镜像的基础镜像时,所执行的创建操作指令
STOPSIGNAL        # 容器退出的信号值
HEALTHCHECK       # 健康检查
SHELL             # 配置shell类型

镜像和容器

在这里插入图片描述

传统架构和微服务架构

传统架构

传统架构也就是常说的单体式开发,既所有的功能打包在一个 WAR 包里。

优点

  • 开发简单,集中式管理
  • 基本不会重复开发
  • 功能都在本地,没有分布式的管理和调用消耗

缺点

  • 效率低:开发都在同一个项目改代码,相互等待,冲突不断
  • 维护难:代码功功能耦合在一起,新人不知道何从下手
  • 不灵活:构建时间长,任何小修改都要重构整个项目,耗时
  • 稳定性差:一个微小的问题,都可能导致整个应用挂掉
  • 扩展性不够:无法满足高并发下的业务需求
    在这里插入图片描述

微服务架构

在这里插入图片描述
微服务的特性:

  • 采用分散式的革新设计
  • 智能终端节点、哑管道
  • 采用独立产品形式,而不是项目形式
  • 面向故障的设计
  • 可弃性
  • 兼顾开发与生产

最后

关于容器,想要了解关于docker相关的,可以查看我的专栏文章,戳这里,或者加入我的docker社区


我是 甜点cc

微信公众号:【看见另一种可能】

热爱前端开发,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。

希望能和大家一起努力营造一个良好的学习氛围,为了个人和家庭、为了我国的互联网物联网技术、数字化转型、数字经济发展做一点点贡献。数风流人物还看中国、看今朝、看你我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甜点cc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值