容器技术概述
目錄
1.什么是容器
2.容器的內核技術組成
3.虛擬機和容器之間的區別
4.容器解決什么問題?
5.容器的分類
6.?基本名稱空間對比
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總結
- 上一篇: ansible高级用法(压测脚本)
- 下一篇: Podman的概述与运用