記錄初步了解Docker是什么梦皮,它的來(lái)源與應(yīng)用丽已。
歷史問(wèn)題
有句話廓块,相信大部分開(kāi)發(fā)者都說(shuō)過(guò)一句話:“在我這是好的”金闽。但為什么在其他環(huán)境下,就不好了呢~
在軟件開(kāi)發(fā)上剿骨,最大的麻煩之一,就是環(huán)境配置埠褪。用戶計(jì)算機(jī)的環(huán)境不盡相同浓利,比如某些庫(kù)和軟件沒(méi)有或者版本不一致,都會(huì)引起 -It works on my machine-
不畏困難的開(kāi)發(fā)者們就在想钞速,能不能讓軟件自帶環(huán)境再去安裝呢贷掖,這樣就從根本上解決了問(wèn)題。也就是說(shuō)軟件需要什么環(huán)境渴语,安裝包就有什么苹威。這樣,就是 It works on every machine
解決問(wèn)題的方式
虛擬機(jī)
學(xué)過(guò)操作系統(tǒng)的人驾凶,或者自己裝過(guò)系統(tǒng)的人牙甫,可能聽(tīng)說(shuō)或用過(guò)虛擬機(jī)。虛擬機(jī)是在一種操作系統(tǒng)里面運(yùn)行另一種操作系統(tǒng)调违,比如在Mac系統(tǒng)里面運(yùn)行Windows系統(tǒng)窟哺。
那么,我們將應(yīng)用程序技肩,安裝在虛擬機(jī)里面且轨。對(duì)于應(yīng)用程序來(lái)說(shuō),它并不知道實(shí)際上計(jì)算機(jī)是什么操作系統(tǒng)虚婿,不影響它的運(yùn)行旋奢。并且對(duì)于計(jì)算機(jī)而言,虛擬機(jī)就是一個(gè)文件然痊,不需要了至朗,刪掉就可以了,也不會(huì)影響計(jì)算機(jī)的其他應(yīng)用剧浸。
但這個(gè)方式有幾個(gè)缺點(diǎn)爽丹,就很致命筑煮。
->資源占用多。
哪怕應(yīng)用只需要1MB的內(nèi)存粤蝎,虛擬機(jī)依然需要幾百M(fèi)B的內(nèi)存才能運(yùn)行真仲。
->冗余步驟多
? 虛擬機(jī)是完整的操作系統(tǒng),一些系統(tǒng)級(jí)的操作步驟往往無(wú)法跳過(guò)初澎,比如用戶登錄秸应。
->啟動(dòng)慢
? 啟動(dòng)程序,需要先啟動(dòng)虛擬機(jī)碑宴,等幾分鐘再啟動(dòng)程序了软啼。
Linux容器
虛擬機(jī)雖然實(shí)現(xiàn)很簡(jiǎn)單,但上述的缺點(diǎn)延柠,還是很嚴(yán)重祸挪。于是,睿智的開(kāi)發(fā)者們又通過(guò)Linux發(fā)展出了另一種虛擬化技術(shù):Linux容器(Linux Containers LXC)
贞间。
Linux容器不是模擬一個(gè)完整的操作系統(tǒng)贿条,而是對(duì)進(jìn)程進(jìn)行隔離。或者說(shuō)增热,在正常的進(jìn)程外面套了一個(gè)保護(hù)層整以。對(duì)于容器里面的進(jìn)程來(lái)說(shuō),它接觸道德各種資源都是尋你的峻仇,從而實(shí)現(xiàn)與底層系統(tǒng)的隔離公黑。
PS:剛了解的我,也是看的懵懵懂懂摄咆,但看到一個(gè)比喻是這樣:一艘貨輪上裝滿了集裝箱凡蚜,OK,貨輪即計(jì)算機(jī)吭从。集裝箱就是一個(gè)個(gè)容器番刊,里面裝著不同的應(yīng)用程序(貨物)。需要多大的內(nèi)存影锈,就用多大的集裝箱芹务。
那么,容器的有點(diǎn)有:(其實(shí)相對(duì)虛擬機(jī)來(lái)說(shuō)的
->資源占用少
? 容器只占用應(yīng)用程序需要的資源鸭廷。多個(gè)容器還可以共享資源枣抱,虛擬機(jī)是獨(dú)享資源,哪怕用不到那么多辆床。
->體積小
? 容器只要包含用到的組件和庫(kù)即可佳晶,不需要整個(gè)操作系統(tǒng),所以相比虛擬機(jī)讼载,它的體積小很多轿秧,并且沒(méi)有太多冗余步驟中跌。
->啟動(dòng)快
? 容器里面的應(yīng)用,直接就是底層系統(tǒng)的的一個(gè)進(jìn)程菇篡,而不是虛擬機(jī)的整個(gè)系統(tǒng)漩符。所以速度就會(huì)快很多。
看起來(lái)驱还,容器相對(duì)于虛擬機(jī)嗜暴,簡(jiǎn)直是秒殺了。
Docker是什么
Docker屬于Linux容器的一種封裝议蟆,(畢竟Linux容器對(duì)于很多人來(lái)說(shuō)不易用) 提供簡(jiǎn)單易用的容器使用接口闷沥。它是目前最流行的Linux容器解決方案。
Docker將應(yīng)用程序與該程序的依賴咐容,打包在一個(gè)文件(貨物)里面舆逃。運(yùn)行這個(gè)文件,就會(huì)生成一個(gè)虛擬容器(集裝箱)戳粒。程序在這個(gè)虛擬容器里運(yùn)行路狮,就好像在真是的物理機(jī)上運(yùn)行一樣。有了Docker享郊,就不用擔(dān)心環(huán)境問(wèn)題了。
總體來(lái)說(shuō)孝鹊,Docker的接口相當(dāng)簡(jiǎn)單炊琉,用戶可以方便地創(chuàng)建和使用容器,把自己的應(yīng)用放入容器又活。容器還可以進(jìn)行版本管理苔咪、復(fù)制、分享柳骄、修改团赏,就像管理普通代碼一樣。(PS:真的是十分棒的發(fā)明了耐薯。
Docker用在什么地方
->提供一次性的環(huán)境舔清。開(kāi)發(fā)給測(cè)試提供一致的測(cè)試環(huán)境。
->提供彈性的云服務(wù)曲初。因?yàn)镈ocker容器可以隨開(kāi)隨關(guān)体谒,很適合動(dòng)態(tài)的擴(kuò)容和縮容。
->組件微服務(wù)架構(gòu)臼婆。通過(guò)多個(gè)容器抒痒,一臺(tái)容器可以跑多個(gè)服務(wù),因此在一個(gè)機(jī)器上就可以模擬出微服務(wù)架構(gòu)颁褂。
Docker安裝
了解到Docker是一個(gè)開(kāi)源的商業(yè)產(chǎn)品故响,所以有兩個(gè)版本傀广,一個(gè)是社區(qū)版(Community Edition, CE),和企業(yè)版(Enterprise Edition, EE)彩届。社區(qū)版就是眾多優(yōu)秀的開(kāi)發(fā)者維護(hù)并更新的伪冰。
Docker CE 的安裝可以參考官方文檔。
安裝完成后惨缆,運(yùn)行下面命令糜值,查看是否安裝成功
docker version
// 或者
docker info
因?yàn)閐ocker用戶需要sudo權(quán)限,為了避免每次都需要sudo坯墨,可以把用戶加入docker用戶組寂汇。
PS:這里需要重新打開(kāi)終端才生效,終端不行的話就重啟服務(wù)器捣染。
// 添加docker用戶組
sudo groupadd docker
sudo usermod -aG docker $USER
// 將用戶加入docker用戶組骄瓣。其中$USER是當(dāng)前用戶。
Docker是服務(wù)器—客戶端架構(gòu)耍攘。命令行運(yùn)行docker命令的時(shí)候榕栏,需要本機(jī)有Docker服務(wù)。如果這項(xiàng)服務(wù)沒(méi)有啟動(dòng)蕾各,可以用下面的命令啟動(dòng)扒磁。
sudo systemctl start docker
// 或者
sudo service docker start
也可以開(kāi)啟 開(kāi)機(jī)啟動(dòng)
sudo systemctl enable docker
// 關(guān)閉開(kāi)機(jī)啟動(dòng)
sudo systemctl disable docker
最后,測(cè)試一下Docker服務(wù)
sudo docker run hello-world
此命令下載測(cè)試映像并在容器中運(yùn)行它式曲。當(dāng)容器運(yùn)行時(shí)妨托,它會(huì)打印一條信息性消息并退出。
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/