Docker 學(xué)習(xí)筆記2 - 創(chuàng)建一個鏡像和發(fā)布鏡像

0. 背景

本文講解如何構(gòu)建一個鏡像,和發(fā)布到 Docker Hub。

基于 Docker 的開發(fā)流程
一般來說基于 Docker 的開發(fā)流程是這樣的:

  • (1)創(chuàng)建Docker鏡像彤侍,它承載了你的程序運(yùn)行的必要環(huán)境妈经,是創(chuàng)建和測試獨(dú)立的基礎(chǔ)杖挣。
  • (2)測試慢洋,驗(yàn)證你的鏡像。
  • (2)發(fā)布/分享你的鏡像匾效。比如在 Docker Hub 上發(fā)布你的Docker鏡像

本文關(guān)注第一步舷蟀,創(chuàng)建一個基礎(chǔ)的鏡像,這個鏡像是你的容器的基礎(chǔ)。一個鏡像包含了用于承載容器運(yùn)行的私有的文件系統(tǒng)野宜∩ú剑基于此,我們需要把我們的應(yīng)用程序的能夠運(yùn)行的所需文件/ 組件放入鏡像中速缨。

容器化的開發(fā)環(huán)境锌妻,相比于傳統(tǒng)的開發(fā)環(huán)境更容易配置。由于一個容器化的開發(fā)環(huán)境會把應(yīng)用程序所需要的文件依賴項(xiàng)旬牲,隔離在鏡像的內(nèi)部仿粹。那么,在你的真實(shí)開發(fā)主機(jī)上原茅,僅需要安裝Docker就夠了吭历。

通過這種方式,你可以輕松地為不同的技術(shù)棧開發(fā)應(yīng)用程序擂橘,而無需更改開發(fā)者主機(jī)上的內(nèi)容晌区。

1. 在開始之前的準(zhǔn)備

從 git 克隆一個示例項(xiàng)目到你本地:

git clone https://github.com/dockersamples/node-bulletin-board
cd node-bulletin-board/bulletin-board-app

2. 創(chuàng)建Docker鏡像

步驟拆解:

  • (1) 編寫 Dockerfile 文件
  • (2) 執(zhí)行

下面分別說明。

2.1 編寫 Dockerfile 文件

進(jìn)入項(xiàng)目的根目錄通贞,新一個 Dockerfile 文件朗若,內(nèi)容如下:

# 指定一個 作為基礎(chǔ)的 官方鏡像
FROM node:current-slim

# 設(shè)置工作目錄,這里是你的Docker鏡像文件系統(tǒng)中的文件位置
WORKDIR /usr/src/app
# 拷貝你機(jī)器中的 package.json 到 鏡像文件系統(tǒng)中
COPY package.json .
# 要使用npm昌罩,先指定一個國內(nèi)的源
RUN npm config set registry https://registry.npm.taobao.org
# 執(zhí)行 npm install
RUN npm install

# 暴露Docker鏡像的 8080 端口
EXPOSE 8080

# 執(zhí)行 指令 npm start
CMD [ "npm", "start" ]

# 拷貝當(dāng)前文件下的內(nèi)容到 Docker鏡像中
COPY . .

說明:

  • FROM:指定一個 作為基礎(chǔ)的 官方鏡像
  • WORKDIR:設(shè)置Docker鏡像文件系統(tǒng)中的工作目錄哭懈,后續(xù)操作以這個為基礎(chǔ)。
  • RUN :后面跟的是在你的Docker鏡像中執(zhí)行的指令茎用。
  • EXPOSE:暴露Docker鏡像的 8080 端口
    上面的步驟構(gòu)建了鏡像的文件系統(tǒng)遣总。
  • CMD:是第一個在映像中運(yùn)行的指令。

這些步驟與您在主機(jī)上設(shè)置和安裝應(yīng)用程序的步驟大致相同轨功。由于使用了Dockerfile旭斥,它可以使您在可移植的、獨(dú)立的Docker鏡像中執(zhí)行相同的操作古涧。

2.2 執(zhí)行構(gòu)建 docker build

在命令行執(zhí)行:

docker build --tag bulletinboard:1.0 .

執(zhí)行后垂券,將會看到按步驟執(zhí)行的過程。

image.png

最后看到 Successfully tagged "你的鏡像名"蒿褂,說明構(gòu)建完成圆米。

查看你本機(jī)的所有鏡像
執(zhí)行 docker images 查看你本機(jī)的所有鏡像,看下是不是有了啄栓。

docker images

3. 用這個鏡像啟動容器

用這個鏡像啟動容器,執(zhí)行:
docker run --publish 8000:8080 --detach --name bb bulletinboard:1.0

說明:
--publish: 指定端口映射也祠,比如這里它將主機(jī)端口8000的流量轉(zhuǎn)發(fā)到容器端口8080昙楚。容器的端口是私有的,想從網(wǎng)絡(luò)中訪問就必須以這種方式將流量轉(zhuǎn)發(fā)給它诈嘿。
--detach:表示將在后臺運(yùn)行此容器堪旧。
--name:指定容器的名稱削葱。

訪問啟動后的程序
在瀏覽器中打開,可以看到部署成功的應(yīng)用web頁面

http://localhost:8000

移除這個容器
上面指定了名字叫 bb ,那么執(zhí)行:

docker rm --force bb

4. 在 Docker Hub 上發(fā)布你的Docker鏡像

Docker Hub 存放著 Docker 及其組件的很多資源淳梦,很多人在這里發(fā)布/分享鏡像析砸,這里我們也發(fā)布一個。分這么幾步:

  • (1)注冊賬戶
  • (2) 創(chuàng)建 一個 倉庫 repository
  • (3) 推送(push)你的鏡像

4.1 注冊賬戶

https://hub.docker.com/signup. 完成注冊爆袍。

4.2 創(chuàng)建 一個 倉庫 repository

找到 Repositories > Create 首繁,填寫一些信息,按引導(dǎo)完成創(chuàng)建陨囊。

4.3 推送(push)你的鏡像

建立鏡像關(guān)聯(lián)到遠(yuǎn)程倉庫
注意下面 gordon 改成你的賬戶名弦疮。

docker tag bulletinboard:1.0 gordon/bulletinboard:1.0

執(zhí)行push

docker push gordon/bulletinboard:1.0

現(xiàn)在鏡像已經(jīng)可以在Docker Hub上使用了,在新機(jī)器上部署使用它會非常方便蜘醋,Docker將自動嘗試并從Docker Hub下載它胁塞。

一個至關(guān)重要的最佳實(shí)踐是:將你的 Dockerfile 放在版本控制中,可能與應(yīng)用程序的源代碼放在一起压语。并在 Docker Hub 存儲庫描述指示可以在何處找到這個文件啸罢。這樣不僅保留鏡像構(gòu)建方式的記錄,還保留鏡像作為完整應(yīng)用程序運(yùn)行的方式的記錄胎食。

5. 參考

https://docs.docker.com/get-started/part2/

https://www.widuu.com/chinese_docker/userguide/dockerhub.html

https://docs.docker.com/get-started/part3/

END

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扰才,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子斥季,更是在濱河造成了極大的恐慌训桶,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酣倾,死亡現(xiàn)場離奇詭異舵揭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)躁锡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門午绳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人映之,你說我怎么就攤上這事拦焚。” “怎么了杠输?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵赎败,是天一觀的道長。 經(jīng)常有香客問我蠢甲,道長僵刮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮搞糕,結(jié)果婚禮上勇吊,老公的妹妹穿的比我還像新娘。我一直安慰自己窍仰,他們只是感情好汉规,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著驹吮,像睡著了一般针史。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钥屈,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天悟民,我揣著相機(jī)與錄音,去河邊找鬼篷就。 笑死射亏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的竭业。 我是一名探鬼主播智润,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼未辆!你這毒婦竟也來了窟绷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤咐柜,失蹤者是張志新(化名)和其女友劉穎兼蜈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拙友,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡为狸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了遗契。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辐棒。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖牍蜂,靈堂內(nèi)的尸體忽然破棺而出漾根,到底是詐尸還是另有隱情,我是刑警寧澤鲫竞,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布辐怕,位于F島的核電站,受9級特大地震影響从绘,放射性物質(zhì)發(fā)生泄漏秘蛇。R本人自食惡果不足惜其做,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一顶考、第九天 我趴在偏房一處隱蔽的房頂上張望赁还。 院中可真熱鬧,春花似錦驹沿、人聲如沸艘策。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朋蔫。三九已至,卻和暖如春却汉,著一層夾襖步出監(jiān)牢的瞬間驯妄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工合砂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留青扔,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓翩伪,卻偏偏與公主長得像微猖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子缘屹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359

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