Docker 容器和鏡像其實(shí)很簡(jiǎn)單
很多朋友都在問(wèn),鏡像和容器的區(qū)別是什么? 今天藍(lán)隊(duì)云就來(lái)為大家分享一波我對(duì)Docker的理解。
歷史前沿
Docker誕生于2013年, 由Solomon Hykes和他的團(tuán)隊(duì)在公司DotCloud(后來(lái)改名為Docker Inc.)創(chuàng)建。Docker的出現(xiàn)是為了簡(jiǎn)化應(yīng)用程序的部署和管理,通過(guò)引入輕量級(jí)、隔離的容器技術(shù),解決了傳統(tǒng)軟件開發(fā)和部署中的多個(gè)問(wèn)題。
采用容器化會(huì)帶來(lái)哪些收益
節(jié)省資源
快速啟停
一致性和可移植性
持續(xù)集成與持續(xù)交付
應(yīng)用隔離
底層原理
namespace和cgroup
Docker的底層依賴于Linux的namespace和cgroup,這兩個(gè)機(jī)制共同為容器提供了隔離性和資源限制。但Windows 的 Docker 底層實(shí)現(xiàn)有所不同,不直接使用 Linux 的 namespace 和 cgroup。Windows 版 Docker 實(shí)現(xiàn)容器的方式與 Linux 容器類似,但使用的是 Windows 自己的技術(shù),比如 Windows 容器隔離和 Job Objects,以及一套不同的資源控制機(jī)制
為什么大家偏愛(ài)容器而不是虛擬機(jī)?
因?yàn)?,Docker是更輕量的“操作系統(tǒng)級(jí)的虛擬化”,容器和宿主機(jī)上的進(jìn)程都由宿主機(jī)操作系統(tǒng)統(tǒng)一管理和調(diào)度;而虛擬機(jī)是“硬件級(jí)虛擬化”,宿主機(jī)和虛擬機(jī)共用一個(gè)Hypervisor。簡(jiǎn)言之,容器更輕,虛擬機(jī)更重。
這就是為什么啟動(dòng)虛擬機(jī)的時(shí)候,整個(gè)電腦要卡頓1-3秒,然后逐步恢復(fù)正常。而虛擬機(jī),則基本沒(méi)有這種糟糕的用戶體驗(yàn)。
人類與獵豹賽跑
2014 年的紀(jì)錄片《60 Minutes》(美國(guó) CBS 電視臺(tái))拍攝了一個(gè)片子。大意是:展示尤塞恩·博爾特和獵豹的短跑速度差異,推測(cè)出博爾特在 100 米比賽中的速度與獵豹短距離沖刺的差距。最后結(jié)果顯而易見,獵豹以壓倒性優(yōu)勢(shì)贏得比賽。
通過(guò)故事,我想闡明的觀點(diǎn)是——虛擬機(jī)之于容器技術(shù),就像博爾特之于獵豹(兩條腿的怎么干得過(guò)四條腿的?要想贏得比賽,拼命已經(jīng)不夠用了,必須改變身體構(gòu)造)。因?yàn)榈讓釉淼脑颍琩ocker天然就比虛擬機(jī)快一拍。
學(xué)習(xí)三板斧
# 國(guó)外安裝
# curl -fsSL http://www.tjdsmy.cn | sudo sh
裝好的docker不能直接用,要稍微改一下配置。下面配置的大意是,限制日志文件大小和數(shù)量,設(shè)置鏡像加速器。
cat <<EOF > /etc/docker/daemon.json
{
"log-driver":"json-file",
"log-opts": {"max-size":"128m", "max-file":"3"},
"registry-mirrors": ["http://www.tjdsmy.cn"]
} # 啟動(dòng)守護(hù)進(jìn)程
systemctl start docker
# 設(shè)置開機(jī)自啟
systemctl enable docker
# 查看狀態(tài)
systemctl status docker
會(huì)員登錄
賬號(hào)登錄 還沒(méi)有賬號(hào)?立即注冊(cè)