Docker概念
docker13 年初開源,公司本來叫 dotcloud,后改名叫 docker。被 Mitantis 收購?;趌inux 內(nèi)核的 cgroup,namespace,以及 AUFS 類的 Union FS 等技術(shù),對進(jìn)程進(jìn)行封裝隔離,屬于操作系統(tǒng)層面的虛擬化技術(shù)。由于隔離的進(jìn)程獨(dú)立于宿主和其他的隔離的進(jìn)程,因此也稱其為容器。
docker 就是容器,容器就是 docker,并不是這樣的,容器就是一個技術(shù)類型。而 docker 是當(dāng)下最主流的,容器的一種實(shí)現(xiàn)容器的方案,docker 只是容器其中一種實(shí)現(xiàn)方案,其他方案包括:LXC,Mesos,RKT 等等。
容器和傳統(tǒng)虛擬化最大的一點(diǎn)區(qū)別,就是虛擬化的封裝是系統(tǒng)級的封裝,docker或者其他容器是進(jìn)程級的封裝。和傳統(tǒng)虛擬化最大的一點(diǎn)區(qū)別,就是虛擬化是系統(tǒng)級的封裝,容器是進(jìn)程級封裝。
Docker 底層隔離技術(shù)
Namespaces
作用:訪問隔離Docker 主要就是借助 Linux 內(nèi)核技術(shù) Namespace 來做到隔離的,Linux Namespaces 機(jī)制提供一種資源隔離方案。PID,IPC.NETwork 等系統(tǒng)資源不再是全局性的,而是屬于某個特定的 Namespace。每個 namespace 下的資源對于其他 namespace 下的資源都是不可見的。因此在操作系統(tǒng)層面上看,就會出現(xiàn)多個相同 pid 的進(jìn)程。系統(tǒng)中可以同時存在兩個進(jìn)程號為 0, 1,2 的進(jìn)程,由于屬于不同的 namespace,所以它們之間并不沖突。而在用戶層面上只能看到屬于用戶自己 namespace 下的資源,例如使用 ps 命令只能列出自己 namespace 下的進(jìn)程。這樣每個 namespace 看上去就像一個單獨(dú)的 Linux 系統(tǒng)。IPCNetWorkmountPIDUTSUser
Control groups作用:做資源控制,CPUMEM寬帶等提供的一種可以限制、記錄、隔離進(jìn)程組所使用的物理資源(如 cpu、memory、磁盤 IO 等等)的機(jī)制,被 LXC、docker 等很多項(xiàng)目用于實(shí)現(xiàn)進(jìn)程資源控制。cgroup 將任意進(jìn)程進(jìn)行分組化管理的 Linux 內(nèi)核功能。cgroup 本身是提供將進(jìn)程進(jìn)行分組化管理的功能和接口的基礎(chǔ)結(jié)構(gòu),I/O 或內(nèi)存的分配控制等具體的資源管理功能是通過這個功能來實(shí)現(xiàn)的。
Rootfs作用:文件系統(tǒng)隔離