主機虛擬化(vmware,visual box等)
- type-Ⅰ
- type=Ⅱ
主機虛擬化是隔離最徹底的,但是由于多隔了一個虛擬的作業系統,性能會慢一些,
容器虛擬化(docker等)
隔離沒有主機虛擬化強,但是由于沒有多余的虛擬的作業系統,所有的docker都運行在一個內核之上,性能會好,
不管什么樣的虛擬化以下資訊都需要是各自獨立的:
| 縮寫 | 說明 |
|---|---|
| uts | 主機名和域名 |
| mount | 掛載點(檔案系統) |
| IPC | 信號量,訊息佇列和共享記憶體 |
| PID | 行程ID |
| network | 網卡,tcp套接字,網路設備,埠等 |
| user | 用戶和用戶組 |
要想實作以上功能
必須使用linux內核提供namespace功能,通過系統呼叫(clone(),setns()等),
分配資源給容器
-
主機虛擬化:在創建系統的時候,就可以指定使用幾個cpu,多大的記憶體等外設,
-
容器虛擬化:通過linux內核提供的control groups(Cgroups)功能,來控制各個容器,使用多少cpu,記憶體等,
Cgroups可以控制以下設備:
縮寫 說明 blkio 塊設備IO cpu CPU cpuacct CPU資源使用報告 cpuset 多處理器平臺上的CPU集合 devices 設備訪問 freezer 掛起或恢復任務 memory 記憶體用量和報告 perf_event 對cgroup中的任務進行統一性能測驗 net_cls cgroup中的任務創建的資料報文的類別識別符
隔離能力對比
容器級虛擬化肯定比主機級虛擬化的隔離能力低,
理由:容器級虛擬化,是在同一個內核之上的;主機級虛擬化本身就是在不同的內核上,
linux內核都提供了上述的隔離能力所用到的系統呼叫了,那還有docker什么事呢?
那些系統呼叫是需要寫程式的,不是誰都能用的好,所以要有一個便于使用的現成的工具就好了,
這些現成的工具有個名字:LXC(LinuX Container),這些工具包含下面的命令(這些命令需要額外安裝:sudo apt install lava-lxc-mocker,sudo apt install lxc-utils):
- lxc-create:假如在red hat上安裝一個utuntu,lxc-create提供了很多模板,對應不同的linux發行版,然后根據模板去遠程倉庫里找相應的包,下載到本地后,進行安裝,
當用上面的命令創建好生成環境后,如何遷移,壞了如何恢復,如何創建成百上千的生成環境,還是個棘手的問題,
docker就是解決上面問題的,它就是LXC的二次封裝,注意它不是容器技術,容器技術是linux內核的,它只是把容器技術簡化,容易使用而已,
docker把整個環境打包成一個鏡像檔案,以后再使用的時候,直接把鏡像檔案拿過來就可以使用,比如你想使用一個ubuntu環境,那就可以找到一個安裝了ubuntu的docker鏡像檔案,比如你想使用nginx環境,那就可以找到一個安裝了nginx的docker鏡像檔案,
- lxc的主要用途是隔離了一個系統
- docker主要用途是隔離一個用戶行程,比如nginx,
docker特點
-
從運維角度看:假如某個安裝了nginx的docker環境出現問題了,運維人員要去調查,首先運維人員要先進入到這個docker環境,調查也需要工具(比如ps,top等),這些工具如果docker里沒有安裝的話,還需要額外安裝,對運維人員來說很麻煩,如果一個軟體系統由很多docker組成,那么每個docker里都要安裝除錯工具,
-
從開發角度看:任何語言,只要在一個環境上開發,然后打成docker,就可以在任意支持docker的作業系統環境上運行了,這是極大的便利,真正達到了一次開發到處部署,運行,
-
從軟體部署角度看:由于每個docker里基本就一個core行程,要把這些行程編排到一起,也不容易,
-
從系統角度看:假設你的軟體使用的作業系統是ubuntu,web服務器是nginx,快取是redis,那么你就需要一個ubuntu的docker,nginx的docker,redis的docker,想象一下nginx的docker和redis的docker里其實也是有作業系統的,再加上ubuntu作業系統,就有了3個作業系統,產生了浪費,所以docker必須解決這個問題,采用【分層構建,聯合掛載】,
也就是說讓nginx的docker和redis的docker里不包含作業系統,讓nginx的docker和redis的docker使用的作業系統是ubuntu的docker里的ubuntu作業系統,
-
從編排角度看:一個軟體系統里包括很多別的子系統,每個子系統里有若干的行程,每個行程基本都是一個docker,這些子系統有執行的先后順序,和依賴關系,如何組織好這一大堆的docker是個難點,所有就出現了一堆的docker編排工具,最厲害的就是Kubernetes (這個單詞來自于希臘語,含義是舵手或領航員,K8S是它的縮寫,用“8”字替代了“ubernete”這8個字符,),K8S的創造者,是眾人皆知的行業巨頭——Google, K8S并不是一件全新的發明,它的前身,是Google自己搗鼓了十多年的Borg系統, Google為了表明以后自己獨自做大,建立了CNCF組織,ibm,aws等也加入其中,讓K8S健康發展
還有下面的編排工具:
- nmp
- machine+swarm+compose
- mesos+marathon
docker結構圖:
docker是C/S架構的,server端是個守護行程,通過unix socket和client通信,所以server端和client端必須在同一臺物理機器上,client和server通信的應用層協議是https,docker先從registry下載鏡像(imags)檔案,然后加載鏡像檔案到container里,然后client端就可以操作了,

1,docker deamon:server端守護行程,
2,docker clinet:客戶端,
3,docker registries:docker倉庫,目前就是docker hub,國內訪問docker hub很慢,可以使用阿里的加速,但是必須注冊成為阿里的開發者,阿里才會提供加速鏈接,大家要想一個問題,每個鏡像都有版本,比如nginx有很多版本,如何特定到具體版本呢,docker通過,倉庫名:版本號來確定唯一一個鏡像,比如想要nginx1.15的docker鏡像,那么就使用【nginx:1.15】,所以可以看出來,倉庫名就是應用程式的名字,

docker objects
對docker object都可以進行增刪改查操作,通過restful方式
- imags:鏡像檔案,注意:它是只讀的,很重要,比如nginx鏡像,你可以隨意使用它,但是不能改里面的東西,因為有可能是多個別的行程使用它,如果不是只讀的,別其中一個行程修改了內容,那就影響了其他的行程,也就失去了隔離的意義,
- contains:加載鏡像,運行后,產生的行程,
- imags/和contains的關系:images就是一個存放在硬碟上的可執行程式(比如是/bin/ls);contains則是運行/bin/ls的行程,可以運行多次,運行完,行程就結束消失了,但是/bin/ls還是存在,所以它倆的關系就是,程式和行程的關系,
- network:網路
- volumes:contains運行時,使用的存盤介質(卷)
- plugin:插件,
centos7的yum源替換成清華大學的源
1,備份
$ mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2,編輯/etc/yum.repos.d/CentOS-Base.repo
參考清華的內容
3,之后運行yum makecache生成快取
$ sudo yum makecach
在centos7下安裝docker
1,去清華鏡像下載docker-ce.repo檔案,并保存在目錄:/etc/yum.repos.d/下
2,修改docker-ce.repo檔案,把【download.docker.com】替換成【mirrors.tuna.tsinghua.edu.cn/docker-ce】
3,執行yum repolist,如果如下,發現有docker-ce,
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id repo name status
base/7/x86_64 CentOS-7 - Base 10,097
docker-ce-stable/x86_64 Docker CE Stable - x86_64 56
extras/7/x86_64 CentOS-7 - Extras 305
updates/7/x86_64 CentOS-7 - Updates 738
repolist: 11,196
4, 執行docker安裝命令:sudo yum install docker-ce
注意:這里的名字是【docker-ce】,不是【docker】
5,由于默認的docker倉庫在國外,訪問速度慢,所以配置一個國內的docker加速器,
? 創建檔案: /etc/docker/daemon.json
把下面內容加進去,
//docker cn的加速鏡像
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
國內的docker 鏡像:
- docker cn
- 阿里云加速器
- 中國科技大學
6,啟動/重新啟動docker 守護(daemon)行程
# systemctl start docker.service
# systemctl restart docker.service
7,docker 老版本命令不再推薦使用
新版本把命令做了大的分類,如下:
Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
context Manage contexts
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
老版本使用create命令時,用docker create,新版本也可以使用這個命令,新版本把命令都歸類了,所以創建容器的話,用docker container create也是和老版本的docker create的功能是一樣的,推薦還是使用新版本的命令,現在是為了兼容老版本,所以老版本的命令還保留著,
9,檢查docker是否安裝成功:docker version或者docker info
# docker info
結果如下:說明docker安裝成功了!
Client:
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 19.03.2
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-957.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 3.701GiB
Name: localhost.localdomain
ID: D7NH:N5X6:KM6Y:Q6L4:TEUV:BWSG:X3YH:LLMZ:UEC3:T2ID:A6RB:2XSF
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://registry.docker-cn.com/
Live Restore Enabled: false
-
Storage Driver: overlay2
上面說的【采用分層構建,聯合掛載】要能過被使用的話,必須是【overlay2】
-
Registry Mirrors:https://registry.docker-cn.com/
說明上面設定的加速器生效了,
c/c++ 學習互助QQ群:877684253

本人微信:xiaoshitou5854
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/103896.html
標籤:其他
上一篇:ftp中無法復制粘貼,請大神幫忙
