關(guān)于docker的基本使用

  • dokcer的基本組成
  • 鏡像

相當(dāng)于掛在了root文件系統(tǒng)的Linux旭等。

  • 容器

鏡像與容器的關(guān)系,就像是面向?qū)ο笾械念惡蛯?shí)體一樣继谚。鏡像是靜態(tài)定義的鹃唯,容器是鏡像運(yùn)行時的實(shí)體爱榕。容器可以被創(chuàng)建、啟動坡慌、停止黔酥、刪除、暫停等操作洪橘。
容器的實(shí)質(zhì)是進(jìn)程跪者。但是與直接宿主執(zhí)行的進(jìn)程不同,容器進(jìn)程運(yùn)行屬于自己的獨(dú)立的命名空間熄求。

  • 倉庫

Dockerfile的使用

Dockerfile是一個文本文件

  • 如我們在某個目錄創(chuàng)建一個Dockerfile文件渣玲。
    vi Dockerfile
  • Dockerfile最基本的格式如下:

FROM nginx
RUN echo "<h1>Hello world</h1>" /usr/share/nginx/html/index.html

- 指令說明
 - FROM 指定鏡像 基礎(chǔ)鏡像是必須要指定的。作用就是在此鏡像的基礎(chǔ)上進(jìn)行定制抡四。在Dockerfile文件中柜蜈,F(xiàn)ROM是必備的命令仗谆,而且是第一條命令指巡。
 - eg

FROM centos

 - 此外,除了選擇現(xiàn)有鏡像的基礎(chǔ)上隶垮,Docker還存在一個特殊的鏡像藻雪,名為scratch,這個鏡像是虛擬的概念狸吞,并不實(shí)際存在勉耀,他表示一個空白的鏡像

FROM scratch
...

 - RUN 執(zhí)行命令 指煎,它是用來執(zhí)行命令行命令的,由于命令行強(qiáng)大的能力便斥,RUN指令在定制鏡像時是最常用的命令之一至壤。
 - RUN命令后跟著的有兩種格式:
  - 1、Shell格式:RUN <命令> 

RUN echo "hello world"

  -2枢纠、 exec格式:RUN ["可執(zhí)行文件", "參數(shù)1", "參數(shù)2"]像街,這更像是函數(shù)調(diào)用中的格式。
如果RUN執(zhí)行了多條命令晋渺,則應(yīng)該按照如下方式書寫镰绎,而不是每條命令都使用RUN執(zhí)行一次。因?yàn)閷訑?shù)限制木西。

FROM debian:jessie
RUN buildDeps='gcc libc6-dev make'
&& apt-get update
&& apt-get install -y $buildDeps
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz"
&& mkdir -p /usr/src/redis
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1
&& make -C /usr/src/redis
&& make -C /usr/src/redis install
&& rm -rf /var/lib/apt/lists/*
&& rm redis.tar.gz
&& rm -r /usr/src/redis
&& apt-get purge -y --auto-remove $buildDeps


### 構(gòu)建鏡像
- 首先創(chuàng)建一個Dockerfile 文件畴栖,vi Dockerfile,然后加入最簡單的命令:
FROM nginx
RUN echo "hello docker"
保存退出。
- 構(gòu)建鏡像,在Dockerfile文件的當(dāng)前目錄下執(zhí)行
docker build -t nginx:v2 .
- 等待執(zhí)行完畢
`說明:我們指定了鏡像名 -t nginx:v2`
- 最后八千,運(yùn)行該容器

docker run -d -p 8085:80 nginx:v2

 - 在瀏覽器中輸入localhost:8085即可看到輸出吗讶。

- 刪除鏡像

docker rmi -f 鏡像名


- docker build構(gòu)建命令的格式為:

docker build [選項(xiàng)] <上下文路徑/URL/>


### 構(gòu)建上下文路徑
- docker build命令最后面有個 . ,表示當(dāng)前路徑叼丑,在當(dāng)前路徑中尋找Dockerfile文件关翎。
> 這就引入了上下文的概念。當(dāng)構(gòu)建的時候鸠信,用戶會指定構(gòu)建鏡像上下文的路徑纵寝,docker build 命令得知這個路徑后,會將路徑下的所有內(nèi)容打包星立,然后上傳給 Docker 引擎爽茴。這樣 Docker 引擎收到這個上下文包后,展開就會獲得構(gòu)建鏡像所需的一切文件绰垂。

- 關(guān)于上下文
>  如果在 Dockerfile 中這么寫:
```COPY ./package.json /app/```
這并不是要復(fù)制執(zhí)行 docker build 命令所在的目錄下的 package.json室奏,也不是復(fù)制 Dockerfile 所在目錄下的 package.json,而是復(fù)制 上下文(context) 目錄下的 package.json劲装。
因此胧沫,COPY 這類指令中的源文件的路徑都是相對路徑。這也是初學(xué)者經(jīng)常會問的為什么 COPY ../package.json /app 或者 COPY /opt/xxxx /app 無法工作的原因占业,因?yàn)檫@些路徑已經(jīng)超出了上下文的范圍绒怨,Docker 引擎無法獲得這些位置的文件。如果真的需要那些文件谦疾,應(yīng)該將它們復(fù)制到上下文目錄中去南蹂。
現(xiàn)在就可以理解剛才的命令 docker build -t nginx:v3 . 中的這個 .,實(shí)際上是在指定上下文的目錄念恍,docker build 命令會將該目錄下的內(nèi)容打包交給 Docker 引擎以幫助構(gòu)建鏡像六剥。
如果觀察 docker build 輸出晚顷,我們其實(shí)已經(jīng)看到了這個發(fā)送上下文的過程:

$ docker build -t nginx:v3 .
Sending build context to Docker daemon 2.048 kB
...

理解構(gòu)建上下文對于鏡像構(gòu)建是很重要的,避免犯一些不應(yīng)該的錯誤疗疟。比如有些初學(xué)者在發(fā)現(xiàn) COPY /opt/xxxx /app 不工作后该默,于是干脆將 Dockerfile 放到了硬盤根目錄去構(gòu)建,結(jié)果發(fā)現(xiàn) docker build 執(zhí)行后策彤,在發(fā)送一個幾十 GB 的東西权均,極為緩慢而且很容易構(gòu)建失敗。那是因?yàn)檫@種做法是在讓 docker build 打包整個硬盤锅锨,這顯然是使用錯誤叽赊。
一般來說,應(yīng)該會將 Dockerfile 置于一個空目錄下必搞,或者項(xiàng)目根目錄下必指。如果該目錄下沒有所需文件,那么應(yīng)該把所需文件復(fù)制一份過來恕洲。如果目錄下有些東西確實(shí)不希望構(gòu)建時傳給 Docker 引擎塔橡,那么可以用 .gitignore 一樣的語法寫一個 .dockerignore,該文件是用于剔除不需要作為上下文傳遞給 Docker 引擎的霜第。
那么為什么會有人誤以為 . 是指定 Dockerfile 所在目錄呢葛家?這是因?yàn)樵谀J(rèn)情況下,如果不額外指定 Dockerfile 的話泌类,會將上下文目錄下的名為 Dockerfile 的文件作為 Dockerfile癞谒。
這只是默認(rèn)行為,實(shí)際上 Dockerfile 的文件名并不要求必須為 Dockerfile刃榨,而且并不要求必須位于上下文目錄中弹砚,比如可以用 -f ../Dockerfile.php 參數(shù)指定某個文件作為 Dockerfile。
當(dāng)然枢希,一般大家習(xí)慣性的會使用默認(rèn)的文件名 Dockerfile桌吃,以及會將其置于鏡像構(gòu)建上下文目錄中。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苞轿,一起剝皮案震驚了整個濱河市茅诱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搬卒,老刑警劉巖瑟俭,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異秀睛,居然都是意外死亡尔当,警方通過查閱死者的電腦和手機(jī)莲祸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門蹂安,熙熙樓的掌柜王于貴愁眉苦臉地迎上來椭迎,“玉大人,你說我怎么就攤上這事田盈⌒蠛牛” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵允瞧,是天一觀的道長简软。 經(jīng)常有香客問我,道長述暂,這世上最難降的妖魔是什么痹升? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮畦韭,結(jié)果婚禮上疼蛾,老公的妹妹穿的比我還像新娘。我一直安慰自己艺配,他們只是感情好察郁,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著转唉,像睡著了一般皮钠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赠法,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天麦轰,我揣著相機(jī)與錄音,去河邊找鬼砖织。 笑死原朝,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的镶苞。 我是一名探鬼主播喳坠,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼茂蚓!你這毒婦竟也來了壕鹉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤聋涨,失蹤者是張志新(化名)和其女友劉穎晾浴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牍白,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脊凰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狸涌。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡切省,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帕胆,到底是詐尸還是另有隱情朝捆,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布懒豹,位于F島的核電站芙盘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏脸秽。R本人自食惡果不足惜儒老,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望记餐。 院中可真熱鬧贷盲,春花似錦、人聲如沸剥扣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钠怯。三九已至佳魔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晦炊,已是汗流浹背鞠鲜。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留断国,地道東北人贤姆。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像稳衬,于是被迫代替她去往敵國和親霞捡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

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

  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件薄疚?Google Compute Engi...
    ahohoho閱讀 15,548評論 15 147
  • 最近公司項(xiàng)目上線原因碧信,一直加班。沒有時間更新文章街夭。隔壁部門需要我提供sdk的打包的支持砰碴,所以一直在學(xué)習(xí)docker...
    若與閱讀 459評論 0 8
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,763評論 1 21
  • 一、Docker創(chuàng)建鏡像的方式有兩種: 一種通過commit的方式:把做了一系列操作的容器關(guān)閉板丽,然后利用docke...
    jie0112閱讀 3,838評論 0 3
  • 文 / 藝文小舍 你帶來的幸福 幸福無法看見 看見的可能只是光彩的容顏 幸福無法說出 說出的往往不是真實(shí)的...
    藝文小舍閱讀 605評論 46 48