下面列出了 Dockerfile 中最常用的指令,完整列表和說明可參看官方文檔。
FROM
指定 base 鏡像悟泵。
MAINTAINER
設(shè)置鏡像的作者,可以是任意字符串闪水。
COPY
將文件從 build context 復(fù)制到鏡像糕非。
COPY 支持兩種形式:
COPY src dest
COPY ["src", "dest"]
注意:src 只能指定 build context 中的文件或目錄。
ADD
與 COPY 類似,從 build context 復(fù)制文件到鏡像朽肥。不同的是禁筏,如果 src 是歸檔文件(tar, zip, tgz, xz 等),文件會(huì)被自動(dòng)解壓到 dest衡招。
ENV
設(shè)置環(huán)境變量篱昔,環(huán)境變量可被后面的指令使用。例如:
...
ENV MY_VERSION 1.3
RUN apt-get install -y mypackage=$MY_VERSION
...
EXPOSE
指定容器中的進(jìn)程會(huì)監(jiān)聽某個(gè)端口始腾,Docker 可以將該端口暴露出來州刽。我們會(huì)在容器網(wǎng)絡(luò)部分詳細(xì)討論。
VOLUME
將文件或目錄聲明為 volume浪箭。我們會(huì)在容器存儲(chǔ)部分詳細(xì)討論穗椅。
WORKDIR
為后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令設(shè)置鏡像中的當(dāng)前工作目錄。
RUN
在容器中運(yùn)行指定的命令奶栖。
CMD
容器啟動(dòng)時(shí)運(yùn)行指定的命令匹表。
Dockerfile 中可以有多個(gè) CMD 指令,但只有最后一個(gè)生效宣鄙。CMD 可以被 docker run?之后的參數(shù)替換袍镀。
ENTRYPOINT
設(shè)置容器啟動(dòng)時(shí)運(yùn)行的命令。
Dockerfile 中可以有多個(gè) ENTRYPOINT 指令框冀,但只有最后一個(gè)生效流椒。CMD 或 docker run?之后的參數(shù)會(huì)被當(dāng)做參數(shù)傳遞給 ENTRYPOINT。
下面我們來看一個(gè)較為全面的 Dockerfile:
注:Dockerfile 支持以“#”開頭的注釋明也。
構(gòu)建鏡像:
① 構(gòu)建前確保 build context 中存在需要的文件宣虾。
② 依次執(zhí)行 Dockerfile 指令,完成構(gòu)建温数。
運(yùn)行容器绣硝,驗(yàn)證鏡像內(nèi)容:
① 進(jìn)入容器,當(dāng)前目錄即為 WORKDIR撑刺。
如果 WORKDIR 不存在鹉胖,Docker 會(huì)自動(dòng)為我們創(chuàng)建。
② WORKDIR 中保存了我們希望的文件和目錄:
目錄 bunch:由 ADD 指令從 build context 復(fù)制的歸檔文件 bunch.tar.gz够傍,已經(jīng)自動(dòng)解壓甫菠。
文件 tmpfile1:由 RUN 指令創(chuàng)建。
文件 tmpfile2:由 COPY 指令從 build context 復(fù)制冕屯。
③ ENV 指令定義的環(huán)境變量已經(jīng)生效寂诱。