Docker容器基礎(chǔ)

Docker 對(duì)象

  • 鏡像
    鏡像可以看做是一個(gè)根文件系統(tǒng)员凝,包含了操作系統(tǒng)迈嘹,應(yīng)用程序所需要的庫(kù)資源等
  • 容器,
    在鏡像的基礎(chǔ)上,加入可讀可寫層。在容器的所有操作都會(huì)寫入到最上層的可讀可寫層宴抚,每次刪除容器最上層的讀寫層就會(huì)被刪掉,所以這期間寫入得數(shù)據(jù)也一并刪掉了甫煞。如果想深入了解容器的分層原理可以學(xué)習(xí)下聯(lián)合文件系統(tǒng)菇曲。

docker event state

1_vca4e-SjpzSL5H401p4LCg.png

Dockerfile 用法

Dockerfile 是構(gòu)建鏡像的源代碼
docker可以自動(dòng)化的生成鏡像通過(guò)dockerfile,dockerfile是一個(gè)文本文件包含了用戶創(chuàng)建鏡像需要的所有指令。

常用指令

FROM
  • FROM指定一個(gè)基礎(chǔ)鏡像抚吠, 一般情況下一個(gè)可用的 Dockerfile一定是 FROM 為第一個(gè)指令常潮。至于image則可以是任何合理存在的image鏡像。
COPY 復(fù)制

格式:

  • COPY [--chown=<user>:<group>] <源路徑>... <目標(biāo)路徑>
  • COPY [--chown=<user>:<group>] ["<源路徑1>",... "<目標(biāo)路徑>"]

COPY 指令將從構(gòu)建上下文目錄中 <源路徑> 的文件/目錄復(fù)制到新的一層的鏡像內(nèi)的 <目標(biāo)路徑> 位置楷力。比如:

COPY a* /mydir/
COPY a?.txt /mydir/

目標(biāo)路徑不需要事先創(chuàng)建喊式,如果目錄不存在會(huì)在復(fù)制文件前先行創(chuàng)建缺失目錄。
使用 COPY 指令萧朝,源文件的各種元數(shù)據(jù)都會(huì)保留岔留。比如讀、寫检柬、執(zhí)行權(quán)限献联、文件變更時(shí)間等。

ADD 復(fù)制
  • ADD相比于COPY支持tar文件和url路徑。
  • tar 是本地文件里逆,將自動(dòng)展開為目錄进胯,類似于解壓,如果是url的tar文件則不自動(dòng)解壓
ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
  • ADD 將文件從路徑 <src> 復(fù)制添加到容器內(nèi)部路徑 <dest>运悲,dest必須寫成dest/龄减。
小結(jié)

COPY和ADD 復(fù)制目錄時(shí)有些特殊,對(duì)于目錄而言:只復(fù)制目錄中的內(nèi)容而不包含目錄自身

ADD go /usr/local/      僅僅復(fù)制了go目錄里的內(nèi)容沒有復(fù)制目錄
ADD go /usr/local/go/    復(fù)制go目錄

官方建議:如果需要解壓則用ADD,否則用COPY

WORKDIR

可以來(lái)指定工作目錄(或者稱為當(dāng)前目錄)班眯,以后各層的當(dāng)前目錄就被改為指定的目錄希停,如該目錄不存在,WORKDIR 會(huì)幫你建立目錄署隘。

ENV

定義容器的環(huán)境變量
格式有兩種:

  • ENV <key> <value>
  • ENV <key1>=<value1> <key2>=<value2>...
ENV VERSION=1.0 DEBUG=on \
    NAME="Happy Feet"

在dockerfile 可以通過(guò)$變量 調(diào)用

RUN

docker build創(chuàng)建鏡像時(shí)執(zhí)行一些指令
RUN <command> 由shell啟動(dòng)宠能,Linux默認(rèn)為/bin/sh -c, id為1的進(jìn)程為bin shell磁餐,子進(jìn)程為command

RUN yum install -y wget &&\
         mkdir /app

RUN 會(huì)增加中間層鏡像违崇,考慮到鏡像的大小盡量把所以有命令寫入到一個(gè)RUN命令下

CMD

  • shell 格式:CMD <命令>
  • exec 格式:CMD ["可執(zhí)行文件", "參數(shù)1", "參數(shù)2"...]

Docker 不是虛擬機(jī),容器就是進(jìn)程诊霹。既然是進(jìn)程羞延,那么在啟動(dòng)容器的時(shí)候,需要指定所運(yùn)行的程序及參數(shù)脾还。CMD 指令就是用于指定默認(rèn)的容器主進(jìn)程的啟動(dòng)命令的伴箩。

CMD /tools/start.sh

命令會(huì)自動(dòng)解釋成

CMD [ "sh", "-c", "/tools/start.sh" ]

ENTRYPOINT

  • ENTRYPOINT的目的和 CMD 一樣,都是在指定容器啟動(dòng)程序及參數(shù)鄙漏。ENTRYPOINT 在運(yùn)行時(shí)也可以替代嗤谚,不過(guò)比 CMD 要略顯繁瑣,需要通過(guò) docker run 的參數(shù) --entrypoint 來(lái)指定怔蚌。
  • 當(dāng)指定了 ENTRYPOINT 后巩步,CMD 的含義就發(fā)生了改變,不再是直接的運(yùn)行其命令桦踊,而是將 CMD 的內(nèi)容作為參數(shù)傳給 ENTRYPOINT 指令椅野,換句話說(shuō)實(shí)際執(zhí)行時(shí),將變?yōu)椋?/li>
<ENTRYPOINT> "<CMD>"
  • ENTRYPOINT指令和CMD指令雖然是在Dockerfile中定義籍胯,但是在構(gòu)建鏡像的時(shí)候并不會(huì)被執(zhí)行鳄橘,只有在執(zhí)行docker run命令啟動(dòng)容器時(shí)才會(huì)起作用。

  • ENTRYPOINT 使用場(chǎng)景:
    docker run 啟動(dòng)容器時(shí)可以指定參數(shù)芒炼,指定的參數(shù)會(huì)作為entrypoint命令的參數(shù),而不會(huì)覆蓋啟動(dòng)命令术徊。

docker 常見命令

  • 從當(dāng)前目錄的dockerfile創(chuàng)建容器
    docker build -t tagName .

  • 指定dockerfile 創(chuàng)建容器
    docker build -f path .

  • 刪除全部容器
    docker rm $(docker ps -aq)

  • 刪除所有鏡像
    docker rmi $(docker images -q)

  • 停止運(yùn)行中的容器
    docker stop $(docker ps -q)

  • 啟動(dòng)一個(gè)bash終端,退出自動(dòng)刪除容器
    docker run --rm -it imageID /bin/bash

  • 當(dāng)利用 docker run 來(lái)創(chuàng)建容器時(shí)本刽,Docker 在后臺(tái)運(yùn)行的標(biāo)準(zhǔn)操作包括:
    檢查本地是否存在指定的鏡像,不存在就從公有倉(cāng)庫(kù)下載
    利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器,分配一個(gè)文件系統(tǒng),并在只讀的鏡像層外面掛載一層可讀寫層從宿主主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器中去
    從地址池配置一個(gè) ip 地址給容器,執(zhí)行用戶指定的應(yīng)用程序
    執(zhí)行完畢后容器被終止

  • 更多的時(shí)候子寓,需要讓 Docker 在后臺(tái)運(yùn)行而不是直接把執(zhí)行命令的結(jié)果輸出在當(dāng)前宿主機(jī)下暗挑。此時(shí),可以通過(guò)添加 -d 參數(shù)來(lái)實(shí)現(xiàn)

  • 啟動(dòng)已終止的容器
    docker container start

  • 進(jìn)入容器
    docker exec -it containerID bash
    如果從這個(gè) stdin 中 exit斜友,不會(huì)導(dǎo)致容器的停止炸裆。這就是為什么推薦大家使用 docker exec 的原因. 而不是attach

docker-compose 編排容器

docker compose 用于在單機(jī)上編排容器,便于管理多個(gè)容器鲜屏。

version: '3'
services:
   web:
    image: "ubuntu"
  debian:
    image: "debian"

上面例子是一個(gè)簡(jiǎn)單的compose.yml文件烹看,web和debian代表了連個(gè)容器,image代表鏡像洛史。
-docker-compose up -d 會(huì)在后臺(tái)創(chuàng)建容器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惯殊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子也殖,更是在濱河造成了極大的恐慌土思,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忆嗜,死亡現(xiàn)場(chǎng)離奇詭異己儒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)捆毫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門闪湾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人冻璃,你說(shuō)我怎么就攤上這事响谓。” “怎么了省艳?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵娘纷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我跋炕,道長(zhǎng)赖晶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任辐烂,我火速辦了婚禮遏插,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纠修。我一直安慰自己胳嘲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布扣草。 她就那樣靜靜地躺著了牛,像睡著了一般颜屠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鹰祸,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天甫窟,我揣著相機(jī)與錄音,去河邊找鬼蛙婴。 笑死粗井,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的街图。 我是一名探鬼主播浇衬,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼台夺!你這毒婦竟也來(lái)了径玖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤颤介,失蹤者是張志新(化名)和其女友劉穎梳星,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滚朵,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冤灾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辕近。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片韵吨。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖移宅,靈堂內(nèi)的尸體忽然破棺而出归粉,到底是詐尸還是另有隱情,我是刑警寧澤漏峰,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布糠悼,位于F島的核電站,受9級(jí)特大地震影響浅乔,放射性物質(zhì)發(fā)生泄漏倔喂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一靖苇、第九天 我趴在偏房一處隱蔽的房頂上張望席噩。 院中可真熱鬧,春花似錦贤壁、人聲如沸悼枢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)萧芙。三九已至给梅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間双揪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工包帚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渔期,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓渴邦,卻偏偏與公主長(zhǎng)得像疯趟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谋梭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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