Docker 是 Golang 編寫(xiě)的, 自 2013 年推出以來(lái),受到越來(lái)越多的開(kāi)發(fā)者的關(guān)注。如果你關(guān)注最新的技術(shù)發(fā)展,那么你一定聽(tīng)說(shuō)過(guò) Docker。不管是云服務(wù)還是微服務(wù)(Microservices),越來(lái)越多的廠商都開(kāi)始基于 Docker 作為基礎(chǔ)設(shè)施自動(dòng)化的工具。那么什么是 Docker?Docker與傳統(tǒng)的虛擬機(jī)有什么區(qū)別?為何要采用 Docker?如何使用 Docker?
本文,就針對(duì)上述提到的問(wèn)題,來(lái)簡(jiǎn)單介紹下 Docker。
什么是 Docker
Docker 是開(kāi)源的應(yīng)用容器引擎。
Docker 可以讓你將所有應(yīng)用軟件以及它的以來(lái)打包成軟件開(kāi)發(fā)的標(biāo)準(zhǔn)化單元。
Docker 容器將軟件以及它運(yùn)行安裝所需的一切文件(代碼、運(yùn)行時(shí)、系統(tǒng)工具、系統(tǒng)庫(kù))打包到一起,這就保證了不管是在什么樣的運(yùn)行環(huán)境,總是能以相同的方式運(yùn)行。就好像 Java 虛擬機(jī)一樣,“一次編寫(xiě),到處運(yùn)行(Write once, run anywhere)”,而 Docker 是“一次構(gòu)建,到處運(yùn)行(Build once,run anywhere)”。
Docker 是一種“容器即服務(wù)”(Docker Containers as a Service ,簡(jiǎn)稱 CaaS),使得開(kāi)發(fā)和IT運(yùn)營(yíng)團(tuán)隊(duì)可以對(duì)于應(yīng)用的構(gòu)建、發(fā)布、運(yùn)行更加敏捷和可控。
概括的說(shuō): Docker 是為開(kāi)發(fā)人員和系統(tǒng)管理員用于構(gòu)建、發(fā)布、并運(yùn)行分布式應(yīng)用程序的開(kāi)放式平臺(tái)。該平臺(tái)由 Docker 引擎(一個(gè)便攜、輕巧的運(yùn)行時(shí)和打包工具) 和 Docker Hub (一個(gè)共享應(yīng)用程序和自動(dòng)化工作流的云服務(wù))等組成。Docker 可以使應(yīng)用程序從組件迅速組裝并消除了開(kāi)發(fā)、質(zhì)量保證和生產(chǎn)環(huán)境之間的摩擦問(wèn)題。這樣一來(lái),IT部門(mén)可以更快地發(fā)布,而這些應(yīng)用程序不管是運(yùn)行在筆記本電腦、數(shù)據(jù)中心的虛擬機(jī),還是任何的云,其運(yùn)行過(guò)程和結(jié)果都是一致的。
我們?cè)賮?lái)看下 Docker 的 Logo 。很明顯,這是一只鯨魚(yú),它托著許多集裝箱。我們可以把宿主機(jī)可當(dāng)做這只鯨魚(yú),把相互隔離的容器可看成集裝箱,每個(gè)集裝箱中都包含自己的應(yīng)用程序。這 Logo 簡(jiǎn)直的太形象了!
Docker 的優(yōu)點(diǎn)
輕量級(jí):所有容器在一臺(tái)機(jī)器上共享同一個(gè)操作系統(tǒng)內(nèi)核,這樣他們立即開(kāi)始,并更有效地利用內(nèi)存。Image 是從分層文件系統(tǒng)的構(gòu)建,這樣他們能夠共享公共文件,使得磁盤(pán)使用率和 Image 的下載更加高效。
開(kāi)放:Docker 容器是基于開(kāi)發(fā)的標(biāo)準(zhǔn),允許容器運(yùn)行在主流的 Linux 發(fā)布版和 Microsoft 操作系統(tǒng)作為所有的基礎(chǔ)設(shè)施。
安全:容器使得應(yīng)用程序彼此隔離,而基礎(chǔ)架構(gòu)同時(shí)為應(yīng)用程序提供了額外的保護(hù)層。
Docker 與 虛擬機(jī)的區(qū)別
容器與虛擬機(jī)有著類(lèi)似的資源隔離和分配的優(yōu)點(diǎn),但不同的架構(gòu)方法使容器能夠更加便攜,高效等。
虛擬機(jī)的架構(gòu)
每個(gè)虛擬機(jī)都包括應(yīng)用程序、必要的二進(jìn)制文件和庫(kù)以及一個(gè)完整的客戶操作系統(tǒng)(Guest OS),盡管它們被分離,它們共享并利用主機(jī)的硬件資源,將近需要十幾個(gè) GB 的大小。
容器的架構(gòu)
容器包括應(yīng)用程序及其所有的依賴,但與其他容器共享內(nèi)核。它們以獨(dú)立的用戶空間進(jìn)程形式運(yùn)行在主機(jī)操作系統(tǒng)上。他們也不依賴于任何特定的基礎(chǔ)設(shè)施,Docker 容器可以運(yùn)行在任何計(jì)算機(jī)上,任何基礎(chǔ)設(shè)施和任何云上。
Docker 的容器利用了 LXC,管理利用了 namespaces 來(lái)做權(quán)限的控制和隔離,cgroups 來(lái)進(jìn)行資源的配置,并且還通過(guò) aufs 來(lái)進(jìn)一步提高文件系統(tǒng)的資源利用率,而這些技術(shù)都不是 Docker 獨(dú)創(chuàng)。
LXC
LXC 與虛擬機(jī)的不同之處在于,它是一個(gè)操作系統(tǒng)級(jí)別的虛擬化環(huán)境,而不是硬件虛擬化環(huán)境。他們都做同樣的事情,但 LXC 是操作系統(tǒng)級(jí)別的虛擬化環(huán)境,虛擬環(huán)境有它自己的進(jìn)程和網(wǎng)絡(luò)空間,而不是創(chuàng)建一個(gè)完整成熟的虛擬機(jī)。因此,一個(gè) LXC 虛擬操作系統(tǒng)具有最小的資源需求,并啟動(dòng)只需幾秒鐘。
正如你可以在下圖中看到的,左側(cè)是 LXC 虛擬的 Ubuntu ,默認(rèn)安裝使用 11 MB 大小。
Docker 與 Microservices 的關(guān)系
Microservices(微服務(wù)) 依賴于“基礎(chǔ)設(shè)施自動(dòng)化”,而 Docker 正是“基礎(chǔ)設(shè)施自動(dòng)化”的利器??梢哉f(shuō) Docker 的火爆,一定程度上也帶動(dòng)了微服務(wù)架構(gòu)的興起,而微服務(wù)的廣泛應(yīng)用也促進(jìn)了 Docker 繁榮。可以說(shuō)兩者相輔相成。
有關(guān)微服務(wù)的介紹,可以移步至《簡(jiǎn)述 Microservices(微服務(wù))》。
http://www.importnew.com/24651.html
為什么要用 Docker
開(kāi)發(fā)更加敏捷:Docker 讓開(kāi)發(fā)人員可以自由定義環(huán)境,創(chuàng)建和部署的應(yīng)用程序更快、更容易,IT 運(yùn)維人員快速應(yīng)對(duì)變化也更加靈活性。
更加可控:Docker 使得開(kāi)發(fā)人員保存從基礎(chǔ)設(shè)施到應(yīng)用的代碼,幫助 IT 運(yùn)維人管理?yè)碛袠?biāo)準(zhǔn)的、安全的、可擴(kuò)展的操作環(huán)境。
高可移植性:Docker 允許自由選擇,可以是從筆記本電腦到一個(gè)團(tuán)隊(duì),從私人基礎(chǔ)設(shè)施到公共云提供商。
這樣,你可以專(zhuān)注于開(kāi)發(fā)應(yīng)用,其他的繁瑣事交給 Docker 去做吧。
如何使用 Docker
這可真是一個(gè)大話題,如果完整闡述足夠?qū)懸槐緯?shū)了。好在我們的目的是做入門(mén)普及,因此我們就簡(jiǎn)單講一下 Docker 的安裝、基本使用和常用命令。
Docker安裝
建議在linux環(huán)境下安裝Docker,window環(huán)境搭建比較復(fù)雜且容易出錯(cuò),使用Centos7+yum來(lái)安裝Docker環(huán)境很方便。
Docker 軟件包已經(jīng)包括在默認(rèn)的 CentOS-Extras 軟件源里。因此想要安裝 docker,只需要運(yùn)行下面的 yum 命令:
yum install docker
安裝完成后,使用下面的命令來(lái)啟動(dòng) docker 服務(wù),并將其設(shè)置為開(kāi)機(jī)啟動(dòng):
service docker startchkconfig docker on
LCTT 譯注:此處采用了舊式的 sysv 語(yǔ)法,如采用CentOS 7中支持的新式 systemd 語(yǔ)法,如下:
service docker startchkconfig docker on
測(cè)試
docker version
輸入上述命令,返回docker的版本相關(guān)信息,證明docker安裝成功。
Hello World
下面,我們通過(guò)最簡(jiǎn)單的 image 文件"hello world",感受一下 Docker。
因?yàn)閲?guó)內(nèi)連接 Docker 的官方倉(cāng)庫(kù)很慢,因此我們?cè)谌粘J褂弥袝?huì)使用Docker 中國(guó)加速器。通過(guò) Docker 官方鏡像加速,中國(guó)區(qū)用戶能夠快速訪問(wèn)最流行的 Docker 鏡像。該鏡像托管于中國(guó)大陸,本地用戶現(xiàn)在將會(huì)享受到更快的下載速度和更強(qiáng)的穩(wěn)定性,從而能夠更敏捷地開(kāi)發(fā)和交付 Docker 化應(yīng)用。
Docker 中國(guó)官方鏡像加速可通過(guò)registry.docker-cn.com訪問(wèn)。該鏡像庫(kù)只包含流行的公有鏡像,私有鏡像仍需要從美國(guó)鏡像庫(kù)中拉取。
修改系統(tǒng)中docker對(duì)應(yīng)的配置文件即可,如下:
vi /etc/docker/daemon.json#添加后{ "registry-mirrors": ["https://registry.docker-cn.com"], "live-restore": true}
運(yùn)行下面的命令,將 image 文件從倉(cāng)庫(kù)抓取到本地。
docker pull library/hello-world
上面代碼中,docker image pull是抓取 image 文件的命令。library/hello-world是 image 文件在倉(cāng)庫(kù)里面的位置,其中l(wèi)ibrary是 image 文件所在的組,hello-world是 image 文件的名字。
抓取成功以后,就可以在本機(jī)看到這個(gè) image 文件了。
docker images#顯示結(jié)果REPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/hello-world latest f2a91732366c 3 months ago 1.848 kB
現(xiàn)在,運(yùn)行這個(gè) image 文件。
docker run hello-world#顯示結(jié)果Hello from Docker!This message shows that your installation appears to be working correctly....
輸出這段提示以后,hello world就會(huì)停止運(yùn)行,容器自動(dòng)終止。有些容器不會(huì)自動(dòng)終止,因?yàn)樘峁┑氖欠?wù),比如Mysql鏡像等。
常用命令
除過(guò)以上我們使用的Docker命令外,Docker還有一些其它常用的命令。
拉取docker鏡像
docker pull image_name
查看宿主機(jī)上的鏡像,Docker鏡像保存在/var/lib/docker目錄下:
docker images
刪除鏡像
docker rmi docker.io/tomcat:7.0.77-jre7 或者 docker rmi b39c68b7af30
查看當(dāng)前有哪些容器正在運(yùn)行
docker ps
查看所有容器
docker ps -a
啟動(dòng)、停止、重啟容器命令:
docker start container_name/container_iddocker stop container_name/container_iddocker restart container_name/container_id
后臺(tái)啟動(dòng)一個(gè)容器后,如果想進(jìn)入到這個(gè)容器,可以使用attach命令:
docker attach container_name/container_id
刪除容器的命令
docker rm container_name/container_id
查看當(dāng)前系統(tǒng)Docker信息
docker info
從Docker hub上下載某個(gè)鏡像:
docker pull centos:latestdocker pull centos:latest
執(zhí)行docker pull centos會(huì)將Centos這個(gè)倉(cāng)庫(kù)下面的所有鏡像下載到本地repository。
-
虛擬機(jī)
+關(guān)注
關(guān)注
1文章
931瀏覽量
28407 -
Docker
+關(guān)注
關(guān)注
0文章
492瀏覽量
11949
原文標(biāo)題:高中生也能讀懂的Docker入門(mén)教程
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論