信譽比較好的商家可做網(wǎng)站蘇州seo優(yōu)化
Dockerfile制作鏡像
Dockerfile介紹
dockerfile 是一個用來構(gòu)建鏡像的文本文件,文本內(nèi)容包含了一條條構(gòu)建鏡像所需的指令和說明。
dockerfile僅僅是用來制作鏡像的源碼文件,是構(gòu)建容器過程中的指令,docker能夠讀取dockerfile的指定進行自動構(gòu)建容器,基于dockerfile制作鏡像,每一個指令都會創(chuàng)建一個鏡像層,即鏡像都是多層疊加而成,因此,層越多,效率越低,創(chuàng)建鏡像,層越少越好。因此能在一個指令完成的動作盡量通過一個指令定義。
使用docker build命令,用戶可以創(chuàng)建基于基礎(chǔ)鏡像的自定義鏡像。
Dockerfile指令
FROM
指定基礎(chǔ)鏡像,Dockerfile的第一條命令
格式:
FROM
FROM :
若使用第一種格式,則基礎(chǔ)鏡像的tag為latest
MAINTAINER
鏡像維護者信息
格式:
MAINTAINER
RUN
構(gòu)建鏡像時在鏡像中運行的shell命令
格式:
RUN
RUN [“executable”, “param1”, “param2”]
第一種格式(shell形式)默認使用/bin/sh -c 執(zhí)行命令,推薦使用第一種格式
第二種格式(exec形式)使用exec執(zhí)行命令
若想使用其他shell類型執(zhí)行命令,請使用第二種格式即 RUN [“/bin/bash”,“-c”,“command”]
多條RUN命令可以合并,如:
RUN command1
&& command2
&& command3
ENV
設(shè)置鏡像的環(huán)境變量
格式:
ENV
ENV = …
第一種格式一次只能設(shè)置一個環(huán)境變量
第二種可以設(shè)置多個環(huán)境變量,若需換行使用反斜杠()
EXPOSE
設(shè)置啟動鏡像時要暴露的端口,用于與外界交互
格式:
EXPOSE […]
VOLUME
申明容器掛載點
格式:
VOLUME [“/path1/to/dir1”,“/path2/to/dir2”]
USER
指定啟動鏡像時運行用戶
格式:
USER [:]
USER [:]
使用用戶之前請確保鏡像中有該用戶,創(chuàng)建用戶可以 RUN groupadd -r 用戶 && useradd -u uid -r -g 用戶組 用戶
使用USER指定用戶后,通過docker run運行容器時,可以通過-u參數(shù)來覆蓋所指定的用戶
WORKDIR
設(shè)置進入容器的默認目錄
格式:
WORKDIR </path/to/workdir>
ADD
拷貝本地文件或目錄到鏡像中
格式:
ADD
ADD [“”, “”] 用于支持包含空格的路徑
src是Dockerfile文件所在的同一級目錄或者同級目錄的子目錄路徑
tar類型的文件會自動解壓到dest目錄下
注意:
1.src是個文件,且dest以 / 結(jié)尾, 則docker會把dest當(dāng)作目錄,會把src文件拷貝到dest目錄下。
如果dest不存在,則會自動創(chuàng)建
2.src是個文件,且dest不以 / 結(jié)尾,則docker會把dest當(dāng)作文件,會把dest文件替換為src文件。
如果dest不存在,則創(chuàng)建名為src的文件
3.src是個目錄,且dest不存在,則docker會自動以dest創(chuàng)建一個目錄,把src目錄下的文件拷貝進來。
如果dest是個已經(jīng)存在的目錄,則docker會把src目錄下的文件拷貝到dest下
COPY
拷貝本地文件或目錄到鏡像中
格式:
COPY
與ADD功能相似,但是不能解壓tar類型的文件
CMD
啟動容器時執(zhí)行的shell命令
格式:
CMD [“executable”,“param1”,“param2”] (exec形式執(zhí)行可執(zhí)行文件,優(yōu)先)
CMD command param1 param2 (shell形式執(zhí)行命令)
Dockerfile中只能有一條CMD命令,如果指定多條,只有最后一條生效,推薦使用第一種格式
第二種格式默認使用/bin/sh -c 執(zhí)行命令
若要改變shell類型,請使用第一種格式即 CMD [“/bin/bash”,“-c”,“command”,“param1”,“param2”]
CMD會被docker run命令行指定的參數(shù)所覆蓋
ENTRYPOINT
啟動容器時執(zhí)行的shell命令
格式:
ENTRYPOINT [“executable”,“param1”,“param2”] (exec形式執(zhí)行可執(zhí)行文件,優(yōu)先)
ENTRYPOINT command param1 param2 (shell形式執(zhí)行命令)
第二種格式默認使用/bin/sh -c 執(zhí)行命令
Dockerfile文件中也可以存在多個ENTRYPOINT指令,但僅有最后一個會生效
同CMD類似,但是不會被docker run命令行指定的參數(shù)所覆蓋,可以被docker run --entrypoint 覆蓋
若Dockerfile中既有CMD(通常位置會在ENTRYPOINT之后)又有ENTRYPOINT,則CMD會被當(dāng)做參數(shù)傳遞給ENTRYPOINT
ARG
構(gòu)建鏡像時,指定變量
格式:
ARG
ARG =
第一種格式:變量值可以在docker build --build-arg name=value時指定
制作鏡像
制作鏡像的基礎(chǔ)命令:
Dockerfile在當(dāng)前目錄下:
docker build -t 鏡像名:tag .
Dockerfile不在當(dāng)前目錄下(-f 指定Dockerfile文件路徑,xxx/為構(gòu)建docker鏡像時的上下文路徑,即該目錄下的文件可以在Dockerfile中COPY/ADD):
docker build -t 鏡像名:tag -f xx/Dockerfile xxx/