最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Docker學(xué)習(xí)路線7:構(gòu)建容器鏡像

2023-07-18 20:08 作者:小萬(wàn)哥丶  | 我要投稿

容器鏡像是可執(zhí)行的軟件包,包括運(yùn)行應(yīng)用程序所需的所有內(nèi)容:代碼、運(yùn)行時(shí)、系統(tǒng)工具、庫(kù)和設(shè)置。通過(guò)構(gòu)建自定義鏡像,您可以在任何支持Docker的平臺(tái)上無(wú)縫地部署應(yīng)用程序及其所有依賴項(xiàng)。

Dockerfile

構(gòu)建容器鏡像的關(guān)鍵組件是 **Dockerfile**。它本質(zhì)上是一個(gè)包含有關(guān)如何組裝 Docker 鏡像的說(shuō)明的腳本。Dockerfile 中的每個(gè)指令都會(huì)在鏡像中創(chuàng)建一個(gè)新層,從而更容易跟蹤更改并最小化鏡像大小。以下是 Dockerfile 的簡(jiǎn)單示例:

#?Use?an?official?Python?runtime?as?a?parent?image
FROM?python:3.7-slim

#?Set?the?working?directory?to?/app
WORKDIR?/app

#?Copy?the?current?directory?contents?into?the?container?at?/app
COPY?.?/app

#?Install?any?needed?packages?specified?in?requirements.txt
RUN?pip?install?--trusted-host?pypi.python.org?-r?requirements.txt

#?Make?port?80?available?to?the?world?outside?this?container
EXPOSE?80

#?Define?environment?variable
ENV?NAME?World

#?Run?app.py?when?the?container?launches
CMD?["python",?"app.py"]

構(gòu)建鏡像

創(chuàng)建 Dockerfile 后,您可以使用?docker build?命令構(gòu)建鏡像。在包含 Dockerfile 的目錄中的終端中執(zhí)行以下命令:

docker?build?-t?your-image-name?.

此命令告訴 Docker 使用當(dāng)前目錄中的 Dockerfile(**.)構(gòu)建鏡像,并為其指定名稱(-t your-image-name**)。

檢查鏡像和層

成功構(gòu)建后,您可以使用?docker image?命令檢查創(chuàng)建的鏡像:

docker?image?ls

要更仔細(xì)地查看鏡像的各個(gè)層,請(qǐng)使用?docker history?命令:

docker?history?your-image-name

要查看鏡像的層,也可以使用?docker inspect?命令:

docker?inspect?your-image-name

要?jiǎng)h除鏡像,請(qǐng)使用?docker image rm?命令:

docker?image?rm?your-image-name

將鏡像推送到注冊(cè)表

構(gòu)建鏡像后,您可以將其推送到容器注冊(cè)表(例如Docker Hub、Google Container Registry等),以輕松分發(fā)和部署應(yīng)用程序。首先使用您的憑據(jù)登錄注冊(cè)表:

docker?login

然后,使用注冊(cè)表 URL 標(biāo)記您的鏡像:

docker?tag?your-image-name?username/repository:tag

最后,將已標(biāo)記的鏡像推送到注冊(cè)表:

docker?push?username/repository:tag

構(gòu)建容器鏡像是使用 Docker 的重要方面,它使您可以輕松打包和部署應(yīng)用程序。通過(guò)創(chuàng)建具有精確指令的 Dockerfile,您可以輕松地構(gòu)建和分發(fā)各種平臺(tái)的鏡像。

高效的層緩存

在構(gòu)建容器鏡像時(shí),Docker會(huì)緩存新創(chuàng)建的層。這些層可以在構(gòu)建其他鏡像時(shí)重復(fù)使用,減少構(gòu)建時(shí)間并最小化帶寬使用。但是,要充分利用這種緩存機(jī)制,您需要了解如何有效地使用層緩存。

Docker層緩存的工作原理

Docker為Dockerfile中的每個(gè)指令(例如**RUN、COPYADD**等)創(chuàng)建一個(gè)新層。如果指令自上次構(gòu)建以來(lái)沒(méi)有更改,Docker將重用現(xiàn)有的層。

例如,考慮以下Dockerfile:

FROM?node:14WORKDIR?/appCOPY?package.json?/app/RUN?npm?installCOPY?.?/app/CMD?["npm",?"start"]

第一次構(gòu)建鏡像時(shí),Docker將執(zhí)行每個(gè)指令并為每個(gè)指令創(chuàng)建一個(gè)新層。如果對(duì)應(yīng)用程序進(jìn)行了一些更改并再次構(gòu)建鏡像,Docker將檢查更改的指令是否影響任何層。如果沒(méi)有任何層受到更改的影響,Docker將重用緩存的層。

有效使用層緩存的技巧

  • ??最小化Dockerfile中的更改:?盡量減少Dockerfile中更改的頻率,并以使最常更改的行出現(xiàn)在底部的方式構(gòu)造指令。

  • ??構(gòu)建上下文優(yōu)化:?使用**.dockerignore*文件從構(gòu)建上下文中排除不必要的文件,這些文件可能會(huì)導(dǎo)致緩存失效。

  • ??使用較小的基礎(chǔ)鏡像:?較小的基礎(chǔ)鏡像減少拉取基礎(chǔ)鏡像所需的時(shí)間以及需要緩存的層數(shù)。

  • ??利用Docker的-cachefrom標(biāo)志:?如果您正在使用CI / CD流水線,則可以指定要用作緩存源的鏡像。

  • ??組合多個(gè)指令:?在某些情況下,組合指令(例如**RUN*)可以幫助最小化層數(shù),使緩存更有效。

遵循這些最佳實(shí)踐,您可以優(yōu)化層緩存過(guò)程并減少Docker鏡像的構(gòu)建時(shí)間,從而使您的開(kāi)發(fā)和部署過(guò)程更加高效。

  • ??Docker層緩存

鏡像大小和安全性

在構(gòu)建容器鏡像時(shí),了解鏡像大小和安全性非常重要。鏡像的大小會(huì)影響容器的構(gòu)建和部署速度。較小的鏡像可以提高構(gòu)建速度,并減少下載鏡像時(shí)的網(wǎng)絡(luò)開(kāi)銷。安全性也非常重要,因?yàn)槿萜麋R像可能包含漏洞,這可能會(huì)對(duì)您的應(yīng)用程序造成風(fēng)險(xiǎn)。

減小鏡像大小

  • ??使用適當(dāng)?shù)幕A(chǔ)鏡像:選擇一個(gè)更小、更輕量級(jí)的基礎(chǔ)鏡像,僅包含應(yīng)用程序所需的必要組件。例如,如果可用,請(qǐng)考慮使用官方鏡像的“alpine”變量,因?yàn)樗ǔ1容^小。

FROM?node:14-alpine

  • ??在單個(gè)“RUN”語(yǔ)句中運(yùn)行多個(gè)命令:每個(gè)“RUN”語(yǔ)句都會(huì)在鏡像中創(chuàng)建一個(gè)新的層,這會(huì)增加鏡像的大小。使用“&&”將多個(gè)命令組合到單個(gè)“RUN”語(yǔ)句中,以最小化層數(shù)并減小最終鏡像大小。

RUN?apt-get?update?&&?\\\\????apt-get?install?-y?some-required-package

  • ??在同一層中刪除不必要的文件:在鏡像構(gòu)建過(guò)程中安裝軟件包或添加文件時(shí),可以在同一層中刪除臨時(shí)或未使用的文件,以減小最終鏡像大小。

RUN?apt-get?update?&&?\\\\????apt-get?install?-y?some-required-package?&&?\\\\????apt-get?clean?&&?\\\\????rm?-rf?/var/lib/apt/lists/*

  • ??使用多階段構(gòu)建:使用多階段構(gòu)建創(chuàng)建更小的鏡像。多階段構(gòu)建允許您在 Dockerfile 中使用多個(gè)“FROM”語(yǔ)句。每個(gè)“FROM”語(yǔ)句在構(gòu)建過(guò)程中創(chuàng)建一個(gè)新的階段。您可以使用“COPY --from”語(yǔ)句將文件從一個(gè)階段復(fù)制到另一個(gè)階段。

FROM?node:14-alpine?AS?build
WORKDIR?/app
COPY?package*.json?./
RUN?npm?install
COPY?.?.
RUN?npm?run?build

FROM?node:14-alpine
WORKDIR?/app
COPY?--from=build?/app/dist?./dist
COPY?package*.json?./
RUN?npm?install?--production
CMD?["npm",?"start"]

  • ??使用“.dockerignore”文件:使用“.dockerignore”文件從構(gòu)建上下文中排除不必要的文件,這些文件可能會(huì)導(dǎo)致緩存失效并增加最終鏡像大小。

node_modules
npm-debug.log

提高安全性

  • ??保持基礎(chǔ)鏡像更新:定期更新您在 Dockerfile 中使用的基礎(chǔ)鏡像,以確保它們包括最新的安全補(bǔ)丁。

  • ??避免使用 root 運(yùn)行容器:始終在運(yùn)行容器時(shí)使用非 root 用戶,以最小化潛在風(fēng)險(xiǎn)。在運(yùn)行應(yīng)用程序之前,創(chuàng)建一個(gè)用戶并切換到該用戶。

RUN?addgroup?-g?1000?appuser?&&?\\\\????adduser?-u?1000?-G?appuser?-D?appuser
USER?appuser

  • ??限制“COPY”或“ADD”指令的范圍:具體說(shuō)明要復(fù)制到容器鏡像中的文件或目錄。避免使用“COPY . .”,因?yàn)樗赡軙?huì)意外包含敏感文件。

COPY?package*.json?./
COPY?src/?src/

  • ??掃描鏡像以查找漏洞:使用 Anchore 或 Clair 等工具掃描您的鏡像以查找漏洞,并在部署之前修復(fù)它們。

遵循這些最佳實(shí)踐,您將能夠構(gòu)建更高效和安全的容器鏡像,從而提高性能并降低應(yīng)用程序中漏洞的風(fēng)險(xiǎn)。

最后

為了方便其他設(shè)備和平臺(tái)的小伙伴觀看往期文章,鏈接奉上:

公眾號(hào)?Let us Coding,牛客,知乎開(kāi)源中國(guó),CSDN,思否,掘金,InfoQ,簡(jiǎn)書(shū),博客園慕課,51CTO,helloworld騰訊開(kāi)發(fā)者社區(qū),阿里開(kāi)發(fā)者社區(qū)

看完如果覺(jué)得有幫助,歡迎點(diǎn)贊、收藏關(guān)注


Docker學(xué)習(xí)路線7:構(gòu)建容器鏡像的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
彝良县| 宝清县| 湖北省| 孟津县| 济宁市| 个旧市| 乐山市| 平凉市| 马关县| 如皋市| 吴江市| 黎平县| 临江市| 读书| 曲松县| 资中县| 甘泉县| 北海市| 石林| 泰安市| 金平| 鹤峰县| 瑞丽市| 香港 | 永胜县| 革吉县| 若羌县| 托克托县| 曲沃县| 辽源市| 临西县| 天峻县| 曲靖市| 莱州市| 定襄县| 民勤县| 咸丰县| 镇远县| 五大连池市| 玉屏| 周宁县|