国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

docker的run,cmd,entrypoint分析和對比

這篇具有很好參考價值的文章主要介紹了docker的run,cmd,entrypoint分析和對比。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

寫在前面

本文一起看下Dockerfile中經(jīng)常用到的幾個類似命令,RUN,CMD,ENTRYPOINT。

1:容器是怎么來的?

想要有容器我們就必須先創(chuàng)建鏡像,而想要有鏡像,我們則必須寫一個用來描述想要創(chuàng)建的鏡像的文件,這個文件我們一般叫做Dockerfile(非強制),則容器怎么來的就如下圖:

docker的run,cmd,entrypoint分析和對比

經(jīng)過上圖的過程1我們就有了鏡像,經(jīng)過過程2我們就有了容器了,知道了這個過程,我們就可以來正式開始分析RUN,CMD,ENTRYPOINT命令了。

2:RUN

docker的run,cmd,entrypoint分析和對比

RUN命令是在上圖過程1中執(zhí)行的,如下的Dockerfile:

FROM busybox
WORKDIR /var
RUN pwd

則執(zhí)行docker build時就會輸出pwd的結(jié)果:

dongyunqi@dongyunqi-virtual-machine:~$ docker build -t test-push-dockerhub:0.1 -f howPwd.txt helloworld-app/
Sending build context to Docker daemon  8.738kB
Step 1/3 : FROM busybox
 ---> 827365c7baf1
Step 2/3 : WORKDIR /var
    /var # 這里就是pwd的輸出,其實輸出的就是工作目錄,不過輸出的到底是什么此時不重要,我們主要是驗證pwd在docker build時執(zhí)行了
Step 3/3 : RUN pwd
 ---> Using cache
 ---> 7975c01019bd
Successfully built 7975c01019bd

3:CMD

在容器啟動時執(zhí)行的命令,一般用來啟動應(yīng)用等,如下Dockerfile:

dongyunqi@dongyunqi-virtual-machine:~/test$ cat testEntrypoint.txt 
FROM busybox
CMD echo "hello world"

構(gòu)建:

dongyunqi@dongyunqi-virtual-machine:~/test$ docker build -t test-entrypoint:v0.1 -f testEntrypoint.txt .
...

運行容器:

dongyunqi@dongyunqi-virtual-machine:~/test$ docker run --rm test-entrypoint:v0.1
hello world

可以看到正常輸出了。另外如果是有多個CMD只會保留最后一個,如下:

FROM busybox
CMD echo "hello world"
CMD echo "hello world1111"

測試:

dongyunqi@dongyunqi-virtual-machine:~/test$ docker build -t test_entrypoint:v0.1 -f testEntrypoint.txt .
Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM busybox
 ---> 827365c7baf1
Step 2/3 : CMD echo "hello world"
 ---> Using cache
 ---> c596d2e7bfb5
Step 3/3 : CMD echo "hello world1111"
 ---> Running in 9369670af208
Removing intermediate container 9369670af208
 ---> d7d08688d050
Successfully built d7d08688d050
Successfully tagged test_entrypoint:v0.1
dongyunqi@dongyunqi-virtual-machine:~/test$ docker run --rm test_entrypoint:v0.1
hello world1111
dongyunqi@dongyunqi-virtual-machine:~/test$

可以看到只輸出了hello world1111。以上的是shell格式,我們也可以用Exec 格式,如下:

dongyunqi@dongyunqi-virtual-machine:~/test$ cat testEntrypoint.txt 
FROM busybox
CMD ["/bin/echo", "Hello world222"]  

測試:

dongyunqi@dongyunqi-virtual-machine:~/test$ docker build -t test_entrypoint:v0.1 -f testEntrypoint.txt .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM busybox
 ---> 827365c7baf1
Step 2/2 : CMD ["/bin/echo", "Hello world222"]
 ---> Running in d69c8fdbb1a4
Removing intermediate container d69c8fdbb1a4
 ---> 5e0920f3e988
Successfully built 5e0920f3e988
Successfully tagged test_entrypoint:v0.1
dongyunqi@dongyunqi-virtual-machine:~/test$ docker run --rm test_entrypoint:v0.1
Hello world222

可以看到正常輸出了Hello world222。但是如果是在docker run時指定了啟動命令,則會覆蓋CMD,如下:

dongyunqi@dongyunqi-virtual-machine:~/test$ docker run --rm test_entrypoint:v0.1 /bin/echo "hey man!"
hey man!

4:ENTRYPOINT

ENTRYPOINT在Dockerfile中的表現(xiàn)和CMD是一樣的,但是ENTRYPOINT不會被docker run中指定的命令覆蓋,但是也分為兩種情況,如果是使用shell格式的話則docker run中指定的命令將會被忽略,如下:

dongyunqi@dongyunqi-virtual-machine:~/test$ cat testEntrypoint.txt 
FROM busybox
ENTRYPOINT echo "Hello world44444"  
dongyunqi@dongyunqi-virtual-machine:~/test$ docker build -t test_entrypoint:v0.1 -f testEntrypoint.txt .
Sending build context to Docker daemon  2.048kB
...
dongyunqi@dongyunqi-virtual-machine:~/test$ docker run --rm test_entrypoint:v0.1 11111111111/bin/echo "hey man!"
Hello world44444

如果是Exec格式的話則會被當(dāng)做參數(shù)追加到后面,如下:

dongyunqi@dongyunqi-virtual-machine:~/test$ cat testEntrypoint.txt 
FROM busybox
ENTRYPOINT ["echo", "Hello world555"]  
dongyunqi@dongyunqi-virtual-machine:~/test$ docker build -t test_entrypoint:v0.1 -f testEntrypoint.txt .
Sending build context to Docker daemon  2.048kB
...
dongyunqi@dongyunqi-virtual-machine:~/test$ docker run --rm test_entrypoint:v0.1 11111111111/bin/echo "hey man!"
Hello world555 11111111111/bin/echo hey man!

相當(dāng)于是在Dockerfile中寫的是ENTRYPOINT ["echo", "Hello world555", "11111111111/bin/echo", "hey man!"]

4:比較

RUN:在docker build生成鏡像時執(zhí)行。
CMD:在docker run時執(zhí)行,但其會被docker run中指定的命令覆蓋
ENTRYPOINT:在docker run時執(zhí)行,但不會被docker run中指定的命令覆蓋,如果是ENTRYPOINT使用shell格式則會忽略,使用Exec格式則會作為參數(shù)追加后執(zhí)行

所以RUN比較獨立,CMD和ENTRYPOINT幾乎一樣,只是在docker run指定指定命令時的表現(xiàn)不同。

寫在后面

參考文章列表:

docker精簡入門(五)run&cmd&enterpoint區(qū)別 。文章來源地址http://www.zghlxwxcb.cn/news/detail-427645.html

到了這里,關(guān)于docker的run,cmd,entrypoint分析和對比的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Dockerfile: CMD與ENTRYPOINT區(qū)別

    Dockerfile: CMD與ENTRYPOINT區(qū)別

    CMD和ENTRYPOINT這兩個命令,我接觸到的是用在了Dockerfile中用于構(gòu)建容器。 CMD:The main purpose of a CMD is to provide defaults for an executing container. CMD的主要用途是為正在執(zhí)行的容器提供默認(rèn)值。也就是指定這個容器啟動的時候要運行的命令。 ENTRYPOINT:也是指定這個容器啟動的時候要運

    2024年02月02日
    瀏覽(19)
  • Dockerfile里的ENTRYPOINT和CMD

    RHEL 9.3 Docker Community 24.0.7 如果懶得看詳細(xì)介紹,可以直接看總結(jié): ENTRYPOINT 和 CMD 都可以單獨使用,指定啟動容器時所運行的命令以及參數(shù)。 更常見的用法是把 ENTRYPOINT 和 CMD 組合使用: ENTRYPOINT 指定啟動容器時所運行的命令和不變的參數(shù)。在啟動容器時可以顯式覆蓋,但一

    2024年01月24日
    瀏覽(17)
  • 48-Dockerfile-CMD/ENTRYPOINT指令

    48-Dockerfile-CMD/ENTRYPOINT指令

    前言 本篇來學(xué)習(xí)下Dockerfile中的CMD/ENTRYPOINT指令 CMD 作用 啟動容器時默認(rèn)執(zhí)行的命令 說明: 一個 Dockerfile 只有一個 CMD 指令,只有最后一個 CMD 指令生效 使用 docker run -d xxx CMD 命令是可以覆蓋 Dockerfile 中的 CMD 指令的 格式 使用示例 新建dockerfile 制作鏡像 運行容器 可以看到只執(zhí)

    2024年02月04日
    瀏覽(18)
  • dockerfile用ENTRYPOINT好還是用CMD好

    在 Dockerfile 中使用 `ENTRYPOINT` 和 `CMD` 都有其用途和優(yōu)劣勢,具體取決于你的應(yīng)用和需求。這兩個指令的主要區(qū)別在于如何處理容器啟動時的命令參數(shù)。 1. `CMD` 指令: ? ?- `CMD` 用于定義容器啟動時的默認(rèn)命令,但它可以在運行容器時被替代。如果在運行容器時提供了命令參數(shù)

    2024年02月08日
    瀏覽(23)
  • docker ENTRYPOINT 執(zhí)行多條命令

    如何在docker里面同時啟動多個pm2進(jìn)程_祥仔先生的博客-CSDN博客_docker pm2 ENTRYPOINT 命令1 命令2 命令3 dockerfile中添加: RUN chmod -x setup.sh ENTRYPOINT [\\\"sh\\\", \\\"./setup.sh\\\"]

    2024年02月12日
    瀏覽(20)
  • 【云計算 | Docker】Docker容器后臺運行不了?entrypoint在作妖?

    使用鏡像 alpine 起個容器,使其保持后臺運行,正常情況有如下的效果,可以發(fā)現(xiàn)容器保持運行狀態(tài)。 但是有時候一些容器鏡像按照上述方法卻達(dá)不到預(yù)期效果。比如下面這個容器,一創(chuàng)建完就退出了。 那么問題出在哪個環(huán)節(jié)呢? 首先明確一個Docker容器的特性, docker容器運

    2024年02月14日
    瀏覽(21)
  • Docker 制作 MySQL 鏡像并使用 `/docker-entrypoint-initdb.d/` 機制初始化數(shù)據(jù)

    Docker 制作 MySQL 鏡像并使用 `/docker-entrypoint-initdb.d/` 機制初始化數(shù)據(jù)

    制作一個 MySQL Docker 鏡像并初始化數(shù)據(jù)庫信息 win 11 Docker-Desktop 4.14.0 (91374) 啟動一個MySQL容器很容易。如何初始化數(shù)據(jù)呢? 大概我們會嘗試很多操作,比如百度常見到 使用 CMD 命令調(diào)用shell腳本,通過shell腳本處理初始化數(shù)據(jù)等等,經(jīng)過實踐,這些都不太方便。 其實,MySQL 官方提

    2024年01月18日
    瀏覽(852)
  • 【Docker】什么是Docker呢?本文帶你洞悉

    【Docker】什么是Docker呢?本文帶你洞悉

    ??歡迎來到本文?? ??個人簡介:陳童學(xué)哦,目前專攻C/C++、Python、Java等方向,一個正在慢慢前行的普通人。 ??系列專欄:陳童學(xué)的日記 ??其他專欄:C++STL、藍(lán)橋杯,喜歡OJ的小伙伴可以看一手 ??希望各位→點贊?? + 收藏?? + 留言?? ? ??學(xué)習(xí)應(yīng)使你快樂!望與諸君

    2024年02月12日
    瀏覽(16)
  • 使用docker-compose啟動docker鏡像報錯exec ./docker-entrypoint.sh: no such file or directory

    使用docker-compose啟動docker鏡像報錯exec ./docker-entrypoint.sh: no such file or directory

    報錯原因:exec ./docker-entrypoint.sh: no such file or directory 我們可以在linux下通過cat -v命令查看.sh文件 ? 例: cat -v Dockerfile ? ? ? ? WORKDIR /tools/*******/^M ????????RUN chmod a+x /tools/*********/docker-entrypoint.sh^M ????????ENTRYPOINT [\\\"./docker-********.sh\\\"]^M 這種后綴有^M的即為編碼錯誤造成的

    2024年02月15日
    瀏覽(28)
  • docker容器日志報錯:/docker-entrypoint.sh: exec: line 10: /bin/bash: not found(去掉/bin/bash)

    docker容器日志報錯:/docker-entrypoint.sh: exec: line 10: /bin/bash: not found(去掉/bin/bash)

    這個錯誤提示表明eclipse-mosquitto鏡像生成的容器內(nèi)部找不到 /bin/bash 這個命令,可能是由于在容器鏡像中沒有安裝 Bash 或在執(zhí)行腳本時路徑不正確導(dǎo)致的。如果你使用的是官方的 eclipse-mosquitto 鏡像,那么這個問題一般不會出現(xiàn)。 如果你在 Dockerfile 中指定了自己的 ENTRYPOINT 或

    2024年02月09日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包