日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Docker 制作鏡像Dockerfile和commit操作

瀏覽:281日期:2024-11-14 11:41:39

構建鏡像

構建鏡像主要有兩種方式:

使用docker commit命令從運行中的容器提交為鏡像;

使用docker build命令從 Dockerfile 構建鏡像。

首先介紹下如何從運行中的容器提交為鏡像。我依舊使用 busybox 鏡像舉例,使用以下命令創(chuàng)建一個名為 busybox 的容器并進入 busybox 容器。

$ docker run --rm --name=busybox -it busybox sh

執(zhí)行完上面的命令后,當前窗口會啟動一個 busybox 容器并且進入容器中。在容器中,執(zhí)行以下命令創(chuàng)建一個文件并寫入內容:

/ # touch hello.txt && echo 'I love Docker. ' > hello.txt

此時在容器的根目錄下,已經創(chuàng)建了一個 hello.txt 文件,并寫入了 'I love Docker. '。

下面,我們新打開另一個命令行窗口,運行以下命令提交鏡像:

$ docker commit busybox busybox:hello

sha256:cbc6406aaef080d1dd3087d4ea1e6c6c9915ee0ee0f5dd9e0a90b03e2215e81c

然后使用上面講到的docker image ls命令查看鏡像:

$ docker image ls busyboxREPOSITORY TAG IMAGE ID CREATED SIZEbusybox hellocbc6406aaef0 2 minutes ago 1.22MBbusybox latest 018c9d7b792b 4 weeks ago 1.22MB

此時我們可以看到主機上新生成了 busybox:hello 這個鏡像。

通過對比顯然使用Dockerfile的docker build更好。docker commit的缺點如下:

需要在容器內操作麻煩,效率低。

這一點也是最重要的,其他人或者過一段時間后自己也不知道這個鏡像是怎么做出來的,但是使用Dockerfile構建的鏡像,我們看到是執(zhí)行了apt-get install命令。

第二種方式是最重要也是最常用的鏡像構建方式:Dockerfile。Dockerfile 是一個包含了用戶所有構建命令的文本。通過docker build命令可以從 Dockerfile 生成鏡像。

使用 Dockerfile 構建鏡像具有以下特性:

Dockerfile 的每一行命令都會生成一個獨立的鏡像層,并且擁有唯一的 ID

Dockerfile 的命令是完全透明的,通過查看 Dockerfile 的內容,就可以知道鏡像是如何一步步構建的

Dockerfile 是純文本的,方便跟隨代碼一起存放在代碼倉庫并做版本管理

看到使用 Dockerfile 的方式構建鏡像有這么多好的特性,你是不是已經迫不及待想知道如何使用了。別著急,我們先學習下 Dockerfile 常用的指令。

Dockerfile 指令 指令簡介 FROM Dockerfile 除了注釋第一行必須是 FROM ,F(xiàn)ROM 后面跟鏡像名稱,代表我們要基于哪個基礎鏡像構建我們的容器。 RUN RUN 后面跟一個具體的命令,類似于 Linux 命令行執(zhí)行命令。 ADD 拷貝本機文件或者遠程文件到鏡像內 COPY 拷貝本機文件到鏡像內 USER 指定容器啟動的用戶 ENTRYPOINT 容器的啟動命令 CMD CMD 為 ENTRYPOINT 指令提供默認參數(shù),也可以單獨使用 CMD 指定容器啟動參數(shù) ENV 指定容器運行時的環(huán)境變量,格式為 key=value ARG 定義外部變量,構建鏡像時可以使用 build-arg = 的格式傳遞參數(shù)用于構建 EXPOSE 指定容器監(jiān)聽的端口,格式為 [port]/tcp 或者 [port]/udp WORKDIR 為 Dockerfile 中跟在其后的所有 RUN、CMD、ENTRYPOINT、COPY 和 ADD 命令設置工作目錄。

看了這么多指令,感覺有點懵?別擔心,我通過一個實例讓你來熟悉它們。這是一個 Dockerfile:

FROM centos:7 COPY nginx.repo /etc/yum.repos.d/nginx.repo RUN yum install -y nginx EXPOSE 80 ENV HOST=mynginx CMD ['nginx','-g','daemon off;']

第一行表示我要基于 centos:7 這個鏡像來構建自定義鏡像。這里需要注意,每個 Dockerfile 的第一行除了注釋都必須以 FROM 開頭。

第二行表示拷貝本地文件 nginx.repo 文件到容器內的 /etc/yum.repos.d 目錄下。這里拷貝 nginx.repo 文件是為了添加 nginx 的安裝源。

第三行表示在容器內運行yum install -y nginx命令,安裝 nginx 服務到容器內,執(zhí)行完第三行命令,容器內的 nginx 已經安裝完成。

第四行聲明容器內業(yè)務(nginx)使用 80 端口對外提供服務。

第五行定義容器啟動時的環(huán)境變量 HOST=mynginx,容器啟動后可以獲取到環(huán)境變量 HOST 的值為 mynginx。

第六行定義容器的啟動命令,命令格式為 json 數(shù)組。這里設置了容器的啟動命令為 nginx ,并且添加了 nginx 的啟動參數(shù) -g ’daemon off;’ ,使得 nginx 以前臺的方式啟動。

鏡像的實現(xiàn)原理

其實 Docker 鏡像是由一系列鏡像層(layer)組成的,每一層代表了鏡像構建過程中的一次提交。下面以一個鏡像構建的 Dockerfile 來說明鏡像是如何分層的。

FROM busybox

COPY test /tmp/test

RUN mkdir /tmp/testdir

上面的 Dockerfile 由三步組成:

第一行基于 busybox 創(chuàng)建一個鏡像層;

第二行拷貝本機 test 文件到鏡像內;

第三行在 /tmp 文件夾下創(chuàng)建一個目錄 testdir。

這里我的 Docker 使用的是 overlay2 文件驅動,進入到/var/lib/docker/overlay2目錄下使用tree .命令查看產生的鏡像文件:

$ tree . # 以下為 tree . 命令輸出內容 |-- 3e89b959f921227acab94f5ab4524252ae0a829ff8a3687178e3aca56d605679 | |-- diff # 這一層為基礎層,對應上述 Dockerfile 第一行,包含 busybox 鏡像所有文件內容,例如 /etc,/bin,/var 等目錄 ... 此次省略部分原始鏡像文件內容 | `-- link |-- 6591d4e47eb2488e6297a0a07a2439f550cdb22845b6d2ddb1be2466ae7a9391 | |-- diff # 這一層對應上述 Dockerfile 第二行,拷貝 test 文件到 /tmp 文件夾下,因此 diff 文件夾下有了 /tmp/test 文件 | | `-- tmp | | `-- test | |-- link | |-- lower | `-- work |-- backingFsBlockDev |-- bec6a018080f7b808565728dee8447b9e86b3093b16ad5e6a1ac3976528a8bb1 | |-- diff # 這一層對應上述 Dockerfile 第三行,在 /tmp 文件夾下創(chuàng)建 testdir 文件夾,因此 diff 文件夾下有了 /tmp/testdir 文件夾 | | `-- tmp | | `-- testdir | |-- link | |-- lower | `-- work ...

通過上面的目錄結構可以看到,Dockerfile 的每一行命令,都生成了一個鏡像層,每一層的 diff 夾下只存放了增量數(shù)據,如圖 2 所示。

Docker 制作鏡像Dockerfile和commit操作

分層的結構使得 Docker 鏡像非常輕量,每一層根據鏡像的內容都有一個唯一的 ID 值,當不同的鏡像之間有相同的鏡像層時,便可以實現(xiàn)不同的鏡像之間共享鏡像層的效果。

總結一下, Docker 鏡像是靜態(tài)的分層管理的文件組合,鏡像底層的實現(xiàn)依賴于聯(lián)合文件系統(tǒng)(UnionFS)。充分掌握鏡像的原理,可以幫助我們在生產實踐中構建出最優(yōu)的鏡像,同時也可以幫助我們更好地理解容器和鏡像的關系。

總結

到此,相信你已經對 Docker 鏡像這一核心概念有了較深的了解,并熟悉了 Docker 鏡像的常用操作(拉取、查看、“重命名”、刪除和構建自定義鏡像)及底層實現(xiàn)原理。

鏡像操作命令:

拉取鏡像,使用 docker pull 命令拉取遠程倉庫的鏡像到本地 ;

重命名鏡像,使用 docker tag 命令“重命名”鏡像 ;

查看鏡像,使用 docker image ls 或 docker images 命令查看本地已經存在的鏡像;

刪除鏡像,使用 docker rmi 命令刪除無用鏡像 ;

構建鏡像,構建鏡像有兩種方式。第一種方式是使用 docker build 命令基于 Dockerfile 構建鏡像,也是我比較推薦的鏡像構建方式;第二種方式是使用 docker commit 命令基于已經運行的容器提交為鏡像。

鏡像的實現(xiàn)原理:

鏡像是由一系列的鏡像層(layer )組成,每一層代表了鏡像構建過程中的一次提交,當我們需要修改鏡像內的某個文件時,只需要在當前鏡像層的基礎上新建一個鏡像層,并且只存放修改過的文件內容。分層結構使得鏡像間共享鏡像層變得非常簡單和方便。

以上這篇Docker 制作鏡像Dockerfile和commit操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Docker
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
成人福利视频| 日本在线成人| 日本视频中文字幕一区二区三区| 欧美a级片一区| 久久婷婷丁香| 国产精品99久久精品| 国产精品对白久久久久粗| 亚洲免费专区| 日韩精品第一| 日韩精品免费一区二区夜夜嗨| 视频一区中文字幕国产| 99国产精品| 日韩国产一二三区| 日韩亚洲在线| 欧美日韩四区| 亚洲天堂免费| 日本v片在线高清不卡在线观看| 婷婷精品久久久久久久久久不卡| 亚洲一区二区三区中文字幕在线观看| 日韩精品一卡| 午夜在线一区| 国产探花一区| 久久精品国产久精国产| 国产伦理一区| 91精品xxx在线观看| 伊人精品视频| 日韩精品免费视频人成| 精品在线网站观看| 国产一区不卡| 亚洲欧洲一区| 国产精品99久久免费| 国产免费久久| 1024精品久久久久久久久| 日韩精品中文字幕一区二区| 成人精品视频| 亚洲国产一区二区三区在线播放| 国产不卡一区| 视频一区二区三区入口| 国产精品黄网站| 国产一区日韩一区| 久久久国产精品入口麻豆 | 欧美日韩一区二区三区四区在线观看| 国产欧美一区| 日韩一级欧洲| 国产一区二区三区久久| 午夜亚洲精品| 久久精品国语| 国产精品欧美三级在线观看| 亚洲成a人片| 亚洲精品婷婷| 婷婷综合在线| 在线观看精品| 欧美91在线| 国产探花在线精品| 99在线|亚洲一区二区| 国产成人精品一区二区三区免费| 中文字幕日本一区| 久久久久久色| 香蕉久久久久久久av网站| 国产高清不卡| 国产在线不卡一区二区三区| 欧美一区自拍| 日韩精品免费视频一区二区三区 | yellow在线观看网址| 日韩国产欧美三级| 丝瓜av网站精品一区二区| 美女日韩在线中文字幕| 日韩精品免费一区二区三区| 国产精品久久久久77777丨 | 成人污污视频| 欧美日本久久| 欧美日韩1区2区3区| 日韩中文在线电影| 麻豆成人综合网| 国产一精品一av一免费爽爽| 亚洲经典在线| 在线精品亚洲| 蜜臀久久99精品久久久画质超高清| 亚洲欧美综合| 亚洲国产不卡| 免费在线视频一区| 欧美日韩一区二区三区不卡视频 | 少妇久久久久| 麻豆网站免费在线观看| 国产欧美在线| 国产香蕉精品| 国产精品99久久免费| 精品国产乱码久久久久久樱花| 麻豆国产精品| 精品亚洲免a| 国产一区2区| 亚洲无线一线二线三线区别av| 免费精品国产的网站免费观看| 国产亚洲一级| 国产日韩欧美| 久久99视频| 福利视频一区| 樱桃视频成人在线观看| 久草免费在线视频| 亚洲www免费| 欧美日韩国产在线一区| 每日更新成人在线视频| 91av一区| 亚洲小说欧美另类婷婷| 自拍自偷一区二区三区| 久久精品女人| 蜜桃视频第一区免费观看| 国产激情一区| 婷婷综合五月| 欧美一级精品| 青青伊人久久| 亚洲一二av| 激情久久五月| 国产成人精品亚洲线观看| 视频一区视频二区在线观看| 国产成人a视频高清在线观看| 蜜臀va亚洲va欧美va天堂| 日韩精品不卡一区二区| 国产精品亚洲人成在99www| 午夜电影亚洲| 中文在线免费视频| 国产日韩一区二区三区在线| 性色av一区二区怡红| 久久中文视频| 欧美黄色网页| 麻豆精品少妇| 国产精品视频一区二区三区| 日韩高清一级| 亚洲欧美网站在线观看| 在线视频日韩| 亚洲一区二区三区高清不卡| 精品一区在线| 午夜久久tv| 午夜在线播放视频欧美| 午夜欧美精品| 综合亚洲色图| 日韩视频1区| 一区二区不卡| 香蕉久久久久久| 视频一区免费在线观看| 日韩午夜黄色| 综合视频一区| 国产精品xxx| 蜜桃精品视频| 电影亚洲精品噜噜在线观看| 久久九九精品| 亚洲欧美高清| 欧美一区=区三区| 国产 日韩 欧美 综合 一区| 五月天av在线| 蜜桃视频欧美| 综合激情一区| 国产一区国产二区国产三区| 久久精品1区| 亚洲精品美女| 久久精品色播| 天使萌一区二区三区免费观看| 日韩欧美中文字幕电影| 成午夜精品一区二区三区软件| 色婷婷久久久| 日韩精品久久久久久久软件91| 国产欧美日韩精品高清二区综合区| 中文在线а√在线8| 三级在线观看一区二区 | 免费毛片在线不卡| 日韩高清成人在线| 久久蜜桃精品| 日本伊人午夜精品| 亚洲精品在线影院| 欧美激情三区| 蜜桃久久av一区| 国产精品美女久久久久久不卡| 久久国产主播| 麻豆免费精品视频| 视频一区二区三区在线| 91一区二区三区四区| 日韩一区二区三区精品视频第3页| 国产精品v一区二区三区| 久久精品1区| 色综合狠狠操| 鲁大师精品99久久久| 日本不卡高清| 国产亚洲欧洲| 日韩理论片av| 国产一区丝袜| 国产精品亚洲成在人线| 亚洲久草在线| 亚洲午夜久久| 综合激情视频| 免费日韩视频| 日韩天堂av| 国产麻豆综合| 久久av一区| 老牛影视一区二区三区 | 伊人精品视频| 欧美二三四区| 精品一区二区三区中文字幕视频| 日产欧产美韩系列久久99| 在线精品亚洲| 日韩中出av|