欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1. 通過容器創(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

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

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

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

在Docker構(gòu)建自定義鏡像時(shí),Dockerfile是一個(gè)至關(guān)重要的工具。Dockerfile 是一個(gè)文本文件,它包含了一系列指令,用于自動(dòng)化構(gòu)建Docker鏡像。通過編寫Dockerfile,你可以精確地定義構(gòu)建鏡像所需的步驟、依賴關(guān)系和配置項(xiàng)。整個(gè)過程通常稱為“構(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è)鏡像來構(gòu)建。示例中使用了 python:3.11.9-alpine3.19 鏡像。我們可以根據(jù)實(shí)際需求選擇合適的基鏡像來構(gòu)建我們自己的鏡像。
  • LABEL:為鏡像添加元數(shù)據(jù),如作者、版本等,便于管理和搜索鏡像。
  • EXPOSE:聲明鏡像內(nèi)服務(wù)對外提供的端口號。如果不指定,運(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è)新的鏡像層。例如,上面通過 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)建過程中的變量。
  • 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通過Dockerfile構(gòu)建鏡像。當(dāng)Docker不在當(dāng)前目錄時(shí),可以添加-f [你的目錄]/Dockerfile指定。

Docker Hub官方倉庫提供了大量的優(yōu)秀鏡像和Dockerfile,可以通過閱讀,來學(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 帶來的性能提升和新特性。BuildKit 作為新一代的 Docker 構(gòu)建工具,通過一系列創(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倍,快來試試吧。

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

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

相關(guān)文章

  • docker環(huán)境搭建JMeter+Grafana+influxdb可視化性能監(jiān)控平臺的教程

    docker環(huán)境搭建JMeter+Grafana+influxdb可視化性能監(jiān)控平臺的教程

    這篇文章主要介紹了docker下搭建JMeter+Grafana+influxdb可視化性能監(jiān)控平臺,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Jenkins構(gòu)建Docker鏡像并推送至Harbor倉庫的實(shí)現(xiàn)

    Jenkins構(gòu)建Docker鏡像并推送至Harbor倉庫的實(shí)現(xiàn)

    本文主要介紹了Jenkins構(gòu)建Docker鏡像并推送至Harbor倉庫,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • docker?Desktop安裝WSL?--update報(bào)錯(cuò)問題成功解決辦法

    docker?Desktop安裝WSL?--update報(bào)錯(cuò)問題成功解決辦法

    這篇文章主要介紹了如何在Windows?11上設(shè)置WSL2為默認(rèn)版本,解決WSL2安裝和卸載過程中遇到的問題,包括強(qiáng)制中斷命令、wsl--uninstall命令無效以及手動(dòng)刪除Linux發(fā)行版的方法,需要的朋友可以參考下
    2025-02-02
  • win10家庭版安裝docker遇到的問題小結(jié)

    win10家庭版安裝docker遇到的問題小結(jié)

    這篇文章主要介紹了win10家庭版安裝docker遇到的問題小結(jié),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • docker內(nèi)的容器如何與宿主機(jī)共享IP的方法

    docker內(nèi)的容器如何與宿主機(jī)共享IP的方法

    本文主要介紹了docker內(nèi)的容器如何與宿主機(jī)共享IP的方法,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • ubuntu如何完全干凈的卸載docker

    ubuntu如何完全干凈的卸載docker

    這篇文章主要介紹了ubuntu如何完全干凈的卸載docker問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Docker容器下運(yùn)行Nginx并實(shí)現(xiàn)反向代理

    Docker容器下運(yùn)行Nginx并實(shí)現(xiàn)反向代理

    這篇文章介紹了Docker容器下運(yùn)行Nginx并實(shí)現(xiàn)反向代理的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • Ubuntu下安裝Docker教程

    Ubuntu下安裝Docker教程

    Docker是一個(gè)開源軟件,它可以把一個(gè)Linux應(yīng)用和它所依賴的一切(比如配置文件)都封裝到一個(gè)容器。然而,Docker與虛擬機(jī)不同,它使用了沙箱機(jī)制,Docker容器不運(yùn)行操作系統(tǒng),它共享主機(jī)上的操作系統(tǒng)。下面我將在Ubuntu 15.10安裝和使用Docker。
    2016-10-10
  • docker安裝tomcat并部署Springboot項(xiàng)目war包的方法

    docker安裝tomcat并部署Springboot項(xiàng)目war包的方法

    這篇文章主要介紹了docker安裝tomcat并部署Springboot項(xiàng)目war包的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 你可能不知道的docker命令奇怪巧

    你可能不知道的docker命令奇怪巧

    這篇文章主要介紹了你可能不知道的docker命令的奇怪巧,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01

最新評論