最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

docker構(gòu)建的鏡像的三種方式小結(jié)

 更新時(shí)間:2024年04月12日 08:24:51   作者:字節(jié)碼在跳舞  
這篇文章主要為大家詳細(xì)介紹了docker中構(gòu)建的鏡像的三種方式,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下

1. 通過(guò)容器創(chuàng)建

容器提交 是一種快速創(chuàng)建鏡像的方法,它將一個(gè)正在運(yùn)行的容器的當(dāng)前狀態(tài)保存為一個(gè)新的鏡像。

提交容器:使用 docker commit 命令,指定要提交的容器ID、新鏡像的名稱和可選標(biāo)簽。

docker commit container_id my_image:tag


?  ~ docker commit -m "create image" nginx demo:test
sha256:4f00c504f06115b9230c21afab2709b8cff1c5d4e8f2799f3472964c4b1c9d8c
?  ~ docker images
REPOSITORY                                      TAG
                IMAGE ID       CREATED          SIZE
demo                                            test                      4f00c504f061   2 seconds ago    141MB

通過(guò) docker commit 命令,可以將容器(如示例中的 nginx,也可以使用容器ID)的當(dāng)前狀態(tài)提交為新鏡像,同時(shí)指定新鏡像的名稱(如 my_image)和標(biāo)簽(如 tag)。這里使用 -m 參數(shù)添加提交說(shuō)明。

這種方式簡(jiǎn)單快捷,適用于臨時(shí)或?qū)嶒?yàn)性的鏡像創(chuàng)建。然而,不建議頻繁使用容器提交方式創(chuàng)建鏡像,因?yàn)橥ㄟ^(guò)提交容器的方式,我們無(wú)法追溯詳細(xì)的變更操作,這會(huì)導(dǎo)致鏡像構(gòu)建過(guò)程缺乏透明度和可重復(fù)性。

2. 通過(guò)Dockerfile構(gòu)建鏡像

在Docker構(gòu)建自定義鏡像時(shí),Dockerfile是一個(gè)至關(guān)重要的工具。Dockerfile 是一個(gè)文本文件,它包含了一系列指令,用于自動(dòng)化構(gòu)建Docker鏡像。通過(guò)編寫Dockerfile,你可以精確地定義構(gòu)建鏡像所需的步驟、依賴關(guān)系和配置項(xiàng)。整個(gè)過(guò)程通常稱為“構(gòu)建”(build)。Dockerfile確保了鏡像構(gòu)建的可重復(fù)性和一致性。

下面是一個(gè)Dockerfile示例:

FROM python:3.11.9-alpine3.19
LABEL authors="ff755"
EXPOSE 8000
WORKDIR /app
COPY . /app

RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir -r requirements.txt
CMD [ "python", "./main.py" ]

示例代碼gitee.com/ft/hello-py (一個(gè)FastAPI的Hello World項(xiàng)目)

指令詳解

  • FROM:指定基于哪個(gè)鏡像來(lái)構(gòu)建。示例中使用了 python:3.11.9-alpine3.19 鏡像。我們可以根據(jù)實(shí)際需求選擇合適的基鏡像來(lái)構(gòu)建我們自己的鏡像。
  • LABEL:為鏡像添加元數(shù)據(jù),如作者、版本等,便于管理和搜索鏡像。
  • EXPOSE:聲明鏡像內(nèi)服務(wù)對(duì)外提供的端口號(hào)。如果不指定,運(yùn)行容器時(shí)使用 -P 將不會(huì)自動(dòng)映射端口。
  • WORKDIR:設(shè)定鏡像的工作目錄,即容器內(nèi)的當(dāng)前目錄(等同于命令 pwd)。
  • COPY:從宿主機(jī)指定目錄復(fù)制文件到容器內(nèi)的指定目錄。如 COPY . . 表示將宿主機(jī)當(dāng)前目錄下的所有文件復(fù)制到容器內(nèi)的工作目錄。
  • RUN:在新構(gòu)建的鏡像中執(zhí)行命令并提交結(jié)果。每次 RUN 指令都會(huì)在當(dāng)前鏡像層上執(zhí)行命令,然后生成一個(gè)新的鏡像層。例如,上面通過(guò) pip 根據(jù) requirements.txt 安裝 Python 依賴,并指定使用清華大學(xué)的鏡像源。
  • CMD:設(shè)置容器啟動(dòng)后默認(rèn)執(zhí)行的命令。只有最后一個(gè) CMD 指令會(huì)被執(zhí)行,如果用戶在運(yùn)行容器時(shí)指定了命令,則會(huì)覆蓋 CMD 指定的命令。如 CMD [ "python", "./main.py" ] 表示容器啟動(dòng)時(shí)運(yùn)行 python ./main.py。

此外,還有其他常用指令:

  • ENV:設(shè)置環(huán)境變量。
  • ARG: 設(shè)置構(gòu)建變量。與ENV不通,ARG是定義構(gòu)建過(guò)程中的變量。
  • ADD:類似于 COPY,功能更豐富,可以支持URL下載并添加文件,自動(dòng)解壓 tar.gz 等。一般情況下推薦使用 COPY。
  • ENTRYPOINT:類似于 CMD,常用于定義始終執(zhí)行的可執(zhí)行程序。
  • VOLUME:創(chuàng)建一個(gè)數(shù)據(jù)卷掛載點(diǎn),用于持久化數(shù)據(jù)或與其他容器共享數(shù)據(jù)。數(shù)據(jù)卷獨(dú)立于容器生命周期,即使容器被刪除,數(shù)據(jù)也會(huì)被保留。

基于Dockerfile構(gòu)建鏡像:

docker build -t hello:py .

使用docker build通過(guò)Dockerfile構(gòu)建鏡像。當(dāng)Docker不在當(dāng)前目錄時(shí),可以添加-f [你的目錄]/Dockerfile指定。

Docker Hub官方倉(cāng)庫(kù)提供了大量的優(yōu)秀鏡像和Dockerfile,可以通過(guò)閱讀,來(lái)學(xué)習(xí)如何編寫Dockerfile,高效編寫Dockerfile,構(gòu)建我們自己的鏡像。

3. 使用BuildKit構(gòu)建鏡像

Docker還提供了一個(gè)實(shí)驗(yàn)性的構(gòu)建工具,稱為BuildKit,它可以提供更快的構(gòu)建速度和更高效的鏡像緩存。使用BuildKit構(gòu)建鏡像的方式與使用Dockerfile類似,只需設(shè)置一個(gè)環(huán)境變量即可啟用BuildKit。

# 設(shè)置環(huán)境變量啟用BuildKit
export DOCKER_BUILDKIT=1

使用常規(guī)的 docker build 命令構(gòu)建鏡像,即可享受到 BuildKit 帶來(lái)的性能提升和新特性。BuildKit 作為新一代的 Docker 構(gòu)建工具,通過(guò)一系列創(chuàng)新設(shè)計(jì)和優(yōu)化措施,極大地改善了 Docker 鏡像構(gòu)建的效率、安全性和靈活性。

以下為使用默認(rèn)構(gòu)建方式和BuildKit的效果:

默認(rèn)構(gòu)建:

?  hello-py git:(master) docker build -t hello-py:0.0.1 .
[+] Building 119.3s (9/9) FINISHED                   docker:default
 => [internal] load build definition from Dockerfile           0.1s
 => => transferring dockerfile: 254B                           0.0s
 => [internal] load metadata for docker.io/library/python:3.  68.8s
 => [internal] load .dockerignore                              0.1s
 => => transferring context: 2B                                0.0s
 => [1/4] FROM docker.io/library/python:3.11.9-alpine3.19@sh  35.2s
 => => resolve docker.io/library/python:3.11.9-alpine3.19@sha  0.0s
 => => sha256:3912f7fe31112ee0f747848328e1a2b 1.37kB / 1.37kB  0.0s
 => => sha256:10333afc009e90c9e91c1f1d7deca49 6.26kB / 6.26kB  0.0s
 => => sha256:c3cdf40b8bda8e4ca4be0f5fa7 619.60kB / 619.60kB  17.6s
 => => sha256:ac499ccf2147611bc4388058b362 12.67MB / 12.67MB  22.2s
 => => sha256:0b5ed25d3cc27cd35c7b0352bac8ef2 1.65kB / 1.65kB  0.0s
 => => sha256:416bfceb623eb12bf1c373489e0dba32f0 240B / 240B  19.8s
 => => extracting sha256:c3cdf40b8bda8e4ca4be0f5fa7f1d1289072  0.2s
 => => sha256:76351c33299b900aa86b33176eac19 3.13MB / 3.13MB  34.3s
 => => extracting sha256:ac499ccf2147611bc4388058b362c0bcc1ca  0.5s
 => => extracting sha256:416bfceb623eb12bf1c373489e0dba32f00f  0.0s
 => => extracting sha256:76351c33299b900aa86b33176eac198fc861  0.3s
 => [internal] load build context                              0.2s
 => => transferring context: 31.28kB                           0.0s
 => [2/4] WORKDIR /app                                         2.1s
 => [3/4] COPY . /app                                          0.6s
 => [4/4] RUN pip install -i https://pypi.tuna.tsinghua.edu.  11.6s
 => exporting to image                                         0.3s
 => => exporting layers                                        0.3s
 => => writing image sha256:a90573dc2e0981ef136518fc7c244af6c  0.0s
 => => naming to docker.io/library/hello-py:0.0.1              0.0s

啟用BuildKit進(jìn)行構(gòu)建

?  hello-py git:(master) docker build -t hello-py:buildkit .
[+] Building 16.8s (9/9) FINISHED                    docker:default
 => [internal] load build definition from Dockerfile           0.0s
 => => transferring dockerfile: 254B                           0.0s
 => [internal] load metadata for docker.io/library/python:3.  16.6s
 => [internal] load .dockerignore                              0.0s
 => => transferring context: 2B                                0.0s
 => [1/4] FROM docker.io/library/python:3.11.9-alpine3.19@sha  0.0s
 => [internal] load build context                              0.0s
 => => transferring context: 2.84kB                            0.0s
 => CACHED [2/4] WORKDIR /app                                  0.0s
 => CACHED [3/4] COPY . /app                                   0.0s
 => CACHED [4/4] RUN pip install -i https://pypi.tuna.tsinghu  0.0s
 => exporting to image                                         0.0s
 => => exporting layers                                        0.0s
 => => writing image sha256:a90573dc2e0981ef136518fc7c244af6c  0.0s
 => => naming to docker.io/library/hello-py:buildkit           0.0s

默認(rèn)構(gòu)建耗時(shí)119.3s,啟用BuildKit后16.8s,速度快了7倍,快來(lái)試試吧。

雖然,通過(guò)容器可以創(chuàng)建鏡像,但Dockerfile構(gòu)建鏡像的應(yīng)當(dāng)成為我們創(chuàng)建鏡像的首選。通過(guò)合理編寫Dockerfile,可以實(shí)現(xiàn)自動(dòng)化、可重復(fù)和可維護(hù)的鏡像構(gòu)建過(guò)程。開啟BuildKit可以更快速的構(gòu)建我們的鏡像。

到此這篇關(guān)于docker構(gòu)建的鏡像的三種方式小結(jié)的文章就介紹到這了,更多相關(guān)docker構(gòu)建鏡像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Ubuntu20.04上安裝docker步驟及docker使用方法

    Ubuntu20.04上安裝docker步驟及docker使用方法

    Docker是一個(gè)可以簡(jiǎn)化容器中應(yīng)用程序進(jìn)程管理過(guò)程的應(yīng)用程序,容器允許你在資源隔離的進(jìn)程中運(yùn)行應(yīng)用程序,這篇文章主要介紹了Ubuntu20.04上安裝docker步驟及docker使用的相關(guān)資料,需要的朋友可以參考下
    2026-04-04
  • dockerfile中CMD和ENTRYPOINT指令使用及說(shuō)明

    dockerfile中CMD和ENTRYPOINT指令使用及說(shuō)明

    介紹了Dockerfile中的CMD和ENTRYPOINT指令以及它們的執(zhí)行方式,包括exec形式和shell形式,CMD提供默認(rèn)命令,支持覆蓋;ENTRYPOINT定義固定命令,不支持覆蓋,但可以通過(guò)--entrypoint參數(shù)實(shí)現(xiàn)覆蓋
    2025-11-11
  • FastAPI 部署在Docker的詳細(xì)過(guò)程

    FastAPI 部署在Docker的詳細(xì)過(guò)程

    這篇文章主要介紹了FastAPI 部署在 Docker的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • 最新IDEA快速實(shí)現(xiàn)Docker鏡像部署運(yùn)行的過(guò)程詳解

    最新IDEA快速實(shí)現(xiàn)Docker鏡像部署運(yùn)行的過(guò)程詳解

    這篇文章主要介紹了最新IDEA快速實(shí)現(xiàn)Docker鏡像部署運(yùn)行的過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Docker容器連接相互通信的實(shí)現(xiàn)

    Docker容器連接相互通信的實(shí)現(xiàn)

    這篇文章主要介紹了Docker容器連接相互通信的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Docker快速搭建PHP+Nginx+Mysql環(huán)境及踩坑

    Docker快速搭建PHP+Nginx+Mysql環(huán)境及踩坑

    本文主要介紹了Docker快速搭建PHP+Nginx+Mysql環(huán)境及踩坑 ,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 在Centos7中安裝Docker1.12的詳細(xì)教程

    在Centos7中安裝Docker1.12的詳細(xì)教程

    本篇文章主要介紹了在Centos7中安裝Docker1.12的詳細(xì)教程。具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-02-02
  • harbor切換主機(jī),ip地址改變,需要對(duì)應(yīng)的修改harbor配置實(shí)踐

    harbor切換主機(jī),ip地址改變,需要對(duì)應(yīng)的修改harbor配置實(shí)踐

    文章講述了在切換主機(jī)IP地址后,需要修改Harbor配置文件以避免出現(xiàn)連接錯(cuò)誤,錯(cuò)誤的原因是Harbor的IP地址沒有更新,需要從舊IP(192.168.1.110)改為新IP(192.168.1.111),解決方法是編輯harbor.cfg文件并保存更改
    2026-03-03
  • 使用Docker部署JSON Crack的流程步驟

    使用Docker部署JSON Crack的流程步驟

    本文將給大家詳細(xì)介紹了如何使用Docker部署JSON Crack,JSON Crack 是一款免費(fèi)的開源數(shù)據(jù)可視化應(yīng)用程序,能夠?qū)?nbsp;JSON、YAML、XML、CSV 等數(shù)據(jù)格式可視化為交互式圖表,文中通過(guò)代碼和圖片給大家講解的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • docker-compose---安裝掛載本地文件啟動(dòng)mariadb問(wèn)題

    docker-compose---安裝掛載本地文件啟動(dòng)mariadb問(wèn)題

    這篇文章主要介紹了docker-compose---安裝掛載本地文件啟動(dòng)mariadb問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評(píng)論

威海市| 沛县| 蒲城县| 越西县| 平和县| 若羌县| 镇原县| 绩溪县| 玛沁县| 康乐县| 当阳市| 江安县| 盐津县| 浑源县| 青田县| 广水市| 通州区| 绍兴市| 曲沃县| 遂宁市| 德江县| 宜阳县| 易门县| 宁夏| 连江县| 西畴县| 台南县| 高邑县| 察哈| 大埔县| 贵州省| 尖扎县| 蒙阴县| 灵丘县| 昭觉县| 虎林市| 凉山| 灵武市| 永济市| 靖远县| 南和县|