容器技术概述
目录1.什么是容器2.容器的内核技术组成3.虚拟机和容器之间的区别4.容器解决什么问题?5.容器的分类1.什么是容器官方一点讲:容器是一种沙盒技术,主要目的是为了将应用运行在其中,与外界隔离;及方便这个沙盒可以被转移到其它宿主机器。本质上,它是一个特殊的进程。通过名称空间(Namespace)、控制组(Control groups)、切根(chroot)技术把资源、文件、设备、状态和配置划分到一个
目录
1.什么是容器
官方一点讲:
容器是一种沙盒技术,主要目的是为了将应用运行在其中,与外界隔离;及方便这个沙盒可以被转移到其它宿主机器。本质上,它是一个特殊的进程。通过名称空间(Namespace)、控制组(Control groups)、切根(chroot)技术把资源、文件、设备、状态和配置划分到一个独立的空间。
通俗点的理解就是一个装应用软件的箱子,箱子里面有软件运行所需的依赖库和配置。开发人员可以把这个箱子搬到任何机器上,且不影响里面软件的运行。
通俗点讲:
现实中的容器就是用来装东西的
linux中的容器:
-linux中的容器是用来装应用的
-容器就是将软件打包成标准化单元,用于开发,交付和部署,
-容器技术已经成为应用程序封装和交付的核心技术
2.容器的内核技术组成
1)内核技术
-Cgroups(Control Groups)-资源管理
-SELinux 安全
-NameSpace-名称空间
2)Linux的NameSpace
-UTS、NETWORK、MOUNT、USER、PID、IPC
名称 | 作用 |
---|---|
UTS | 隔离主机名 |
NETWORK | 可以设置ip |
MOUNT | 可以支持文件系统 |
USER | 可以支持用户 |
PID | 可以查看不同的进程 |
IPC | 可以在进程中发信号 |
注:六个名称空间同用就非常的接近虚拟机
3.虚拟机和容器之间的区别
虚拟机
通常包括整个操作系统和应用程序。还需要与他们一起运行的虚拟机管理程序来控制虚拟机。
因为它们包括操作系统,因此它们的大小是几千兆字节( 1千兆字节= 1GB)。
虚拟机的缺点:
-是它们需要几分钟的时间才能启动操作系统,和初始化它们托管的应用程序。
容器
容器的优点
1.敏捷环境:容器技术的最大优势是比创建
VM
(虚拟机)实例更快的速度。它们的轻量化在性能和占用空间方面的开销更小。2.提高生产力:容器通过消除跨服务依赖性和冲突来提高开发人员的生产力。每个容器都可以被看作是一个不同的微服务,因此可以独立升级,而不需要考虑它们的同步。
3.版本控制:容器的每个镜像都可以进行版本控制,因此可以跟踪不同版本的容器,注意版本之间的差异等。
4.计算环境可移植性:容器封装了运行应用程序所必需的所有相关细节,如应用程序依赖性和操作系统。这有助于简化容器镜像从一个环境到另一个环境的可移植性。例如,可以使用相同的镜像在Windows / Linux或dev(生产) / test(测试) / stage(阶段)环境中运行。
5.标准化:大多数容器基于开放标准,可以运行在所有主要的
Linux
发行版,微软等。6.安全:容器将一个容器的进程与另一个容器以及底层基础架构隔离开来。因此,一个容器中的任何升级或更改都不会影响另一个容器。
容器的缺点
1.复杂性增加:使用n个容器运行一个应用程序,复杂性因素也随之增加。在生产环境中管理这么多的容器将是一项具有挑战性的任务。像Kubernetes和Mesos这样的工具可以用来管理n个容器。
2.本机Linux支持:大多数容器技术(如Docker)都基于Linux容器(LXC)。因此,与在Linux上原生地运行这些实例相比,在微软环境下运行这些容器就显得有点麻烦了,它们的日常使用会带来复杂的问题。
3.不成熟:容器技术在市场上相对较新,因此上市时间较慢。开发人员可用资源的数量是有限的,如果遇到一些问题,可能需要一些时间才能找出解决方案。
4.容器解决什么问题?
当应用程序计算环境发生变化时,许多问题都会出现。有可能是开发人员将代码从开发环境推送到测试环境,然后再继续。例如:开发人员在Windows中编写应用程序代码,但上层环境(测试,阶段或产品)是基于Linux的。在这种情况下,当操作系统发生变化时,某些功能可能会停止工作。所以,基本上,当配套的软件环境不一样的时候,间歇性故障的几率会更高。
正如Docker的发明者Solomon Hykes所说:“你使用Python 2.7进行测试,然后在生产环境中运行Python 3,可能会发生一些奇怪的事情。或者你会依赖某个版本的一个SSL库,但是装了另外版本的SSL库。你在Debian上进行你的测试,生产环境是在RedHat上,可能发生各种奇怪的事情。
这种变化可能不仅是计算环境,也可能是网络的变化。 Hykes还补充说:“网络拓扑结构可能不同,或者安全策略和存储可能不同,但是软件必须在其上运行。
5.容器的分类
操作系统容器:
根据维基百科,“操作系统级虚拟化是一种计算机虚拟化方法,其中操作系统的内核允许存在多个独立的用户空间实例,而不仅仅是一个,这种实例有时称为容器,虚拟化引擎(VEs)或监狱(jails)(FreeBSD jail或chroot jail),从运行程序的角度来看,它们可能看起来就像真正的计算机。
如上所述,它们共享主机操作系统的内核,但提供用户空间隔离。不同的应用程序可以安装,配置,并可以运行,就像我们在主机操作系统上运行应用程序一样。同样,分配给容器的资源只对该容器可见。任何其他外来操作系统镜像将无法访问另一外来操作系统的资源。
当需要配置一组具有相同配置的操作系统时,它们非常有用。因此,它有助于创建模板,这可以用来创建与另一个操作系统类似的风格。
要创建OS(操作系统)容器,我们可以利用容器技术,如LXC,OpenVZ,Docker,Linux VServer,BSD Jails
和
Solaris zones。
应用程序容器:
根据维基百科,“应用程序虚拟化是一种软件技术,它将计算机程序从其执行的底层操作系统中进行封装。完全虚拟化的应用程序并不是按照传统的意义来安装的,尽管它仍然像以前一样被执行。应用程序在运行时表现得像是直接与原始操作系统及其管理的所有资源进行交互,但可以在不同程度上进行隔离或sandboxed(沙盒)处理。
在这种情况下,术语“虚拟化”是指被封装的工件(应用程序),它与硬件虚拟化中的含义完全不同,它指的是被抽象的物件(物理硬件)。
应用程序容器被设计为将服务作为单个进程打包和运行,而在OS容器中,可以运行多个服务和进程。
像Docker和Rocket这样的容器技术就是应用程序容器的例子。
6. 基本名称空间对比
## 主机名 # 容器 /]# hostname 9de447fdef33 # 真实服务器 ~]# hostname VM-centos ## 进程 # 容器 /]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 07:53 pts/0 00:00:00 /bin/bash root 16 1 0 07:56 pts/0 00:00:00 ps -ef # 真实服务器 ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 Jan06 ? 00:00:12 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0 0 Jan06 ? 00:00:00 [kthreadd] root 4 2 0 Jan06 ? 00:00:00 [kworker/0:0H] root 6 2 0 Jan06 ? 00:00:03 [ksoftirqd/0] root 7 2 0 Jan06 ? 00:00:00 [migration/0] ..... ## 文件系统 # 容器 /]# ls / bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var # 真实服务器 ~]# ls / bin boot data dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var ## 用户 # 容器 /]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin # 真实服务器 ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:997:995::/var/lib/chrony:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin syslog:x:996:994::/home/syslog:/bin/false
更多推荐
所有评论(0)