本文章來自【知識(shí)林】
使用Dockerfile來創(chuàng)建Docker鏡像時(shí)需要用到一些指令,如:FROM、RUN、MAINTAINER、WORKDIR、ADD、CMD、ENTRYPOINT、ENV、EXPOSE等等,上面列舉的指令都是比較常用的,需要注意的是這些指令都必須是大寫且放在行的開頭。
FROM:指定基礎(chǔ)鏡像,一般我們?cè)趧?chuàng)建鏡像是都是以另一個(gè)鏡像為基礎(chǔ),就需要用FROM來指定,FROM一般放在Dockerfile的文件頭,如:FROM java:8;
MAINTAINER:指定創(chuàng)建鏡像的作者,如:MAINTAINER zslin.com "393156105@qq.com";
RUN:執(zhí)行命令,如:RUN mkdir -p /web/(創(chuàng)建一個(gè)名為web的文件夾);
WORKDIR:指定當(dāng)前工作目錄,如:WORKDIR /web(設(shè)置當(dāng)前工作目錄為web,可以通過RUN pwd查看);
ADD:添加文件(夾),如:ADD zslin-1.0.jar /app.jar(復(fù)制并重命名);
CMD:執(zhí)行命令,如:CMD ["ls", "-l"](列表);
ENTRYPOINT:執(zhí)行命令,如:ENTRYPOINT ["bin/catalina.sh", "run"](啟動(dòng)tomcat);
ENV:配置環(huán)境變量,如:ENV CATALINA_HOME /web/tomcat8(配置tomcat目錄);
EXPOSE:指定端口,如:EXPOSE 8080。
從上面的描述可以看出:RUN、CMD、ENTRYPOINT三者都是用于執(zhí)行命令,那么這三者之間有何異同呢:
相同之處:三者都是用來運(yùn)行指令的;
RUN:是在構(gòu)建鏡像是執(zhí)行的,在Dockerfile中可以有多條,即使用docker build時(shí)執(zhí)行;
RUN的示例:
RUN cd /web/
RUN rm -rf *.*
說明:在鏡像構(gòu)建時(shí)進(jìn)入到/web/目錄,再刪除該目錄下的所有文件(相應(yīng)命令直接跟在其后)。
CMD和ENTRYPOINT則是在容器運(yùn)行是執(zhí)行,在Dockerfile中只能有一條,如果多條只生效最后一條,即使用docker run時(shí)執(zhí)行;
CMD:可以在容器運(yùn)行時(shí)(即docker run)加參數(shù)覆蓋;
CMD的示例:
CMD ["rm", "-rf", "*.*"]
說明:CMD后面的命令如果沒有任何參數(shù)可以直接跟上(如:RUN ls),但如果有參數(shù)就不能直接跟上,須要以數(shù)組形式出現(xiàn);
ENTRYPOINT:在容器運(yùn)行時(shí)(即docker run)不可以被覆蓋。
本文章來自【知識(shí)林】