docker是什麼:Docker 是完整的一套容器管理系統,所以想要搞懂 Docker 的概念,我們必須先從容器開始說起。
什麼是容器?
- [x] 容器是用來裝東西的,Linux 裡面的容器是用來裝應用的;
- [x] 容器就是將軟體打包成標準化單元,以用於開發、交付和部署;
- [x] 容器技術已經成為應用程式封裝和交付的核心技術;
容器原理:容器技術的核心,由以下幾個核心技術組成:
- [x] Cgroups (Control Groups) — 資源管理
- [x] SELinux — 安全 (是針對於檔案系統,檔案的管理措施)
- [x] NameSpace — 名稱空間
名稱空間:
#是指可以對系統資源空間進行分割隔離的技術,例如:建立一個虛擬機器器,在虛擬機器器裡的所有操作,都不會對真實機造成影響。
#名稱空間分為六大類,可以從各個方面來對系統資源空間進行隔離;
Linux 的 NameSpace
- [x] UTS、NETWORK、MOUNT、USER、PID、IPC
UTS:
#主機名名稱空間,作用:分割主機名,即在容器內修改主機名,不會對宿主機的系統造成影響,實現主機名的隔離;
沒有隔離前,修改主機名為zhangsan,重新開啟一個終端,主機名也被修改為zhangsan
[root@localhost ~]# hostname zhangsan #臨時設定主機名
[root@localhost ~]# bash #立刻生效
[root@zhangsan ~]#
使用unshare命令模擬主機名的名稱空間,修改主機名為namespace,重新開啟一個終端,主機名沒有發生變化,還是zhangsan
[root@zhangsan ~]# unshare -u /bin/bash
[root@zhangsan ~]# hostname namespace #臨時設定主機名
[root@zhangsan ~]# bash #立刻生效
[root@namespace ~]#
NETWORK:網路名稱空間,作用:分割網路,即容器內的網路設定和宿主機相互之間不受干擾的;
例如:
#在真實機器上的網路卡名為eth0,IP地址為192.168.1.10/24;
#而在容器內的網路卡名可以為ens33,ip地址為10.10.10.10/24;
MOUNT:
#掛載名稱空間,作用:隔離檔案系統,在容器內掛載的光碟或nfs共用目錄,宿主機是無法看到裡面的內容的;
例如:
#在linux系統上,建立一個虛擬機器器,在真機的/var/lib/ftp中掛載了一個光碟檔案,但是在虛擬機器器的/var/lib/ftp中是沒有光碟內容的,這就是MOUNT隔離;
USER:
#使用者名稱空間,作用:隔離使用者,即容器內建立的使用者不能用於登入宿主機,真機機裡建立的使用者也不能作用於容器;
PID:
#程序名稱空間,作用:為了防止容器和宿主機中的程序衝突;
例如:
#在真實機中,有一個服務: nfs,PID為2250;
#在容器內,也有一個服務: chrony,PID為2250;
#真實機中使用者,殺死(kill) PID號為2250的程序時,並不會對容器內的程序2250產生影響;
#而容器內的使用者,殺死(kill) PID號為2250的程序時,也並不會對真實機內的程序2250產生影響;
IPC:
#訊號向量名稱空間,作用:通常和PID一起使用;
#使用者殺死一個程序時,實際上是向程序傳送一個訊號(IPC),程序接收到這個訊號後會執行對應的操作;
docker 的優缺點
優點
- [x] 相比於傳統的虛擬化技術,容器更加簡潔高效
- [x] 傳統虛擬機器器需要給每個 VM 安裝作業系統
- [x] 容器使用的共用公共庫和程式
缺點
- [x] 容器的隔離性沒有虛擬機器器強
- [x] 共用Linux核心,安全性有先天缺陷
docker 與傳統虛擬化的對比
虛擬化:
#例如:虛擬機器器的使用,每一個虛擬機器器都要安裝獨立的作業系統;
容器:
#不需要安裝獨立的作業系統,只有一個Docker程序,和宿主機共用作業系統;
#容器沒有作業系統,啟動容器就跟開啟一個程序一樣,簡單高效;
容器的高效性:
#啟動虛擬機器器中的應用程式,需要先啟動虛擬機器器的作業系統,然後再啟動應用程式;
#啟動容器內的應用程式,直接啟動應用程式即可;
解除安裝防火牆和selinux(以kube-node1為例,kube-node2類似操作)
[root@localhost ~]# yum -y remove firewalld-*
[root@localhost ~]# vim /etc/selinux/config
SELINUX=disabled
設定IP地址和主機名(以kube-node1為例,kube-node2類似操作)
[root@localhost ~]# echo kube-node1 > /etc/hostname
使用nmcli命令設定IP地址,閘道器,dns(以kube-node1為例,kube-node2類似操作)
[root@kube-node1 ~]# nmcli connection modify ens33 ipv4.method manual ipv4.addresses 192.168.11.148/24 ipv4.gateway 192.168.11.254 ipv4.dns 114.114.114.114 connection.autoconnect yes
[root@kube-node1 ~]# nmcli connection up eth0
[root@kube-node1 ~]# reboot
-------------------------------------------
個性簽名:今天做了別人不想做的事,明天你就做得到別人做不到的事,嘗試你都不敢,你拿什麼贏!
如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個「推薦」哦,博主在此感謝!