3.Docker入門(二)創(chuàng)建您的第一個Docker鏡像

注意

以下內容完全摘自Docker官方文檔,僅為學習及技術分享所用,切勿用于商業(yè)用途廓块,轉載請注明出處。

以下為正文


Dockerfile

從現在開始,我們進入Docker實踐,首先瘪松,讓我們來創(chuàng)建第一個Docker鏡像,它將啟動一個容器锨阿,容器中運行一個簡單的Python應用宵睦。
正如之前我們所學到的,Docker鏡像文件包含了您的應用程序正常運行需要的一切墅诡,包括對資源需求壳嚎、環(huán)境的要求、依賴的類庫和運行的代碼等等书斜。那么如何來定義和描述一個Docker鏡像呢诬辈,需要使用Dockerfile。

Dockerfile定義在您的容器中的運行環(huán)境荐吉,包括像網絡接口和虛擬化的磁盤驅動等硬件資源,這些資源是與您的宿主系統(tǒng)隔離開的口渔,不會對您的系統(tǒng)有作何影響样屠。Dockerfile用于構建一致的Docker鏡像,使用Docker鏡像運行Docker容器缺脉,可以讓定義在該鏡像中的應用程序無論在哪里運行痪欲,都有一致的功能。

編寫第一個Dockerfile

在一個空目錄下創(chuàng)建一個名為Dockerfile的文件攻礼,在該文件中輸入以下內容

Dockerfile

# 使用官方python鏡像作為根鏡像
FROM python:2.7-slim

# 將容器工作目錄設置為 /app
WORKDIR /app

# 將當前目錄(宿主機)中的內容全部復制到容器的 /app 目錄下
ADD . /app

# 安裝 requirements.txt 中定義好的包
RUN pip install -r requirements.txt

# 對外公開容器的80端口
EXPOSE 80

# 定義一個環(huán)境變量world
ENV NAME World

# 在容器啟動時业踢,運行 python app.py命令
CMD ["python", "app.py"]

如果您仔細閱讀上面的Dockerfile,你會發(fā)現我們還需要創(chuàng)建requirements.txt和app.py礁扮,在Dockerfile所在目錄下依次創(chuàng)建這兩個文件知举。

requirements.txt

Flask
Redis

requirements.txt中定義了容器依賴的包:Flask和Redis。Dockerfile中的RUN pip install -r requirements.txt將會讀取到requirements.txt中的內容太伊,然后安裝這些依賴包雇锡。

app.py

from flask import Flask
from redis import Redis, RedisError
import os
import socket

# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)

app = Flask(__name__)

@app.route("/")
def hello():
    try:
        visits = redis.incr('counter')
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html.format(name=os.getenv('NAME', "world"), hostname=socket.gethostname(), visits=visits)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

構建鏡像

現在使用我們編寫好的Dockerfile來構建鏡像,運行以下命令僚焦,生成一個tag為pythonhelloworld的docker鏡像

docker build -t pythonhelloworld

這樣創(chuàng)建好的鏡像文件就存放在您本地的Docker registry(注冊中心)里锰提。
您可以運行以下命令來查看所有本地注冊中心的鏡像

docker images

運行鏡像 啟動容器

運行以下命令,將您本機的4000端口映射到docker容器的80端口

docker run -p 4000:80 pythonhelloworld

您可以通過http://localhost:4000
查看到運行的結果
也可以使用 -d 參數,將容器運行在后臺

docker run -p -d 4000:80 pythonhelloworld

可以使用 docker ps 命令立肘,查看所有運行中的docker容器進程

docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED
13f4a444f359        pythonhelloworld       "python app.py"     35 seconds ago

使用docker stop <hash> 命令边坤,結束某個docker容器進程

docker stop 13f4a444f359

分享您的鏡像

現在可以將您剛剛構建的這個鏡像發(fā)布到Docker public registry上(也可以發(fā)布到其他公共registry或者私人配置的registry中),這樣無論在哪里谅年,只要在一個安裝了docker的機器上拉取這個鏡像茧痒,就可以在該機器上啟動一樣的容器。

注冊您的docker賬號

如果您還沒有docker賬號踢故,您需要首先到這里注冊一個賬號:cloud.docker.com.
然后您就可以使用login命令登錄了文黎。

docker login

發(fā)布您的鏡像

可以使用以下命令標記您的鏡像,其中username是您自己的用戶名殿较,repository是您自定義的倉庫名耸峭,tag標記是可選的,默認為latest

docker tag pythonhelloworld username/repository:tag

運行以下命令發(fā)布該鏡像

docker publish username/repository:tag

發(fā)布成功后淋纲,在任何docker機器上劳闹,運行以下命令就會自動拉取和運行該鏡像了

docker run -p 4000:80 username/repository:tag
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市洽瞬,隨后出現的幾起案子本涕,更是在濱河造成了極大的恐慌,老刑警劉巖伙窃,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菩颖,死亡現場離奇詭異,居然都是意外死亡为障,警方通過查閱死者的電腦和手機晦闰,發(fā)現死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳍怨,“玉大人呻右,你說我怎么就攤上這事⌒” “怎么了声滥?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長侦香。 經常有香客問我落塑,道長,這世上最難降的妖魔是什么鄙皇? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任芜赌,我火速辦了婚禮,結果婚禮上伴逸,老公的妹妹穿的比我還像新娘缠沈。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布洲愤。 她就那樣靜靜地躺著颓芭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柬赐。 梳的紋絲不亂的頭發(fā)上亡问,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音肛宋,去河邊找鬼州藕。 笑死,一個胖子當著我的面吹牛酝陈,可吹牛的內容都是我干的床玻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼沉帮,長吁一口氣:“原來是場噩夢啊……” “哼锈死!你這毒婦竟也來了?” 一聲冷哼從身側響起穆壕,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤待牵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后喇勋,有當地人在樹林里發(fā)現了一具尸體缨该,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年川背,在試婚紗的時候發(fā)現自己被綠了压彭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡渗常,死狀恐怖,靈堂內的尸體忽然破棺而出汗盘,到底是詐尸還是另有隱情皱碘,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布隐孽,位于F島的核電站癌椿,受9級特大地震影響,放射性物質發(fā)生泄漏菱阵。R本人自食惡果不足惜踢俄,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晴及。 院中可真熱鬧都办,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至歌懒,卻和暖如春啦桌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背及皂。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工甫男, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人验烧。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓板驳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親噪窘。 傳聞我的和親對象是個殘疾皇子笋庄,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容