一種虛擬化的方案
操作系統(tǒng)虛擬化
依賴于linux內(nèi)核特性:Namespace和Cgroup
linux容器技術(shù) VS 虛擬機
虛擬機需要完整的操作系統(tǒng)。需要模擬硬件行為,對內(nèi)存和cpu損耗相當(dāng)大 同樣配置的服務(wù)器,容器能提供更多服務(wù)能力,服務(wù)更多用戶。磁盤占用空間更少,啟動更快。容器不容易安裝和管理,而docker可以改善這些,使容器安裝簡單,管理方便。
將應(yīng)用程序自動部署到容器
使用GO語言編寫的開源引擎
提供簡單輕量的建模方式:快,資源利用率高
職責(zé)的邏輯分離
快速高效的開發(fā)生命周期:在容器中開發(fā),以容器形式交付,縮短產(chǎn)品上線周期
鼓勵使用面向服務(wù)的架構(gòu):單個容器只運行一個應(yīng)用或者進程,一系列內(nèi)部互聯(lián)的容器,使擴展、調(diào)試程序變得簡單。分布式應(yīng)用程序模型:高內(nèi)聚,低耦合,單一任務(wù),在運行過程中容易定位問題
使用docker容器開發(fā)、測試、部署服務(wù)
創(chuàng)建隔離的運行環(huán)境
搭建測試環(huán)境
構(gòu)建Paas設(shè)施
提供SaaS應(yīng)用程序
高性能,超大規(guī)模的宿主機部署
C/S架構(gòu)
本地/遠程
容器的基石,是一個層疊的只讀文件系統(tǒng)
Bootfs:引導(dǎo)文件系統(tǒng),容器啟動后,它會移動到內(nèi)存中,引導(dǎo)文件系統(tǒng)會被卸載
Rootls:比如ubuntu,centos,一種或者多種操作系統(tǒng),只讀,聯(lián)合加載方式,基礎(chǔ)鏡像
Add emac:聯(lián)合加載方式,在基礎(chǔ)鏡像上一次加載多個文件系統(tǒng),對外只能看到一個麻醉中的文件系統(tǒng)會包含低層所有文件和目錄,它下面的鏡像為副鏡像,以此類推到最底部,最底部是基礎(chǔ)鏡像
通過鏡像啟動
啟動和執(zhí)行階段
寫時復(fù)制
在鏡像的最頂層加載一個可寫層,初始可寫層是空的,當(dāng)文件系統(tǒng)發(fā)生變化的時候,這些變化都會應(yīng)用到這可寫層上,比如:如果修改配置文件,會先從只讀層復(fù)制到可寫層,該文件的只讀版本依然存在,但是被可寫層的文件副本隱藏。
公有倉庫
私有倉庫
封裝:代碼隔離
操作系統(tǒng):提供系統(tǒng)資源的隔離:進程,文件系統(tǒng),網(wǎng)絡(luò)等等,為了實現(xiàn)輕量級虛擬化服務(wù),也就是我們說的容器
五中命名空間
PID :進程隔離
NET:管理網(wǎng)絡(luò)接口
IPC:管理跨進程通信訪問
MNT:管理掛載點
UTS:隔離內(nèi)核和版本標識
cgroups是Linux內(nèi)核提供的一種機制,這種機制可以根據(jù)特定的行為,把一系列系統(tǒng)任務(wù)及其子任務(wù)整合(或分隔)到按資源劃分等級的不同組內(nèi),從而為系統(tǒng)資源管理提供一個統(tǒng)一的框架。通俗的來說,cgroups可以限制、記錄、隔離進程組所使用的物理資源(包括:CPU、memory、IO等),為容器實現(xiàn)虛擬化提供了基本保證,是構(gòu)建Docker等一系列虛擬化管理工具的基石。
cgroups的作用
資源限制(Resource Limitation):cgroups可以對進程組使用的資源總額進行限制。如設(shè)定應(yīng)用運行時使用內(nèi)存的上限,一旦超過這個配額就發(fā)出OOM
優(yōu)先級分配(Prioritization):通過分配的CPU時間片數(shù)量及硬盤IO帶寬大小,實際上就相當(dāng)于控制了進程運行的優(yōu)先級。
資源計量:cgroups可以統(tǒng)計系統(tǒng)的資源使用量,如CPU使用時長、內(nèi)存用量等等,這個功能非常適用于計費
資源控制:cgroups可以對進程組執(zhí)行掛起、恢復(fù)等操作。
文件系統(tǒng)隔離:每個容器都有自己的root文件系統(tǒng)
進程隔離:每個容器都運行在自己的進程環(huán)境中
網(wǎng)絡(luò)隔離:容器間的虛擬網(wǎng)絡(luò)接口和IP地址都是分開的
資源隔離和分組:使用Cgroup將CPU和內(nèi)存之類的資源獨立分配給每個Docker容器
環(huán)境說明:本地安裝VMware centos7
docker安裝參考: https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce
安裝命令如下:
#yum update
#yum install -y yum-utils device-mapper-persistent-data lvm2
#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#yum-config-manager --enable docker-ce-edge
#yum install docker-ce
#yum list docker-ce --showduplicates | sort -r
#yum install docker-ce-18.04.0.ce
#systemctl start docker
查看docker的日志
#journalctl -u docker.service
關(guān)閉防火墻和網(wǎng)絡(luò)服務(wù)
#systemctl stop firewalld.service #systemctl disable firewalld.service #systemctl stop NetworkManger
docker run:創(chuàng)建一個新的容器并運行一個命令
#docker run –help
參數(shù)說明:
-a stdin : 指定標準輸入輸出內(nèi)容類型,可選STDIN, STDOUT or STDERR
-d:后臺運行容器,并返回容器ID
-i:以交互模式運行容器,通常與-t同時使用
-t:為容器重新分配一個偽輸入終端,通常與-i同時使用
--name=”容器名稱”:為容器指定一個名稱
--dns 8.8.8.8:指定容器使用的DNS服務(wù)器,默認和宿主機一致
--dns-search 域名 :指定容器DNS搜索域名,默認和宿主機一致
-h “mars”:指定容器的hostname
-e username=”ritchie”:設(shè)置環(huán)境變量
--env-file=[]:從指定文件讀入環(huán)境變量
-m:設(shè)置容器使用內(nèi)存最大值
啟動一個或者多個已經(jīng)被停止的容器。停止一個運行中的容器。重啟容器。
#docker start [OPTIONS] CONTAINER [CONTAINER…]
殺掉一個運行中的容器
#docker kill [OPTIONS] CONTAINER [CONTAINER…]
docker rm :刪除一個或多少容器
docker rm [OPTIONS] CONTAINER [CONTAINER...] OPTIONS說明:
-f :通過SIGKILL信號強制刪除一個運行中的容器
-l :移除容器間的網(wǎng)絡(luò)連接,而非容器本身
-v :-v 刪除與容器關(guān)聯(lián)的卷
創(chuàng)建一個新的容器但是不啟動它,用法同docker run
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
用于容器與主機之間的數(shù)據(jù)拷貝。
Usage: docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
Options:
-a, --archive Archive mode (copy all uid/gid information)
-L, --follow-link 保持源目標中的鏈接
docker images :列出本地鏡像。
docker rmi :刪除本地一個或多少鏡像。
docker tag :標記本地鏡像,將其歸入某一倉庫。
docker build :使用Dockerfile創(chuàng)建鏡像。
docker save :將指定鏡像保存成 tar 歸檔文件。
docker import :從歸檔文件中創(chuàng)建鏡像。
docker info : 顯示 Docker 系統(tǒng)信息,包括鏡像和容器數(shù)。
docker version :顯示 Docker 版本信息。
動態(tài)增加副本 #docker service scale erp_callcenter_callcentererp_v1=2