Docker與K8s關系介紹不會Docker也可以使用K8s
K8s和Docker 的關系
Docker 和 K8s 這兩個經常一起出現,兩者的Logo 看著也有一定聯系一個是背上馱著集裝箱的鯨魚一個是船的舵輪。

不過兩者不能放在一個維度上討論,Docker 是當前流行的 Linux 容器解決方案,利用 Namespaces 、Cgroups 以及聯合文件系統(tǒng)UnionFS 實現了同一主機上容器進程間的相互隔離。

- NameSpaces:隔離進程,讓進程只能訪問到本命名空間里的掛載目錄、PID、NetWork 等資源
- Cgroups: 限制進程能使用的計算機系統(tǒng)各項資源的上限,包括 CPU、內存、磁盤、網絡帶寬等等
- 聯合文件系統(tǒng)UnionFS : 保存一個操作系統(tǒng)的所有文件和目錄,在它基礎之上添加應用運行依賴的文件。創(chuàng)建容器進程的時候給進程指定Mount Namespace 把鏡像文件掛載到容器里,用 chroot 把進程的 Root目錄切換到掛載的目錄里,從而讓容器進程各自擁有獨立的操作系統(tǒng)目錄。
而 K8s 是擁有容器編排能力的集群管理解決方案,可以按照應用的定義調度各個運行著應用組件 Docker 容器,但是 Docker 并不是 K8s 對容器的唯一選擇,K8s 的 容器運行時支持對接多種容器 ,比如CoreOS公司的Rkt容器(之前稱為Rocket,現更名為Rkt),Apache 開源的 Mesos 容器等。只要容器實現了 K8s 容器運行時的接口約定,都能讓 K8s 進行調度。

Docker 公司也推出過自己的容器集群管理方案 Docker Swarm ,跟 K8s 算是競品,但是在生產上幾乎沒人使用。
Docker Swarm 沒有流行起來的深層次的原因就不深究了,從一些IT媒體的報道看,可能的原因是
- 跟 Docker 深度綁定,人天生對集權主義非常反感。
- Docker 公司在大規(guī)模集群管理上的經驗不足,不像谷歌那樣能高屋建瓴地給出好的解決方法。
容器用Docker,需要學到什么程度
看完 K8s 和 Docker 的關系后,我們已經有答案了,想學 K8s 不一定非得會 Docker。但是畢竟 Docker 還是目前最流行的 Linux 容器方案,絕大部分情況下我們還是會選擇使用 Docker,那么我們 Docker 掌握到什么程度更易于我們學習 K8s 呢?
這個主要看我們想學會 K8s 干什么,即使運行在 K8s 之上的容器選擇 Docker,如果我們是搭建一些基建類的軟件,比如 MySQL、Redis之類的,因為這些組織已經提供了軟件容器的鏡像,我的使用體驗是,完全用不到那些 Docker 的各種命令。
比如要在 K8s 集群上運行一個 MySQL 應用,寫好應用的清單文件(就是各種配置和期望的狀態(tài)),然后直接運行
kubectl apply -f mysql.yaml
就好,K8s 的容器運行時會根據清單文件里的鏡像名,幫我們調 Docker 的接口去下載鏡像、運行容器。
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: superpass
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
- name: mysql-config
mountPath: /etc/mysql/conf.d/my.cnf
subPath: my.cnf
上面配置文件,有刪減。完整可運行的案例,請參考:
kubernetes環(huán)境部署單節(jié)點redis數據庫的方法
使用Kubernetes集群環(huán)境部署MySQL數據庫
不過,我們使用 K8s 除了搭建這種基礎軟件外,學 K8s 更多是讓自己開發(fā)的服務能依托 K8s 集群管理、調度的能力變的更具魯棒性、更portable。這個時候 Docker 方面的技能掌握基本的 Dockerfile 編寫、打包上傳鏡像的命令。這部分的幾個簡單的知識,感覺花個兩小時就能掌握,這里推薦一下我以前的文章
學會這幾個簡單的Docker知識就完全夠用,能支撐我們開始 K8s 的學習和練習啦,其他 Docker 相關的知識完全可以在做 K8s 練習時遇到問題、解決問題的過程中再學。
總結
這篇文章把 Docker 和 K8s 的關系給大家做了一個解答,希望還在遲疑自己現有的知識儲備能不能直接學 K8s 的,趕緊行動起來,K8s 是典型的入門有點難,后面越用越香。
更多關于Docker與K8s關系的資料請關注腳本之家其它相關文章!
相關文章
KubeSphere接入外部Elasticsearch實戰(zhàn)示例
這篇文章主要為大家介紹了KubeSphere接入外部Elasticsearch實戰(zhàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
Dashboard管理Kubernetes集群與API訪問配置
這篇文章介紹了Dashboard管理Kubernetes集群與API訪問配置的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-04-04
Kubernetes scheduler啟動監(jiān)控資源變化解析
這篇文章主要為大家介紹了Kubernetes scheduler啟動監(jiān)控資源變化解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
Kubernetes(K8S)容器集群管理環(huán)境完整部署詳細教程-下篇
本系列文章主要介紹了Kubernetes(K8S)容器集群管理環(huán)境完整部署的詳細教程,分為上中下三篇文章,此為中篇,主要講解了K8S部署metrics-server插件,K8S部署集群dashboard插件,K8S部署集群coredns插件,K8S部署kube-state-metrics插件,K8S部署harbor私有倉庫2022-01-01
Kubernetes kubectl中Pod創(chuàng)建流程源碼解析
這篇文章主要為大家介紹了Kubernetes kubectl中Pod創(chuàng)建流程源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
Kubernetes?controller?manager運行機制源碼解析
這篇文章主要為大家介紹了Kubernetes?controller?manager運行機制源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
Kubernetes(K8S)容器集群管理環(huán)境完整部署詳細教程-中篇
本系列文章主要介紹了Kubernetes(K8S)容器集群管理環(huán)境完整部署的詳細教程,分為上中下三篇文章,此為中篇,需要的朋友可以參考下2022-01-01
Kubernetes Informer數據存儲Index與Pod分配流程解析
這篇文章主要為大家介紹了Kubernetes Informer數據存儲Index與Pod分配流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11

