Docker技術(容器虛擬化技術)
Docker介紹
Docker的主要目標是“Build,Ship and Run Any App,Anywhere”,
也就是通過對應用元件的封裝、分發、部署、執行等生命週期的管理,
使使用者的APP(可以是一個WEB應用或資料庫應用等等)及其執行環境能夠做到“一次封裝,到處執行”。
Linux 容器技術的出現就解決了這樣一個問題,而 Docker 就是在它的基礎上發展過來的。
將應用執行在 Docker 容器上面,而 Docker 容器在任何作業系統上都是一致的,
這就實現了跨平臺、跨伺服器。只需要一次配置好環境,換到別的機子上就可以一鍵部署好, 大大簡化了操作
Docker是解決執行環境和配置問題的軟體容器 , 方便做持續集中並有助於整體釋出的容器虛擬化技術
虛擬化技術與容器虛擬化技術
虛擬化技術
虛擬機器(virtual machine)就是帶環境安裝的一種解決方案。
它可以在一種作業系統裡面執行另一種作業系統,比如在Windows 系統裡面執行Linux 系統。
應用程式對此毫無感知,因為虛擬機器看上去跟真實系統一模一樣
缺點 :1 資源佔用多 2 冗餘步驟多 3 啟動慢
容器虛擬化技術
Linux 容器(Linux Containers,縮寫為 LXC)。
Linux 容器不是模擬一個完整的作業系統,而是對程序進行隔離。
有了容器,就可以將軟體執行所需的所有資源打包到一個隔離的容器中。
容器與虛擬機器不同,不需要捆綁一整套作業系統,只需要軟體工作所需的庫資源和設定。
系統因此而變得高效輕量並保證部署在任何環境中的軟體都能始終如一地執行。
區別與聯絡
- 虛擬機器雖然可以隔離出很多「子電腦」,但佔用空間更大,啟動更慢。虛擬機器軟體可能還要花錢,例如VMWare;
- 容器技術不需要虛擬出整個作業系統,只需要虛擬一個小規模的環境,類似「沙箱」;
- 執行空間,虛擬機器一般要幾 GB 到 幾十 GB 的空間,而容器只需要 MB 級甚至 KB 級;
認識Docker
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。Docker 技術的三大核心概念,分別是:映象 Image、容器 Container、倉庫 Repository。
核心概念
- Docker 本身並不是容器,它是建立容器的工具,是應用容器引擎
- Docker 三大核心概念,分別是:映象 Image,容器 Container、倉庫 Repository;
- Docker 技術使用 Linux 核心和核心功能(例如 Cgroups 和 namespaces)來分隔程序,以便各程序相互獨立執行。
- 由於 Namespace 和 Cgroups 功能僅在 Linux 上可用,因此容器無法在其他作業系統上執行。那麼 Docker 如何在 macOS 或 Windows 上執行?Docker 實際上使用了一個技巧,並在非 Linux 作業系統上安裝 Linux 虛擬機器,然後在虛擬機器內執行容器。
- 映象是一個可執行包,其包含執行應用程式所需的程式碼、執行時的庫、環境變數和配置檔案.容器是映象的執行時例項。
Docker技術的基礎
- namespace
容器隔離的基礎,保證A容器看不到B容器. 6個名空間:User,Mnt,Network,UTS,IPC,Pid.
- cgroups
容器資源統計和隔離。主要用到的cgroups子系統:cpu,blkio,device,freezer,memory
- unionfs
典型:aufs/overlayfs,分層映象實現的基礎
Docker原理
Docker是一個Client-Server結構的系統,Docker守護程序執行在主機上,
然後通過Socket連線從客戶端訪問,守護程序從客戶端接受命令並管理執行在主機上的容器。
Docker安裝
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo epel-modular.repo epel.repo epel-testing.repo epel-playground.repo epel-testing-modular.repo redhat.repo
[root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
## 安裝容器相關工具
[root@localhost yum.repos.d]# yum install -y container*
......
## 安裝docker-ce
[root@localhost yum.repos.d]# yum install -y docker-ce
## 檢視版本
[root@localhost yum.repos.d]# docker -v
Docker version 20.10.1, build 831ebea