本篇是参加云原生主题学习月活动,学习了相关课程之后的学习笔记总结。让我们一起来看看容器怎么一步步发展过来的,以及容器的应用。
现实中(运输物品)
使用容器运输
-
使用容器之前
一开始运输物品,由于物品形状大小不一,不像拼图一样,摆放起来物品与物品之间会有很大的空隙,既不能高效的利用空间,也不利于物品的运输。效率低、成本高昂。 -
使用容器之后
后来就出现了集装箱,就是一个标准化的货物单元,有了集装箱这个容器之后,提高了生产力,降低了成本。
软件世界
容器是标准化软件单元。
接着,让我们看一下软件世界里的容器化演变历程。
裸机服务器
上图的架构中,最严重的问题就是效率极低,不管你是0%的利用率还是100%的利用率运行,使用的硬件资源是相同的。所有应用程序需要的库版本要一致,否则会出问题。后来就出现了虚拟机技术。
虚拟机技术
在操作系统上放置虚拟化平台,利用虚拟机自带的操作系统隔离应用程序及其依赖库,从而解决版本更新和版本不一致问题。使用现有的硬件运行更多的虚拟机,提高利用率。
缺点:‘
- 众多相同重复的虚拟化层,资源占用多,启动慢
- 相同的库在虚拟机里重复安装,不能有效利用
容器技术
容器运行时共享操作系统内核,使用文件系统层创建镜像。各软件的代码相互隔离,一次编译到处运行。
优点:
- 可移植
- 轻量级、高效
- 敏捷性
- 启动快
虚拟机和容器的不同点
- 传统虚拟机,虚拟出一个硬件,运行一个完成的操作系统,然后在系统上安装和运行软件
- 容器内的应用直接运行在宿主机的内核,容器没有自己的内核,也没有虚拟硬件,十分轻便
- 每个容器间是互相隔离的,每个容器内都有属于自己的文件系统,互不干扰。可移植性高。
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☭
微信公众号:【看见另一种可能】
热爱前端开发,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。
希望能和大家一起努力营造一个良好的学习氛围,为了个人和家庭、为了我国的互联网物联网技术、数字化转型、数字经济发展做一点点贡献。数风流人物还看中国、看今朝、看你我。