Dockerfile 是一個文本格式的配置文件,用戶可以使用 Dockerfile 快速創(chuàng)建自定義的鏡像套耕。
基本結(jié)構(gòu)
Dockerfile 由一行行命令語句組成谁帕,并且支持以 # 開頭的注釋行。
Dockerfile 分為四部分:基礎(chǔ)鏡像信息冯袍、維護(hù)者信息匈挖、鏡像操作指令和容器啟動時執(zhí)行指令。
例如:
# This dockerfile user the ubuntu image
# VERSION 2 - EDITON 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..
# 第一行必須指定基于的基礎(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
指令
指令的一般格式為 INSTRUCTION arguments, 指令包括 FROM康愤、MAINTAINER儡循、RUN 等。
1.FROM
格式為 FROM <image> 或 FROM<image>:<tag>征冷。
例如: FROM ubuntu
2.MAINTAINER
格式為 MAINTAINER <name>择膝, 指定維護(hù)者維息。
例如:MAINTAINER docker_user docker_user@email.com
3.RUN
格式為 RUN <command> 或 RUN ["executable", "param1", "param2"]检激。
每條RUN 指令將在當(dāng)前鏡像基礎(chǔ)上執(zhí)行指定命令肴捉,交提交為新的鏡像。當(dāng)命令較長時可以使用 \ 來換行叔收。
4.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í)行芝薇。
如果用戶啟動容器時指定了運(yùn)行的命令,則會覆蓋掉 CMD 指定的命令作儿。
5.EXPOSE
格式為 EXPOSE <port> [<prot>...]
例如:
EXPOSE 22 80 8443
6.ENV
格式為 ENV <key> <value>洛二。指定一個環(huán)境變量,會被后續(xù) RUN 指令使用攻锰,并在容器運(yùn)行時保持晾嘶。例如:
ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgree-PG_VERSION.tar.xz | tar -xJC /usr/src/postgree && ...
ENV PATH /usr/local/postgree-$PG_MAJOR/bin:$PATH
7.ADD
格式為 ADD <src><dest>
該命令將復(fù)制指定的<src>到容器中的<dest>。其中<src>可以是Dockerfile 所在目錄的一個相對路徑(文件或目錄)娶吞;也可以是一個URL垒迂;還可以是一個 tar 文件(自動解壓為目錄)
8.COPY
格式為 COPY <src><dest>
復(fù)制本地主機(jī)的<src> 為容器中的<dest>。目標(biāo)路徑不存在時妒蛇,會自動創(chuàng)建机断。
當(dāng)使用本地目錄為源目錄時楷拳,推薦使用COPY
9 ENTRYPOINT
有兩種格式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2 (shell 中執(zhí)行)
配置容器啟動后執(zhí)行的命令,并且不可被 docker run 提供的參數(shù)覆蓋吏奸。
每個Dockerfile 中只能有一個 ENTRYPOINT, 當(dāng)指定多個 ENTRYPOINT 時欢揖,只有最后一個生效。
創(chuàng)建鏡像
編寫完成 Dockerfile 之后奋蔚,可以通過docker build 命令來創(chuàng)建鏡像她混。
要指定鏡像的標(biāo)簽信息,可以通過 -t 選項(xiàng)
例如泊碑,指定 Dockerfile 所在路徑為 /tmp/docker_builder/, 并且生成鏡像標(biāo)簽為 build_repo/first_images,可以使用下面的命令:
root@localhost:~# sudo docker build -t build_repo/first_image /tmp/docker_builder/
小結(jié)
本章主要介紹Dockerfile 配置文件的重要概念坤按,包括基本結(jié)構(gòu)、所支持的內(nèi)部指令蛾狗,以及使用它創(chuàng)建鏡像的基本過程晋涣。
DockerHub 和 DockerPool 社區(qū)都提供了大量的 Dockerfile 范例供大家參考。