Docker 學(xué)習(xí) - 7.使用Dockerfile創(chuàng)建鏡像

Dockerfile是一個文本格式的配置文件频鉴,用戶可以使用Dockerfile快速創(chuàng)建自定義鏡像。

基本結(jié)構(gòu)

Dockerfile主要分為四個部分:基礎(chǔ)鏡像信息庐椒、維護(hù)者信息宠漩、鏡像操作指令和容器啟動時執(zhí)行指令。

# 第一行指定基于的基礎(chǔ)鏡像
FROM ubuntu

# 維護(hù)者信息
MAINTAINER docker_user  docker_user@email.com

# 鏡像操作指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;"  >>   /etc/nginx/nginx.conf

# 容器啟動時執(zhí)行指令
CMD  /usr/sbin/nginx

舉個例子:
下面的是mysql的官方構(gòu)建Dockerfile.

#
# MySQL Dockerfile
#
# https://github.com/dockerfile/mysql
#

# Pull base image.
FROM dockerfile/ubuntu

# Install MySQL.
RUN \
  apt-get update && \
  DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server && \
  rm -rf /var/lib/apt/lists/* && \
  sed -i 's/^\(bind-address\s.*\)/# \1/' /etc/mysql/my.cnf && \
  sed -i 's/^\(log_error\s.*\)/# \1/' /etc/mysql/my.cnf && \
  echo "mysqld_safe &" > /tmp/config && \
  echo "mysqladmin --silent --wait=30 ping || exit 1" >> /tmp/config && \
  echo "mysql -e 'GRANT ALL PRIVILEGES ON *.* TO \"root\"@\"%\" WITH GRANT OPTION;'" >> /tmp/config && \
  bash /tmp/config && \
  rm -f /tmp/config

# Define mountable directories.
VOLUME ["/etc/mysql", "/var/lib/mysql"]

# Define working directory.
WORKDIR /data

# Define default command.
CMD ["mysqld_safe"]

# Expose ports.
EXPOSE 3306

指令

  • FROM
    格式為FROM <image>FROM<image>:<tag>
    第一條指令必須為FROM指令仗谆。

  • MAINTAINER
    格式為MAINTAINER<name>指巡,指定維護(hù)者信息

  • RUN
    格式為RUN<command>或RUN["executable","param1"隶垮,"param2"]藻雪。前者將在shell終端中運(yùn)行命令,即/bin/sh -c狸吞;后者使用exec執(zhí)行勉耀。

  • CMD
    支持三種格式:

CMD ["executable","param1","param2"] #使用exec執(zhí)行,推薦方式
CMD command param1 param2 #在/bin/sh 中執(zhí)行蹋偏,提供給需要交互的應(yīng)用
CMD ["param1","param2"] #提供給ENTRYPOINT的默認(rèn)參數(shù)

指定啟動容器的時候執(zhí)行的命令便斥,每個Dockerfile只能由一條CMD命令。如果制定了多條命令威始,只有最后一條會被執(zhí)行枢纠。

  • EXPOSE
    格式為EXPOSE <port> [<port>...]
    例如:
    EXPOSE 22 80 8443
    告訴Docker服務(wù)端容器暴露的端口號,供互聯(lián)系統(tǒng)使用黎棠。在啟動容器時需要通過-P晋渺,Docker主機(jī)會自動分配一個端口轉(zhuǎn)發(fā)到指定端口;使用-p脓斩,則可以具體指定哪個本地端口映射過來木西。

  • ENV
    格式為ENV <key> <value>。指定一個環(huán)境變量随静,會被后續(xù)RUN指令使用八千,并在容器運(yùn)行時保持。

ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz  |  tar -xJC  /usr/src/postgress &&
  • ADD
    格式為 ADD <src> <dest>
    該命令將復(fù)制指定的<src>到容器中的<dest>燎猛。其中<src>可以是Dockerfile所在目錄的一個相對路徑叼丑,也可以是一個URL,還可以是一個tar文件。

  • COPY
    格式為 COPY <src> <dest>
    復(fù)制本地主機(jī)的<src>(為Dockerfile所在目錄的相對路徑扛门,文件或目錄)為容器中的<dest>。目標(biāo)路徑不存在的時候會自動創(chuàng)建纵寝。
    當(dāng)使用本地目錄作為源目錄時论寨,推薦使用COPY星立。

  • ENTRYPOINT
    有兩種方式:

ENTRYPOINT  ["executable","param1"葬凳,"param2"]
ENTRYPOINT  command param1 param2

每個Dockerfile中只能存在一個ENTRYPOINT绰垂,當(dāng)指定多個ENTRYPOINT時,只有最后一個生效火焰。

  • VOLUME
    格式為VOLUME ["/data"]
    創(chuàng)建一個可以從本地主機(jī)或者容器掛載的掛載點劲装,一般用來存放數(shù)據(jù)庫和需要保持的數(shù)據(jù)。

  • USER
    格式為USER daemon
    指定運(yùn)行容器時的用戶名或者UID昌简,后續(xù)的RUN也會使用指定用戶占业。

  • WORKDIR
    格式為 WORKDIR /path/to/workdir
    為后續(xù)的RUN、CMD纯赎、ENTRYPOINT等指令配置工作目錄谦疾。

  • ONBUILD
    格式為ONBUILD [INSTRUCTION]
    配置當(dāng)前所創(chuàng)建的鏡像作為其他新創(chuàng)建鏡像的基礎(chǔ)鏡像時所執(zhí)行的操作命令。例如犬金,Dockerfile使用如下內(nèi)容創(chuàng)建鏡像image-A

[...]
ONBUILD  ADD  .  /app/src
ONBUILD  RUN  /usr/local/bin/python-build  --dir  /app/src
[...]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末念恍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晚顷,更是在濱河造成了極大的恐慌峰伙,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件该默,死亡現(xiàn)場離奇詭異瞳氓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)权均,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門顿膨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叽赊,你說我怎么就攤上這事恋沃。” “怎么了必指?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵囊咏,是天一觀的道長。 經(jīng)常有香客問我塔橡,道長梅割,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任葛家,我火速辦了婚禮户辞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘癞谒。我一直安慰自己底燎,他們只是感情好刃榨,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著双仍,像睡著了一般枢希。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朱沃,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天苞轿,我揣著相機(jī)與錄音,去河邊找鬼逗物。 笑死搬卒,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的敬察。 我是一名探鬼主播秀睛,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼莲祸!你這毒婦竟也來了蹂安?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤锐帜,失蹤者是張志新(化名)和其女友劉穎田盈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缴阎,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡允瞧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛮拔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片述暂。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖建炫,靈堂內(nèi)的尸體忽然破棺而出畦韭,到底是詐尸還是另有隱情,我是刑警寧澤肛跌,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布艺配,位于F島的核電站,受9級特大地震影響衍慎,放射性物質(zhì)發(fā)生泄漏转唉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一稳捆、第九天 我趴在偏房一處隱蔽的房頂上張望赠法。 院中可真熱鬧,春花似錦乔夯、人聲如沸砖织。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽镶苞。三九已至,卻和暖如春鞠评,著一層夾襖步出監(jiān)牢的瞬間茂蚓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工剃幌, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留聋涨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓负乡,卻偏偏與公主長得像牍白,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子抖棘,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

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