About Docker

Docker 是什么:

Docker 屬于 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。

Docker 將應(yīng)用程序與該程序的依賴,打包在一個(gè)文件里面。運(yùn)行這個(gè)文件测垛,就會(huì)生成一個(gè)虛擬容器。程序在這個(gè)虛擬容器里運(yùn)行秧均,就好像在真實(shí)的物理機(jī)上運(yùn)行一樣食侮。有了 Docker,就不用擔(dān)心環(huán)境問題目胡。

總體來說,Docker 的接口相當(dāng)簡單誉己,用戶可以方便地創(chuàng)建和使用容器眉尸,把自己的應(yīng)用放入容器。容器還可以進(jìn)行版本管理巨双、復(fù)制噪猾、分享、修改筑累,就像管理普通的代碼一樣袱蜡。

image 文件:

Docker 把應(yīng)用程序及其依賴,打包在 image 文件里面慢宗。只有通過這個(gè)文件坪蚁,才能生成 Docker 容器奔穿。image 文件可以看作是容器的模板。Docker 根據(jù) image 文件生成容器的實(shí)例迅细。同一個(gè) image 文件巫橄,可以生成多個(gè)同時(shí)運(yùn)行的容器實(shí)例淘邻。

Dockerfile 文件:

學(xué)會(huì)使用 image 文件以后茵典,接下來的問題就是,如何可以生成 image 文件宾舅?如果你要推廣自己的軟件统阿,勢(shì)必要自己制作 image 文件。

這就需要用到 Dockerfile 文件筹我。它是一個(gè)文本文件扶平,用來配置 image。Docker 根據(jù) 該文件生成二進(jìn)制的 image 文件蔬蕊。

下面通過一個(gè)實(shí)例结澄,演示如何編寫 Dockerfile 文件。

編寫 Dockerfile 文件

首先岸夯,在項(xiàng)目的根目錄下麻献,新建一個(gè)文本文件.dockerignore 這個(gè)就相當(dāng)于git的gitignore。

然后猜扮,在項(xiàng)目的根目錄下勉吻,新建一個(gè)文本文件 Dockerfile,寫入下面的內(nèi)容旅赢。(:后面為解釋內(nèi)容)

FROM node:8.4:該 image 文件繼承官方的 node image齿桃,冒號(hào)表示標(biāo)簽,這里標(biāo)簽是8.4煮盼,即8.4版本的 node短纵。

COPY . /app:將當(dāng)前目錄下的所有文件(除了.dockerignore排除的路徑),都拷貝進(jìn)入 image 文件的/app目錄僵控。

WORKDIR /app:指定接下來的工作路徑為/app香到。

RUN npm install:在/app目錄下,運(yùn)行npm install命令安裝依賴喉祭。注意养渴,安裝后所有的依賴,都將打包進(jìn)入 image 文件泛烙。

EXPOSE 3000:將容器 3000 端口暴露出來理卑, 允許外部連接這個(gè)端口。

創(chuàng)建 image 文件

有了 Dockerfile 文件以后蔽氨,就可以使用docker image build命令創(chuàng)建 image 文件 ??

docker image build -t liuxu .

面代碼中藐唠,-t參數(shù)用來指定 image 文件的名字帆疟,后面還可以用冒號(hào)指定標(biāo)簽。如果不指定宇立,默認(rèn)的標(biāo)簽就是latest踪宠。最后的那個(gè)點(diǎn)表示 Dockerfile 文件所在的路徑,上例是當(dāng)前路徑妈嘹,所以是一個(gè)點(diǎn)柳琢。

如果運(yùn)行成功,就可以看到新生成的 image 文件liuxu了润脸。

生成容器:

docker container run命令會(huì)從 image 文件生成容器柬脸。

docker container run -p 8000:3000 -it liuxu /bin/bash

-p參數(shù):容器的 3000 端口映射到本機(jī)的 8000 端口。

-it參數(shù):容器的 Shell 映射到當(dāng)前的 Shell毙驯,然后你在本機(jī)窗口輸入的命令倒堕,就會(huì)傳入容器。

koa-demo:0.0.1:image 文件的名字(如果有標(biāo)簽爆价,還需要提供標(biāo)簽垦巴,默認(rèn)是 latest 標(biāo)簽)。

/bin/bash:容器啟動(dòng)以后铭段,內(nèi)部第一個(gè)執(zhí)行的命令骤宣。這里是啟動(dòng) Bash,保證用戶可以使用 Shell稠项。

如果一切正常涯雅,運(yùn)行上面的命令以后,就會(huì)返回一個(gè)命令行提示符展运。:/app#

這時(shí)活逆,liuxu 框架已經(jīng)運(yùn)行起來了。打開本機(jī)的瀏覽器拗胜,訪問 http://127.0.0.1:8000蔗候,網(wǎng)頁顯示"Not Found",這是因?yàn)檫@個(gè)?demo?沒有寫路由埂软。

這個(gè)例子中锈遥,Node 進(jìn)程運(yùn)行在 Docker 容器的虛擬環(huán)境里面,進(jìn)程接觸到的文件系統(tǒng)和網(wǎng)絡(luò)接口都是虛擬的勘畔,與本機(jī)的文件系統(tǒng)和網(wǎng)絡(luò)接口是隔離的所灸,因此需要定義容器與物理機(jī)的端口映射(map)。

現(xiàn)在炫七,在容器的命令行爬立,按下 Ctrl + c 停止 Node 進(jìn)程,然后按下 Ctrl + d (或者輸入 exit)退出容器万哪。此外侠驯,也可以用docker container kill終止容器運(yùn)行抡秆。

CMD 命令

容器啟動(dòng)以后,需要手動(dòng)輸入命令node demos/01.js吟策。我們可以把這個(gè)命令寫在 Dockerfile 里面儒士,這樣容器啟動(dòng)以后,這個(gè)命令就已經(jīng)執(zhí)行了檩坚,不用再手動(dòng)輸入了着撩。

CMD node demos/01.js

它表示容器啟動(dòng)后自動(dòng)執(zhí)行node demos/01.js?RUN命令在 image 文件的構(gòu)建階段執(zhí)行,執(zhí)行結(jié)果都會(huì)打包進(jìn)入 image 文件效床;CMD命令則是在容器啟動(dòng)后執(zhí)行睹酌。另外权谁,一個(gè) Dockerfile 可以包含多個(gè)RUN命令剩檀,但是只能有一個(gè)CMD命令。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末旺芽,一起剝皮案震驚了整個(gè)濱河市沪猴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌采章,老刑警劉巖运嗜,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悯舟,居然都是意外死亡担租,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門抵怎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奋救,“玉大人,你說我怎么就攤上這事反惕〕⑺遥” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵姿染,是天一觀的道長背亥。 經(jīng)常有香客問我,道長悬赏,這世上最難降的妖魔是什么狡汉? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮闽颇,結(jié)果婚禮上盾戴,老公的妹妹穿的比我還像新娘。我一直安慰自己进萄,他們只是感情好捻脖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布锐峭。 她就那樣靜靜地躺著,像睡著了一般可婶。 火紅的嫁衣襯著肌膚如雪沿癞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天矛渴,我揣著相機(jī)與錄音椎扬,去河邊找鬼。 笑死具温,一個(gè)胖子當(dāng)著我的面吹牛蚕涤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铣猩,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼揖铜,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了达皿?” 一聲冷哼從身側(cè)響起天吓,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎峦椰,沒想到半個(gè)月后龄寞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汤功,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年物邑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滔金。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡色解,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鹦蠕,到底是詐尸還是另有隱情冒签,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布钟病,位于F島的核電站萧恕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏肠阱。R本人自食惡果不足惜票唆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屹徘。 院中可真熱鬧走趋,春花似錦、人聲如沸噪伊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至姨伟,卻和暖如春惩琉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夺荒。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工瞒渠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人技扼。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓伍玖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親剿吻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窍箍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

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

  • docker Docker是一個(gè)開源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的和橙、可移植的仔燕、自給自足的容器。Doc...
    MeteorCode閱讀 514評(píng)論 0 0
  • 一魔招、背景 Docker是一個(gè)開源的應(yīng)用容器引擎,它以容器的形式將應(yīng)用程序及其依賴向打包在一起五辽,以確保應(yīng)用程序在人和...
    落地生涯閱讀 1,685評(píng)論 0 0
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,729評(píng)論 1 21
  • docker常用命令原理圖概覽: 按照docker官網(wǎng)上的說法办斑,docker的文件系統(tǒng)分為兩層:bootfs和ro...
    燕京博士閱讀 2,953評(píng)論 2 32
  • Blue活力觀念題 課題: 1、我對(duì)王超感到生氣杆逗,因?yàn)槲矣幸淮慰吹剿习嘣诤染啤?2乡翅、我要王超改掉這個(gè)壞習(xí)慣 3、...
    木鐸今生閱讀 231評(píng)論 0 0