电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Docker 制作鏡像Dockerfile和commit操作

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

構(gòu)建鏡像

構(gòu)建鏡像主要有兩種方式:

使用docker commit命令從運(yùn)行中的容器提交為鏡像;

使用docker build命令從 Dockerfile 構(gòu)建鏡像。

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

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

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

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

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

下面,我們新打開另一個(gè)命令行窗口,運(yùn)行以下命令提交鏡像:

$ 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

此時(shí)我們可以看到主機(jī)上新生成了 busybox:hello 這個(gè)鏡像。

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

需要在容器內(nèi)操作麻煩,效率低。

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

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

使用 Dockerfile 構(gòu)建鏡像具有以下特性:

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

Dockerfile 的命令是完全透明的,通過查看 Dockerfile 的內(nèi)容,就可以知道鏡像是如何一步步構(gòu)建的

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

看到使用 Dockerfile 的方式構(gòu)建鏡像有這么多好的特性,你是不是已經(jīng)迫不及待想知道如何使用了。別著急,我們先學(xué)習(xí)下 Dockerfile 常用的指令。

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

看了這么多指令,感覺有點(diǎn)懵?別擔(dān)心,我通過一個(gè)實(shí)例讓你來熟悉它們。這是一個(gè) 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 這個(gè)鏡像來構(gòu)建自定義鏡像。這里需要注意,每個(gè) Dockerfile 的第一行除了注釋都必須以 FROM 開頭。

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

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

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

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

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

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

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

FROM busybox

COPY test /tmp/test

RUN mkdir /tmp/testdir

上面的 Dockerfile 由三步組成:

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

第二行拷貝本機(jī) test 文件到鏡像內(nèi);

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

這里我的 Docker 使用的是 overlay2 文件驅(qū)動,進(jìn)入到/var/lib/docker/overlay2目錄下使用tree .命令查看產(chǎn)生的鏡像文件:

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

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

Docker 制作鏡像Dockerfile和commit操作

分層的結(jié)構(gòu)使得 Docker 鏡像非常輕量,每一層根據(jù)鏡像的內(nèi)容都有一個(gè)唯一的 ID 值,當(dāng)不同的鏡像之間有相同的鏡像層時(shí),便可以實(shí)現(xiàn)不同的鏡像之間共享鏡像層的效果。

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

總結(jié)

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

鏡像操作命令:

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

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

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

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

構(gòu)建鏡像,構(gòu)建鏡像有兩種方式。第一種方式是使用 docker build 命令基于 Dockerfile 構(gòu)建鏡像,也是我比較推薦的鏡像構(gòu)建方式;第二種方式是使用 docker commit 命令基于已經(jīng)運(yùn)行的容器提交為鏡像。

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

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

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

標(biāo)簽: Docker
相關(guān)文章:
主站蜘蛛池模板: 对夹式止回阀_对夹式蝶形止回阀_对夹式软密封止回阀_超薄型止回阀_不锈钢底阀-温州上炬阀门科技有限公司 | 磁力链接搜索神器_BT磁力狗_CILIMAO磁力猫_高效磁力搜索引擎2024 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 低噪声电流前置放大器-SR570电流前置放大器-深圳市嘉士达精密仪器有限公司 | 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 成都LED显示屏丨室内户外全彩led屏厂家方案报价_四川诺显科技 | 河南空气能热水器-洛阳空气能采暖-洛阳太阳能热水工程-洛阳润达高科空气能商行 | 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 手板_手板模型制作_cnc手板加工厂-东莞天泓 | 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | LCD3D打印机|教育|桌面|光固化|FDM3D打印机|3D打印设备-广州造维科技有限公司 | 太空舱_民宿太空舱厂家_移动房屋太空舱价格-豪品建筑 | 等离子空气净化器_医用空气消毒机_空气净化消毒机_中央家用新风系统厂家_利安达官网 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 硅胶布|电磁炉垫片|特氟龙胶带-江苏浩天复合材料有限公司 | 气体检测仪-氢气检测仪-可燃气体传感器-恶臭电子鼻-深国安电子 | 二手电脑回收_二手打印机回收_二手复印机回_硒鼓墨盒回收-广州益美二手电脑回收公司 | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | hc22_hc22价格_hc22哈氏合金—东锜特殊钢 | 扬州汇丰仪表有限公司 | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | 并离网逆变器_高频UPS电源定制_户用储能光伏逆变器厂家-深圳市索克新能源 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 楼承板-开口楼承板-闭口楼承板-无锡海逵 | Duoguan 夺冠集团| 河南空气能热水器-洛阳空气能采暖-洛阳太阳能热水工程-洛阳润达高科空气能商行 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | 搜木网 - 木业全产业链交易平台,免费搜货、低价买货! | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 电动葫芦|手拉葫芦|环链电动葫芦|微型电动葫芦-北京市凌鹰起重机械有限公司 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 | 网站seo优化_seo云优化_搜索引擎seo_启新网络服务中心 | 深圳市宏康仪器科技有限公司-模拟高空低压试验箱-高温防爆试验箱-温控短路试验箱【官网】 | pos机办理,智能/扫码/二维码/微信支付宝pos机-北京万汇通宝商贸有限公司 |