亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

更多QQ空间微信QQ好友腾讯朋友复制链接
您的位置:首頁(yè)/技術(shù)文章
文章詳情頁(yè)

docker中的run/cmd/entrypoint的區(qū)別詳解

【字号: 作者:豬豬瀏覽:87日期:2024-10-24 14:34:03

Dockerfile中run、cmd和entrypoint都能夠用于執(zhí)行命令,下面是三者的主要用途:

run命令執(zhí)行命令并創(chuàng)建新的鏡像層,通常用于安裝軟件包 cmd命令設(shè)置容器啟動(dòng)后默認(rèn)執(zhí)行的命令及其參數(shù),但CMD設(shè)置的命令能夠被docker run命令后面的命令行參數(shù)替換 entrypoint配置容器啟動(dòng)時(shí)的執(zhí)行命令,不會(huì)被忽略,一定會(huì)被執(zhí)行,即使運(yùn)行 docker run時(shí)指定了其他命令。Shell格式和Exec格式運(yùn)行命令

我們可以用下面兩種格式指定run、cmd和entrypoint要運(yùn)行的命令:

Shell格式: 。例如:yum install -y wget Exec格式: [“executable”, “param1”, “param2”, …]。例如: [“yum”, “install”, “-y”, “wget”]

cmd和entrypoint推薦使用exec格式,因?yàn)橹噶畹目勺x性更強(qiáng),更容易理解,而run則兩種格式都可以。

Exec格式的坑

dockerfile的內(nèi)容如下:

env name morrisentrypoint ['echo', '$name']

這種寫(xiě)法只會(huì)打印出$name,不會(huì)進(jìn)行變量的替換,原因是它只是在執(zhí)行echo命令,并不是執(zhí)行shell。意思是說(shuō),我們不是在shell里執(zhí)行echo,只是單純的執(zhí)行echo,所以不會(huì)替換變量。

想要改成可執(zhí)行的shell,需要改寫(xiě)成以下形式

env name morrisentrypoint ['/bin/bash', '-c', 'echo $name']run命令

run指令通常用于安裝應(yīng)用和軟件包。run在當(dāng)前鏡像的頂部執(zhí)行命令,并通過(guò)創(chuàng)建新的鏡像層。Dockerfile中常常包含多個(gè)run指令。下面是一個(gè)例子:

run yum update && yum install -y bzr cvs git mercurial subversion

yum update和yum install被放在一個(gè)run指令中執(zhí)行,這樣能夠保證每次安裝的是最新的包。如果yum install在單獨(dú)的run中執(zhí)行,則會(huì)使用yum update創(chuàng)建的鏡像層,而這一層可能是很久以前緩存的。

cmd命令

cmd指令允許用戶指定容器的默認(rèn)執(zhí)行的命令。此命令會(huì)在容器啟動(dòng)且docker run沒(méi)有指定其他命令時(shí)運(yùn)行。下面是一個(gè)例子:

cmd echo 'Hello world'

運(yùn)行容器docker run -it [image]將輸出:

Hello world

但當(dāng)后面加上一個(gè)命令,比如docker run -it [image] echo hi,cmd會(huì)被忽略掉,命令echo hi將被執(zhí)行:

hi

如果存在多個(gè)cmd命令,則只會(huì)執(zhí)行最后一個(gè)cmd命令。

entrypoint命令

entrypoint的exec格式用于設(shè)置容器啟動(dòng)時(shí)要執(zhí)行的命令及其參數(shù),同時(shí)可通過(guò)cmd命令或者命令行參數(shù)提供額外的參數(shù)。entrypoint中的參數(shù)始終會(huì)被使用,這是與cmd命令不同的一點(diǎn)。下面是一個(gè)例子:

entrypoint ['echo', 'Hello']

當(dāng)容器通過(guò)docker run -it [image]啟動(dòng)時(shí),輸出為:

Hello

而如果通過(guò)docker run -it [image] morris啟動(dòng),則輸出為:

Hello morris

再來(lái)看一個(gè)例子,Dockerfile為:

entrypoint ['echo', 'Hello']cmd ['world']

當(dāng)容器通過(guò)docker run -it [image]啟動(dòng)時(shí),輸出為:

Hello world

而如果通過(guò)docker run -it [image] morris啟動(dòng)時(shí),輸出為:

Hello morris

entrypoint中的參數(shù)始終會(huì)被使用,而cmd的額外參數(shù)可以在容器啟動(dòng)時(shí)動(dòng)態(tài)替換掉。

同樣的,如果存在多個(gè)entrypoint命令,則只會(huì)執(zhí)行最后一個(gè)entrypoint命令。

總結(jié) 使用run指令安裝應(yīng)用和軟件包,構(gòu)建鏡像。 如果Docker鏡像的用途是運(yùn)行應(yīng)用程序或服務(wù),比如運(yùn)行一個(gè)MySQL,應(yīng)該優(yōu)先使用Exec格式的entrypoint指令。cmd可為entrypoint提供額外的默認(rèn)參數(shù),同時(shí)可利用docker run命令行替換默認(rèn)參數(shù)。 如果想為容器設(shè)置默認(rèn)的啟動(dòng)命令,可使用cmd指令。用戶可在docker run命令行中替換此默認(rèn)命令。

到此這篇關(guān)于docker中的run/cmd/entrypoint的區(qū)別詳解的文章就介紹到這了,更多相關(guān)docker run/cmd/entrypoint內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Docker
相關(guān)文章:
主站蜘蛛池模板: 欧美丝足 | 丁香六月婷婷 | aa一级片| 成人中文字幕在线观看 | 免费在线黄网站 | 轻轻碰在线视频免费视频 | 五月婷婷综合色 | 成人免费淫片在线费观看 | 成人性爱视频在线观看 | 国产激情一级毛片久久久 | 国产伦精品一区三区视频 | 国产大秀视频一区二区三区 | 久久久精品国产 | 真人一级毛片免费完整视 | 亚洲精品欧美精品一区二区 | 精品欧美一区二区精品久久 | 97欧美在线看欧美视频免费 | 一道本不卡免费视频 | 久久精品午夜视频 | 免费国产草莓视频在线观看黄 | 97国产视频| 亚洲精品一区二区乱码在线观看 | 亚洲精品一区二区三区婷婷 | 国产成人www免费人成看片 | 全黄一级裸片视频免费区 | 国产一区二区三区鲁婷婷 | 无码中文字幕乱在线观看 | 日韩中出| 小优视频在线观看网 | 国产成人午夜极速观看 | 久久久精品成人免费看 | 在线日本妇人成熟免费观看 | 日本香蕉一区二区在线观看 | 尤物网站永久在线观看 | 国产精品一区二区三区四区 | 中文字幕欧美日韩一 | 久久99视频 | 色y情视频免费看 | 欧美精品亚洲 | 可以免费看的毛片 | 一级特黄特黄毛片欧美的 |