ADD
ADD命令有兩個(gè)參數(shù),源和目標(biāo)。它的基本作用是從源系統(tǒng)的文件系統(tǒng)上復(fù)制文件到目標(biāo)容器的文件系統(tǒng)。如果源是一個(gè)URL,那該URL的內(nèi)容將被下載并復(fù)制到容器中。
COPY
格式為:COPY
復(fù)制本地主機(jī)的 (為 Dockerfile 所在目錄的相對(duì)路徑,文件或目錄) 為容器中的 。目標(biāo)路徑不存在時(shí),會(huì)自動(dòng)創(chuàng)建。當(dāng)使用本地目錄為源目錄時(shí),推薦使用 COPY。
RUN
RUN命令是Dockerfile執(zhí)行命令的核心部分。它接受命令作為參數(shù)并用于創(chuàng)建鏡像。不像CMD命令,RUN命令用于創(chuàng)建鏡像(在之前commit的層之上形成新的層)。有兩種方式:
1)RUN ? 例如:RUN sh -c 'source $HOME/.bashrc ; echo $HOME'
2)RUN ["executable", "param1", "param2"]? 例如:
一個(gè)Dockerfile中可以有多個(gè)RUN命令
CMD
和RUN命令相似,CMD可以用于執(zhí)行特定的命令。和RUN不同的是,這些命令不是在鏡像構(gòu)建的過(guò)程中執(zhí)行的,而是在Container啟動(dòng)時(shí)執(zhí)行的命令,一個(gè)Dockerfile中只能有一條CMD命令,多條則只執(zhí)行最后一條CMD。
3種執(zhí)行格式:
- `CMD ["executable","param1","param2"]` ,`exec`格式,推薦使用這種格式。例如:CMD ["java", "-jar", "spring-boot-maven-docker.jar"]
- `CMD ["param1","param2"]`,作為`ENTRYPOINT`的默認(rèn)參數(shù)。
- `CMD command param1 param2`,`shell`格式。
ENTRYPOINT
有兩種格式:
ENTRYPOINT [“executable”, “param1”, “param2”]
ENTRYPOINT command param1 param2 (shell 中執(zhí)行)
配置容器啟動(dòng)后執(zhí)行的命令,并且不會(huì)被 docker run 提供的參數(shù)覆蓋。而CMD則會(huì)
每個(gè) Dockerfile 中只能有一個(gè) ENTRYPOINT,當(dāng)指定多個(gè) ENTRYPOINT 時(shí),只有最后一個(gè)生效。例如:
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /userApp.jar" ]
ENV
ENV命令用于設(shè)置環(huán)境變量。這些變量以”key=value”的形式存在,會(huì)被后續(xù) RUN 指令使用,并在容器運(yùn)行時(shí)保持。
EXPOSE
EXPOSE用來(lái)指定端口,使容器內(nèi)的應(yīng)用可以通過(guò)端口和外界交互。
FROM
FROM命令可能是最重要的Dockerfile命令。該命令定義了使用哪個(gè)基礎(chǔ)鏡像啟動(dòng)構(gòu)建流程?;A(chǔ)鏡像可以為任意鏡像。如果基礎(chǔ)鏡像沒有被發(fā)現(xiàn),Docker將試圖從Docker image index來(lái)查找該鏡像。FROM命令必須是Dockerfile的首個(gè)命令。
MAINTAINER
建議這個(gè)命令放在Dockerfile的起始部分,雖然理論上它可以放置于Dockerfile的任意位置。這個(gè)命令用于聲明作者,并應(yīng)該放在FROM的后面。
LABEL
key=value,可以多個(gè)。
USER
使用哪個(gè)用戶跑container。
VOLUME
可以將本地文件夾或者其他container的文件夾掛載到container中,用于讓你的容器訪問宿主機(jī)上的目錄。
WORKDIR
切換目錄用,可以多次切換(相當(dāng)于cd命令),對(duì)RUN,CMD,ENTRYPOINT生效。
【實(shí)例】
FROM node
RUN mkdir -p /home/nodejs/user ? //在鏡像中創(chuàng)建目錄
WORKDIR /home/nodejs/user //cd到鏡像中的目錄
COPY . /home/nodejs/user //拷貝本機(jī)中當(dāng)前目錄內(nèi)容到鏡像中目錄
RUN npm config set registry https://registry.npm.taobao.org? //設(shè)置鏡像中npm registry
RUN npm info underscore
RUN npm install? //鏡像中執(zhí)行npm install
RUN npm run build? //鏡像中執(zhí)行編譯
ENV NODE_EVN production? //設(shè)置鏡像中環(huán)境變量
ENV USER_ENV test
ENV USER_PORT 3200
ENV SVR_USER_API_BASE_URL http://test.user.com:8080
EXPOSE 3200
CMD ["npm", "start"]