DockerFile構(gòu)建過程
DockerFile 是Docker的一個(gè)配置文件,本質(zhì)上來說它只是一個(gè)文本文件,它是用來構(gòu)建Docker鏡像的。DockerFile配置文件中包含了一系列的指令和配置信息,用于描述如何構(gòu)建鏡像以及如何運(yùn)行容器。通過編寫 Dockerfile,我們可以將構(gòu)建 Docker 鏡像的過程自動(dòng)化,實(shí)現(xiàn)應(yīng)用程序的快速部署和迭代。
?? 一個(gè)簡(jiǎn)單的DockerFile文件示例:
?這個(gè)DockerFile文件的釋義為:該鏡像會(huì)在 centos7.2-python3.6.8:latest 基礎(chǔ)鏡像上安裝 nginx,并設(shè)置語言環(huán)境為 zh_CN.UTF-8。在容器啟動(dòng)后,會(huì)自動(dòng)執(zhí)行 sh /home/export/App/bin/start.sh 命令啟動(dòng)應(yīng)用,并通過 sleep 9999999d 命令使容器保持運(yùn)行狀態(tài)。
此外,該鏡像還聲明需要監(jiān)聽的端口為 80 和 8080,供外部訪問使用。
# 1.需要使用的基礎(chǔ)鏡像
FROM centos7.2-python3.6.8:latest
# 2.設(shè)置語言
ENV LANG zh_CN.UTF-8
# 4.安裝nginx鏡像
RUN yum -y install nginx
# 5.應(yīng)用鏡像開放端口,本應(yīng)用使用了nginx做反向代理,所以只需要開放80端口即可
EXPOSE 80
# 6.應(yīng)用鏡像部署完成后會(huì)執(zhí)行如下命令啟動(dòng)應(yīng)用
ENTRYPOINT sh /home/export/App/bin/start.sh && sleep 9999999d
?? 構(gòu)建鏡像
DockerFile文件準(zhǔn)備完畢后,就可以通過 docker build 命令來構(gòu)建鏡像了。
docker build -f Dockerfile .
這里有幾點(diǎn)注意事項(xiàng):
-
docker build 默認(rèn)會(huì)在當(dāng)前目錄下尋找名為 Dockerfile的文件,我們也可以通過 .f 參數(shù)來指定Dockerfile的文件路徑和名稱。
docker build -f <Dockerfile path/name> <build context>
-
docker build 命令最后有一個(gè)
.
表示的鏡像構(gòu)建上下文 Context 的路徑(文件路徑),Context的概念不難理解,在Docker的基本架構(gòu)一文中我們知道Docker 是典型的C/S架構(gòu)模式,那docker build命令就是把上下文所在路徑下的內(nèi)容打包,并傳遞給Docker 引擎,Docker 引擎拿到上下文包后,就能夠獲得構(gòu)建鏡像所需要的文件。 -
排除不必要的文件,加快構(gòu)建速度。在上下文目錄里再建立 .dockerignore 文件,排除那些不需要的文件。
DockerFile 的常用指令
?? FROM
FROM 指令用于指定一個(gè)基礎(chǔ)鏡像,它就像“地基” 一樣,是DockerFile文件的基礎(chǔ),所有的DockerFile文件都由FROM指令開始,那Dockerfile其實(shí)就是在基礎(chǔ)鏡像的基礎(chǔ)上進(jìn)行定制的。
在實(shí)際使用中 FROM 指令通常是指定centos、python/java等基礎(chǔ)環(huán)境鏡像。
# 需要使用的基礎(chǔ)鏡像
FROM centos7.2-python3.6.8:latest
?? ENV
ENV 指令用于設(shè)置環(huán)境變量,它可以在構(gòu)建過程中設(shè)置容器中的環(huán)境變量,這些環(huán)境變量可以在容器啟動(dòng)時(shí)使用。
語法格式為:
ENV <key> <value>
ENV <key>=<value>
<key>
表示環(huán)境變量的名稱,<value>
表示環(huán)境變量的值。多個(gè) ENV 指令可以連續(xù)使用,也可以在同一條指令中使用空格或等號(hào)分隔多個(gè)環(huán)境變量。
在 Dockerfile 中使用 ENV 指令可以幫助我們?cè)跇?gòu)建過程中設(shè)置一些常用的環(huán)境變量,例如 PATH、LANG 等。同時(shí),在容器啟動(dòng)時(shí),我們可以通過 $<key>
的方式來獲取環(huán)境變量的值。
# 設(shè)置語言
ENV LANG zh_CN.UTF-8
?? RUN
RUN
指令用于在容器中執(zhí)行Shell
命令或腳本,比如更新系統(tǒng)、安裝應(yīng)用、下載文件等等。
語法格式有如下2種
RUN <command>
RUN ["executable", "param1", "param2"]
<command>
表示要執(zhí)行的命令或腳本,它可以是 shell 命令或任何可執(zhí)行文件;["executable", "param1", "param2"]
表示一個(gè)數(shù)組,數(shù)組的第一個(gè)元素為要執(zhí)行的可執(zhí)行文件,后面的元素為參數(shù)。
例如:
RUN yum -y install nginx
RUN ["/bin/bash", "-c", "echo 'Hello, Docker!'"]
第一條命令將在容器中安裝 nginx 軟件包;第二條命令將在容器中執(zhí)行 /bin/bash -c “echo ‘Hello, Docker!’” 命令,輸出 “Hello, Docker!”。
RUN 指令的一些注意事項(xiàng):
-
容器中的命令執(zhí)行順序是從上到下,建議將常用的命令放在前面,以減少構(gòu)建時(shí)間。
-
如果需要在容器中執(zhí)行多個(gè)命令或腳本,可以使用 \ 符號(hào)將它們連接在一起,以便于閱讀和維護(hù)。命令之間用 && 來連接。
FROM centos7.2-python3.6.8:latest RUN apt-get update \ && apt-get install -y \ git \ curl \ wget
-
每一條 RUN 指令都會(huì)在新的一層鏡像中執(zhí)行,因此我們應(yīng)該盡可能將多個(gè)命令合并為一條 RUN 指令,以減少鏡像的層數(shù)。
例如,將上面的兩條命令合并為一條:
RUN yum -y install nginx && /bin/bash -c "echo 'Hello, Docker!'"
?? EXPOSE
EXPOSE 指令用于聲明容器需要監(jiān)聽的網(wǎng)絡(luò)端口。在 Dockerfile 中使用 EXPOSE 指令可以幫助我們記錄容器需要監(jiān)聽的端口信息,并提供給其他開發(fā)人員或運(yùn)維人員使用。同時(shí),它也可以幫助我們規(guī)范化容器的端口定義,以便于管理和維護(hù)。
語法格式為:
EXPOSE <port> [<port>/<protocol>...]
<port>
表示需要監(jiān)聽的端口號(hào),<protocol>
表示使用的協(xié)議,可以是 tcp 或 udp。
例如:
# 應(yīng)用鏡像開放端口,本應(yīng)用使用了nginx做反向代理,所以只需要開放80端口即可
EXPOSE 80/tcp
這個(gè)命令將聲明容器需要監(jiān)聽的端口分別為 80 ,使用的協(xié)議為 tcp 。
但是,EXPOSE
指令并不會(huì)實(shí)際將容器的端口暴露給主機(jī)或外部網(wǎng)絡(luò),如果需要將容器的端口映射到主機(jī)上,需要在運(yùn)行容器時(shí)使用 -p
參數(shù)。
?? ENTRYPOINT
ENTRYPOINT 指令用于配置容器的入口點(diǎn),即容器啟動(dòng)后需要執(zhí)行的命令或腳本。我們通常會(huì)應(yīng)用其來啟動(dòng)WEB應(yīng)用。
語法格式為:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
例如:通過 ENTRYPOINT
指定應(yīng)用鏡像部署完成后會(huì)執(zhí)行命令啟動(dòng)應(yīng)用。
# 應(yīng)用鏡像部署完成后會(huì)執(zhí)行如下命令啟動(dòng)應(yīng)用
ENTRYPOINT sh /home/export/App/bin/start.sh && sleep 9999999d
?? 如果喜歡這篇文章,點(diǎn)贊?? 收藏? 關(guān)注 ? 哦,創(chuàng)作不易,感謝!??文章來源:http://www.zghlxwxcb.cn/news/detail-502353.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-502353.html
到了這里,關(guān)于【云原生丶Docker】DockerFile完全指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!