Docker(一):Docker入門教程

如今Docker的使用已經(jīng)非常普遍花枫,特別在一線互聯(lián)網(wǎng)公司黍瞧。使用Docker技術(shù)可以幫助企業(yè)快速水平擴(kuò)展服務(wù),從而到達(dá)彈性部署業(yè)務(wù)的能力椎例。在云服務(wù)概念興起之后挨决,Docker的使用場景和范圍進(jìn)一步發(fā)展,如今在微服務(wù)架構(gòu)越來越流行的情況下订歪,微服務(wù)+Docker的完美組合脖祈,更加方便微服務(wù)架構(gòu)運(yùn)維部署落地。

本文詳細(xì)解釋介紹Docker入門相關(guān)內(nèi)容刷晋,后期重點(diǎn)關(guān)注Docker在微服務(wù)體系中的使用盖高。在了解Docker之前我們先考慮幾個問題:1慎陵、Docker是什么?2喻奥、為什么要使用Docker席纽,它有什么優(yōu)勢?帶著這些問題我們來看看下面的內(nèi)容撞蚕。

什么是Docker?

Docker 是世界領(lǐng)先的軟件容器平臺润梯。開發(fā)人員利用 Docker 可以消除協(xié)作編碼時“在我的機(jī)器上可正常工作”的問題。運(yùn)維人員利用 Docker 可以在隔離容器中并行運(yùn)行和管理應(yīng)用甥厦,獲得更好的計(jì)算密度仆救。企業(yè)利用 Docker 可以構(gòu)建敏捷的軟件交付管道,以更快的速度矫渔、更高的安全性和可靠的信譽(yù)為 Linux 和 Windows Server 應(yīng)用發(fā)布新功能彤蔽。

Docker 屬于 Linux 容器的一種封裝,提供簡單易用的容器使用接口庙洼。它是目前最流行的 Linux 容器解決方案顿痪。Docker 將應(yīng)用程序與該程序的依賴,打包在一個文件里面油够。運(yùn)行這個文件蚁袭,就會生成一個虛擬容器。程序在這個虛擬容器里運(yùn)行石咬,就好像在真實(shí)的物理機(jī)上運(yùn)行一樣揩悄。有了 Docker,就不用擔(dān)心環(huán)境問題鬼悠。

總體來說删性,Docker 的接口相當(dāng)簡單,用戶可以方便地創(chuàng)建和使用容器焕窝,把自己的應(yīng)用放入容器蹬挺。容器還可以進(jìn)行版本管理、復(fù)制它掂、分享巴帮、修改,就像管理普通的代碼一樣虐秋。

Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國期間發(fā)起的一個公司內(nèi)部項(xiàng)目榕茧,它是基于 dotCloud 公司多年云服務(wù)技術(shù)的一次革新,并于 2013 年 3 月以 Apache 2.0 授權(quán)協(xié)議開源客给,主要項(xiàng)目代碼在 GitHub 上進(jìn)行維護(hù)用押。Docker 項(xiàng)目后來還加入了 Linux 基金會,并成立推動 開放容器聯(lián)盟(OCI)起愈。

Docker 自開源后受到廣泛的關(guān)注和討論只恨,至今其 GitHub 項(xiàng)目已經(jīng)超過 4 萬 6 千個星標(biāo)和一萬多個 fork。甚至由于 Docker 項(xiàng)目的火爆抬虽,在 2013 年底官觅,dotCloud 公司決定改名為 Docker。Docker 最初是在 Ubuntu 12.04 上開發(fā)實(shí)現(xiàn)的阐污;Red Hat 則從 RHEL 6.5 開始對 Docker 進(jìn)行支持休涤;Google 也在其 PaaS 產(chǎn)品中廣泛應(yīng)用 Docker。

為什么要使用Docker

容器除了運(yùn)行其中應(yīng)用外笛辟,基本不消耗額外的系統(tǒng)資源功氨,使得應(yīng)用的性能很高,同時系統(tǒng)的開銷盡量小手幢。傳統(tǒng)虛擬機(jī)方式運(yùn)行 10 個不同的應(yīng)用就要起 10 個虛擬機(jī)捷凄,而Docker 只需要啟動 10 個隔離的應(yīng)用即可。

具體說來围来,Docker 在如下幾個方面具有較大的優(yōu)勢跺涤。

1、更快速的交付和部署

對開發(fā)和運(yùn)維(devop)人員來說监透,最希望的就是一次創(chuàng)建或配置桶错,可以在任意地方正常運(yùn)行。

開發(fā)者可以使用一個標(biāo)準(zhǔn)的鏡像來構(gòu)建一套開發(fā)容器胀蛮,開發(fā)完成之后院刁,運(yùn)維人員可以直接使用這個容器來部署代碼。 Docker 可以快速創(chuàng)建容器粪狼,快速迭代應(yīng)用程序退腥,并讓整個過程全程可見,使團(tuán)隊(duì)中的其他成員更容易理解應(yīng)用程序是如何創(chuàng)建和工作的再榄。 Docker 容器很輕很快阅虫!容器的啟動時間是秒級的,大量地節(jié)約開發(fā)不跟、測試颓帝、部署的時間。

2窝革、更高效的虛擬化

Docker 容器的運(yùn)行不需要額外的 hypervisor 支持购城,它是內(nèi)核級的虛擬化,因此可以實(shí)現(xiàn)更高的性能和效率虐译。

3瘪板、更輕松的遷移和擴(kuò)展

Docker 容器幾乎可以在任意的平臺上運(yùn)行,包括物理機(jī)漆诽、虛擬機(jī)侮攀、公有云锣枝、私有云、個人電腦兰英、服務(wù)器等撇叁。 這種兼容性可以讓用戶把一個應(yīng)用程序從一個平臺直接遷移到另外一個。

4畦贸、更簡單的管理

使用 Docker陨闹,只需要小小的修改跌造,就可以替代以往大量的更新工作卷胯。所有的修改都以增量的方式被分發(fā)和更新夺欲,從而實(shí)現(xiàn)自動化并且高效的管理府阀。

Docker vs VM

從下圖可以看出留潦,VM是一個運(yùn)行在宿主機(jī)之上的完整的操作系統(tǒng)燥撞,VM運(yùn)行自身操作系統(tǒng)會占用較多的CPU酝惧、內(nèi)存瞎饲、硬盤資源沈善。Docker不同于VM杈绸,只包含應(yīng)用程序以及依賴庫,基于libcontainer運(yùn)行在宿主機(jī)上矮瘟,并處于一個隔離的環(huán)境中瞳脓,這使得Docker更加輕量高效,啟動容器只需幾秒鐘之內(nèi)完成澈侠。由于Docker輕量劫侧、資源占用少,使得Docker可以輕易的應(yīng)用到構(gòu)建標(biāo)準(zhǔn)化的應(yīng)用中哨啃。但Docker目前還不夠完善烧栋,比如隔離效果不如VM,共享宿主機(jī)操作系統(tǒng)的一些基礎(chǔ)庫等拳球;網(wǎng)絡(luò)配置功能相對簡單审姓,主要以橋接方式為主;查看日志也不夠方便靈活祝峻。

image

Docker 在容器的基礎(chǔ)上魔吐,進(jìn)行了進(jìn)一步的封裝,從文件系統(tǒng)莱找、網(wǎng)絡(luò)互聯(lián)到進(jìn)程隔離等等酬姆,極大的簡化了容器的創(chuàng)建和維護(hù)。使得 Docker 技術(shù)比虛擬機(jī)技術(shù)更為輕便奥溺、快捷辞色。

作為一種新興的虛擬化方式,Docker 跟傳統(tǒng)的虛擬化方式相比具有眾多的優(yōu)勢浮定。Docker 容器的啟動可以在秒級實(shí)現(xiàn)相满,這相比傳統(tǒng)的虛擬機(jī)方式要快得多层亿;Docker 對系統(tǒng)資源的利用率很高,一臺主機(jī)上可以同時運(yùn)行數(shù)千個 Docker 容器立美。

相關(guān)概念

Docker是CS架構(gòu)匿又,主要有兩個概念:

  • Docker daemon: 運(yùn)行在宿主機(jī)上,Docker守護(hù)進(jìn)程悯辙,用戶通過Docker client(Docker命令)與Docker daemon交互
  • Docker client: Docker 命令行工具琳省,是用戶使用Docker的主要方式迎吵,Docker client與Docker daemon通信并將結(jié)果返回給用戶躲撰,Docker client也可以通過socket或者RESTful api訪問遠(yuǎn)程的Docker daemon
image

了解了Docker的組成,再來了解一下Docker的三個主要概念:

  • Docker image:鏡像是只讀的击费,鏡像中包含有需要運(yùn)行的文件拢蛋。鏡像用來創(chuàng)建container,一個鏡像可以運(yùn)行多個container蔫巩;鏡像可以通過Dockerfile創(chuàng)建谆棱,也可以從Docker hub/registry上下載。
  • Docker container:容器是Docker的運(yùn)行組件圆仔,啟動一個鏡像就是一個容器垃瞧,容器是一個隔離環(huán)境,多個容器之間不會相互影響坪郭,保證容器中的程序運(yùn)行在一個相對安全的環(huán)境中个从。
  • Docker hub/registry: 共享和管理Docker鏡像,用戶可以上傳或者下載上面的鏡像歪沃,官方地址為https://registry.hub.docker.com/嗦锐,也可以搭建自己私有的Docker registry。

鏡像就相當(dāng)于打包好的版本沪曙,鏡像啟動之后運(yùn)行在容器中奕污,倉庫就是裝存儲鏡像的地方。

Docker安裝

建議在linux環(huán)境下安裝Docker液走,window環(huán)境搭建比較復(fù)雜且容易出錯碳默,使用Centos7+yum來安裝Docker環(huán)境很方便。

Docker 軟件包已經(jīng)包括在默認(rèn)的 CentOS-Extras 軟件源里缘眶。因此想要安裝 docker腻窒,只需要運(yùn)行下面的 yum 命令:

yum install docker

安裝完成后,使用下面的命令來啟動 docker 服務(wù)磅崭,并將其設(shè)置為開機(jī)啟動:

service docker start
chkconfig docker on

LCTT 譯注:此處采用了舊式的 sysv 語法儿子,如采用CentOS 7中支持的新式 systemd 語法,如下:

systemctl start docker.service
systemctl enable docker.service

測試

docker version

輸入上述命令砸喻,返回docker的版本相關(guān)信息柔逼,證明docker安裝成功蒋譬。

Hello World

下面,我們通過最簡單的 image 文件”hello world”愉适,感受一下 Docker犯助。

因?yàn)閲鴥?nèi)連接 Docker 的官方倉庫很慢,因此我們在日常使用中會使用Docker 中國加速器维咸。通過 Docker 官方鏡像加速剂买,中國區(qū)用戶能夠快速訪問最流行的 Docker 鏡像。該鏡像托管于中國大陸癌蓖,本地用戶現(xiàn)在將會享受到更快的下載速度和更強(qiáng)的穩(wěn)定性瞬哼,從而能夠更敏捷地開發(fā)和交付 Docker 化應(yīng)用。

Docker 中國官方鏡像加速可通過registry.docker-cn.com訪問租副。該鏡像庫只包含流行的公有鏡像坐慰,私有鏡像仍需要從美國鏡像庫中拉取。

修改系統(tǒng)中docker對應(yīng)的配置文件即可用僧,如下:

vi  /etc/docker/daemon.json
#添加后
{
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "live-restore": true
}

運(yùn)行下面的命令结胀,將 image 文件從倉庫抓取到本地。

docker pull library/hello-world

上面代碼中责循,docker image pull是抓取 image 文件的命令糟港。library/hello-world是 image 文件在倉庫里面的位置,其中l(wèi)ibrary是 image 文件所在的組院仿,hello-world是 image 文件的名字秸抚。

抓取成功以后,就可以在本機(jī)看到這個 image 文件了意蛀。

docker images
#顯示結(jié)果
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world           latest              f2a91732366c        3 months ago        1.848 kB

現(xiàn)在耸别,運(yùn)行這個 image 文件。

docker run hello-world

#顯示結(jié)果
Hello from Docker!
This message shows that your installation appears to be working correctly.

輸出這段提示以后县钥,hello world就會停止運(yùn)行秀姐,容器自動終止。有些容器不會自動終止若贮,因?yàn)樘峁┑氖欠?wù)省有,比如Mysql鏡像等。

常用命令

除過以上我們使用的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

啟動、停止匾效、重啟容器命令:

docker start container_name/container_id
docker stop container_name/container_id
docker restart container_name/container_id

后臺啟動一個容器后舷蟀,如果想進(jìn)入到這個容器,可以使用attach命令:

docker attach container_name/container_id

刪除容器的命令:

docker rm container_name/container_id

刪除所有停止的容器:

docker rm $(docker ps -a -q)

查看當(dāng)前系統(tǒng)Docker信息

docker info

從Docker hub上下載某個鏡像:

docker pull centos:latest
docker pull centos:latest

查找Docker Hub上的nginx鏡像

docker search nginx

執(zhí)行docker pull centos會將Centos這個倉庫下面的所有鏡像下載到本地repository。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末野宜,一起剝皮案震驚了整個濱河市扫步,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匈子,老刑警劉巖河胎,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異虎敦,居然都是意外死亡游岳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門其徙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胚迫,“玉大人,你說我怎么就攤上這事擂橘∩吻” “怎么了摩骨?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵通贞,是天一觀的道長。 經(jīng)常有香客問我恼五,道長昌罩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任灾馒,我火速辦了婚禮茎用,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘睬罗。我一直安慰自己轨功,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布容达。 她就那樣靜靜地躺著古涧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪花盐。 梳的紋絲不亂的頭發(fā)上羡滑,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機(jī)與錄音算芯,去河邊找鬼柒昏。 笑死,一個胖子當(dāng)著我的面吹牛熙揍,可吹牛的內(nèi)容都是我干的职祷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼有梆!你這毒婦竟也來了削葱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤淳梦,失蹤者是張志新(化名)和其女友劉穎析砸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爆袍,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡首繁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了陨囊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弦疮。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蜘醋,靈堂內(nèi)的尸體忽然破棺而出胁塞,到底是詐尸還是另有隱情,我是刑警寧澤压语,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布啸罢,位于F島的核電站,受9級特大地震影響胎食,放射性物質(zhì)發(fā)生泄漏扰才。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一厕怜、第九天 我趴在偏房一處隱蔽的房頂上張望衩匣。 院中可真熱鬧,春花似錦粥航、人聲如沸琅捏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柄延。三九已至,卻和暖如春映之,著一層夾襖步出監(jiān)牢的瞬間拦焚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工杠输, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赎败,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓蠢甲,卻偏偏與公主長得像僵刮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容