乱读天书, 不求甚解
周祎骏的个人云笔记
Toggle navigation
乱读天书, 不求甚解
主页
Linux:系统配置
Linux:用户管理
Linux:优化排错
Linux:进程调度
Linux:文件系统
Linux:网络
Linux:系统服务
Linux:安全
Linux:内核
容器:Docker
容器:containerd
容器编排:Kubernetes
IAC:Terraform
大数据:Hadoop
大数据:Zookeeper
大数据:Hbase
消息队列:rsyslog
消息队列:kafka
数据库:MySQL
数据库:MongoDB
搜索引擎:Elasticsearch
时序数据库:OpenTSDB
网站服务:Nginx
编程:Bash
编程:Perl
编程:Python
编程:C
编程:JAVA
编程:Rust
版本控制:gitlab
知识管理:docusaurus
常用小工具
关于我
标签
Docker 0.0 概念介绍
2023-04-08 06:16:17
308
0
0
admin
> Docker 是一种容器技术,容器技术不一定是Docker。 # 容器VS虚拟机 ## 容器技术比虚拟机更轻量。 > 虚拟机技术实现多个系统共享一份硬件。如果你希望在一个硬件上通过虚拟机跑应用,同时要求这些应用互相不受影响的话,那么你还不得不在这个硬件上跑三个系统。 容器技术是多个应用共享一个系统,同时保证多个应用互相不可见。 **一些对比:** | 特性 |容器|虚拟机| |--------|----|------| |启动速度|秒级|分钟级| |镜像大小|xx MB|xx GB| | 性能 |接近于物理机直接跑这些应用|有虚拟机系统的额外损耗| ## 容器的隔离没有虚拟机那么彻底(虚拟机完全隔离,容器安全隔离)。 > 容器既然是多个应用共享一个系统,那么这多个应用肯定是必须能在同一个版本的内核上跑起来。同时在一些其它的限制,知道他们共享一个内核就可以理解这些限制。 虚拟机完全隔离,一台宿主机上你可以跑不同系统的虚拟机。 *** # Docker 容器让多个实例共享一个系统,同时又相互安全隔离。 除了系统以外,运行进程所需要的所有依赖关系都打包在了Docker实例之中,相当易于部署。 ## Docker主要技术 ### Namespace隔离: > 不同容器的进程跑在不同的命名空间中,相互不可见。 这样就算一个容器被黑客入侵了,它也看不到别的服务。 >> UTS隔离: 不同进程可以拥有不同的hostname IPC隔离: 进程间通信隔离,指一些基于IPC协议的通信方式,与PID隔离一起用做到了进程间相互不可见 PID隔离: 进程号命名隔离,与IPC隔离一起用做到了进程间相互不可见 Mount隔离: 隔离挂载表 Network隔离: 网络隔离 User隔离: 将本地的虚拟用户映射为主机的实际用户 ### Cgroups限制: > 限制了进程组对系统资源的占用。 这样就算一个容器内存泄露了,也不会拖累其它的服务。 ### Union文件系统: > 类似gitlab存储数据的方式,文件系统只保存增量变化。这样又轻量又保存了文件系统的所有的变化。 ## 名词解释 **镜像:** 就像虚拟机镜像。 **容器实例:** 就是在跑的容器。在容器实例退出时该容器的文件系统就被丢失。所以如果你希望记录容器实例的变化有以下两种方法: 1. 挂载数据卷 2. 在你想要保存的时候将当前容器commit成新的镜像 **链接:** 同一物理机的容器都在同一网段中,随机IP,可以互相通信。链接就是创建一个容器时引用另一个容器,那么在这个创建的容器中可以用预先设定的别名来访问另一个容器。这个链接相当于一个/etc/hosts的作用。 **数据卷:** 类似于虚拟机的挂载目录,将宿主机的文件系统或者其它容器挂载到本容器的某个目录下,可以用于数据共享或者数据持久化 **胖容器/瘦容器:** 非官方叫法。官方极力推荐一个容器只跑一个进程,同时容器尽量做的小,裁剪掉所有不需要的。但事实上并不是所有人都这么使用Docker。大家一般把单进程容器叫瘦容器,多进程容器叫做胖容器。 > 很多人把容器当虚拟机玩,容器里面甚至还开启sshd服务,这让另一些人很不爽。 个人认为没有绝对的对错,看使用起来是否方便而已。 在把传统业务迁移至容器的时候,如果完全按照官方的方式玩容器免不了做出很多的改变。 人力成本也很贵。
上一篇:
C 2.16 Linux函数库mman.h
下一篇:
Docker 1.0 简单使用
文档导航