使用Dockerfile定制鏡像流程筆記

Dockerfile定制鏡像

1. 創(chuàng)建文件夾,并在文件夾里創(chuàng)建名為Dockerfile 的文件
2. 在Dockerfile里寫構(gòu)建鏡像的語句
關(guān)鍵字 作用
FROM 指定基礎(chǔ)鏡像
MAINTAINER 維護(hù)者的信息
RUN 執(zhí)行什么命令
EXPOSE 聲明容器對(duì)外服務(wù)的端口
WORKDIR 指定工作目錄
ENV 配置環(huán)境變量
ADD 將文件拷貝到鏡像中并解壓
COPY 將文件拷貝到鏡像中
VOLUME 配置數(shù)據(jù)卷
CMD 容器啟動(dòng)時(shí)候執(zhí)行的命令
ENTRYPOINT 容器啟動(dòng)時(shí)候執(zhí)行的命令

編寫Dockerfile文件注意點(diǎn)

FROM ubuntu:18.04                        #指定基礎(chǔ)鏡像,這一句必須要有
MAINTAINER  Evan_Tang@admin.com          #維護(hù)者信息(可以不寫)
RUN apt-get install -y vim               #執(zhí)行 apt-get install -y vim 命令,安裝vim
RUN apt-get install -y net-tools         #執(zhí)行 apt-get install -y net-tools, 安裝net-tools工具
WORKDIR /dev/                            #啟動(dòng)容器后,如果啟動(dòng)交互模式,直接進(jìn)入到哪個(gè)目錄
CMD ["/bin/bash"]                        #啟動(dòng)容器的時(shí)候,進(jìn)入到/bin/bash這種命令行
  • FROM 表示指定基礎(chǔ)鏡像 >如果沒有基于鏡像則用scratch表示

  • RUN 表示運(yùn)行命令 可以使用shell格式或者使用exec格式

    • shell格式:RUN 后面直接接命令。
    • exec 格式:RUN ["可執(zhí)行文件", "參數(shù)1", "參數(shù)2"]
  • COPY 原路徑 目標(biāo)路徑 將上下文的路徑的文件復(fù)制一份到新鏡像的目標(biāo)路徑

  • ADD 和COPY基本一樣 如果拷貝壓縮文件 ADD命令會(huì)進(jìn)行解壓(會(huì)令構(gòu)建鏡像緩存失效不推薦使用,盡可能使用COPY)

  • CMD和ENTRYPOINT 都用是啟動(dòng)命令都只能有一個(gè)生效,最后出現(xiàn)的生效,
    如果同一個(gè)Dockerfile文件同時(shí)出現(xiàn)CMD和ENTRYPOINT,CMD在前ENTRYPOINT在后 CMD無效,如果ENTRYPOINT在前CMD在后,CMD可能無效而被當(dāng)作ENTRYPOINT的參數(shù)

FROM ubuntu:18.04                      
MAINTAINER  Evan_Tang@admin.com  
RUN mkdir -p /datas/ 
ENTRYPOINT ["echo", "hello"]
CMD ["world"]                           #會(huì)將world作為echo hello的參數(shù),最后的命令其實(shí)為echo hello world 
  • ubuntu鏡像默認(rèn)的CMD是/bin/bash,如果我們直接docker run -it ubuntu的話,會(huì)直接進(jìn)入bash,可以在運(yùn)行時(shí)用cat 路徑/文件名指定運(yùn)行別的命令

  • ENV用于設(shè)置環(huán)境變量 ENV <key> <value>

  • VOLUME用于設(shè)置數(shù)據(jù)卷 VOLUME <路徑>

  • EXPOSE 聲明提供服務(wù)的端口并不會(huì)開啟這個(gè)端口 EXPOSE <端口1>

  • WORKDIR 用于指定工作目錄,如果目錄不存在會(huì)建立目錄

  • Dockerfile中的每一個(gè)指令都會(huì)建立一層,所以在編寫RUN >時(shí)我們需要考慮進(jìn)行RUN合并減少RUN的條數(shù)

  • \ 表示換行 && 用于連接兩條語句

  • 每層構(gòu)建后需要清理掉無用的東西,減少構(gòu)建的鏡像體積

  • 寫完后使用 :wq 退出保存

3. 在有Dockerfile的文件目錄下執(zhí)行 docker build -t 鏡像名:鏡像標(biāo)簽 .(有個(gè)空格點(diǎn)別忘了)

構(gòu)建命令中最后一個(gè)點(diǎn) 表示當(dāng)前目錄,指定上下文的路徑,構(gòu)建鏡像時(shí)并不是在本地構(gòu)建的,而是在服務(wù)端,也就是 Docker 引擎中構(gòu)建的,執(zhí)行構(gòu)建命令時(shí)會(huì)將上下文路徑下的內(nèi)容打包發(fā)送到服務(wù)端執(zhí)行構(gòu)建

4. 構(gòu)建成功后可以使用 docker images 查看鏡像 使用docker image rm <鏡像>(可以是鏡像短 ID、鏡像長 ID、鏡像名或者鏡像摘要)刪除鏡像
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容