日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cmd该清华镜像_Docker动手教程3.3:容器镜像构建2

發布時間:2025/3/12 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cmd该清华镜像_Docker动手教程3.3:容器镜像构建2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內容摘要

  • dockerfile 常用指令
  • RUN/CMD/ENTRYPOINT區別

  • Dockerfile 常用指令

    前面初步講解了Dockerfile,這節詳細介紹Dockerfile用到的指令和語法。

    下面來看一個較為完整的Dockerfile,內容如下:

    # dockerfile hahaFROM centosMAINTAINER docker-test@example.comWORKDIR /mydirRUN touch mytextCOPY test .ADD busybox-1_29_0.tar.gz .ENV VERSION "1.0.2"CMD echo "I am cmd"CMD echo $VERSIONENTRYPOINT sleep 1000000

    先不解釋上面命令的意義,運行該文件構建鏡像。

    在構建鏡像前,先在根目錄下創建 test 文件夾,在其下面創建Dockerfile,以及準備構建使用的test文件,使用Xftp將busybox的壓縮包上傳到test目錄下。

    具體操作見下面操作截圖:

    說明:busybox文件的壓縮包自行在github上下載。


    構建鏡像,命令為:

    docker build -t centos-with-busybox .

    從上面 Step 信息可以看出,構建步驟是按照我們在Dockerfile中的命令先后順序執行的,最后生成的鏡像 SIZE 比基礎鏡像要多 9M。


    運行容器,檢查構建是否成功, 命令為:

    docker run -d --name centos-with-busybox1 centos-with-busybox

    進入容器可以看到當前目錄為 mydir,而且里面包含 創建的文件以及拷貝進去的文件,busybox壓縮包已經被解壓。


    使用docker history 指令查看剛才構建的鏡像:

    從紅框中可以看到 dockerfile 文件中執行的操作步驟。


    下面詳細解釋下 dockerfile 文件用到的命令:

    FROM:表示基于什么基礎鏡像進行構建

    MAINTAINER:構建者信息,說明是誰構建的

    WORKDIR:指定后續執行步驟的工作目錄,比如拷貝文件,創建文件操作在哪個目錄下執行

    RUN:在容器運行命令,比如創建文件 touch xxx.txt

    COPY:拷貝數據,即將主機上的文件拷貝到容器中去

    ADD:也是拷貝數據,不同的是,如果被拷貝文件是壓縮文件,那么拷貝到容器后會自動解壓縮

    ENV:指定環境變量,該環境變量可以在Dockerfile文件中使用,同時在容器中也生效

    CMD:容器啟動時運行的命令

    ENTRYPOINT:同CMD相似,但也有區別


    RUN/CMD/ENTRYPOINT 區別

    從上面可以看出 RUN/CMD/ENTRYPOINT 都可以運行命令,那它們的區別是什么呢?

    RUN 和 CMD/ENTRYPOINT的區別比較清楚:RUN主要用于在容器安裝軟件,操作文件和文件夾等,CMD/ENTRYPOINT主要用于啟動容器,但是有很大的差別。

    下面通過實驗逐步分析二者之不同:

    修改 Dockerfile 文件,內容如下:

    # dockerfile hahaFROM centosMAINTAINER docker-test@example.comWORKDIR /mydirRUN touch mytextCOPY test .ADD busybox-1_29_0.tar.gz .ENV VERSION "1.0.2"CMD echo "I am cmd"CMD echo $VERSION

    按照上面步驟重新構建鏡像并運行,命令為:

    docker run -it --name centos-with-busybox centos-with-busybox

    鏡像構建就不展示截圖,鏡像名為:centos-with-busybox,創建的容器也使用這個名字。

    可以看到容器運行結果為環境變量VERSION的版本信息,但是倒數第二行的CMD命令沒有輸出,說明只有最后一個CMD命令生效。


    下面換個方式運行容器,在 docker run 后面指定運行參數:

    命令為:

    docker run -it --name centos-with-busybox centos-with-busybox /bin/bash

    指定 /bin/bash 作為啟動參數,發現沒有輸出環境變量VERSION的版本信息,說明CMD命令被 /bin/bash 取代了。


    那么ENTRYPOINT會如何表現呢?

    修改Dockerfile,內容如下:

    # dockerfile hahaFROM centosMAINTAINER docker-test@example.comWORKDIR /mydirRUN touch mytextCOPY test .ADD busybox-1_29_0.tar.gz .ENV VERSION "1.0.2"CMD echo "I am cmd"CMD echo $VERSIONENTRYPOINT echo "I am entrypoint"

    先不加參數運行容器,命令為:

    docker run -it --name centos-with-busybox centos-with-busybox

    可見打印信息和Dockerfile中規定的字符串一致。

    帶上參數運行:

    docker run -it --name centos-with-busybox centos-with-busybox /bin/bash

    和上面一致,仍舊打印出一樣的字符串。

    對于ENTRYPOINT而言,無論 docker run 是否帶有執行命令,都會執行,而CMD則相反。

    問題:如果先后出現兩個ENTRYPOINT命令,那么先出現的會執行嗎?

    修改Dockerfile,內容如下:

    # dockerfile hahaFROM centosMAINTAINER docker-test@example.comWORKDIR /mydirRUN touch mytextCOPY test .ADD busybox-1_29_0.tar.gz .ENV VERSION "1.0.2"CMD echo "I am cmd"CMD echo $VERSIONENTRYPOINT echo "I am entrypoint 1"ENTRYPOINT echo "I am entrypoint 2"

    構建鏡像,并啟動容器,命令為:

    docker run -it --name centos-with-busybox centos-with-busybox

    只運行了第二個ENTRYPOINT指令,第一個被忽略。

    在這點上,ENTRYPOINT和CMD一樣,即如果有多條該命令,只會執行最后一條。


    CMD和ENTRYPOINT的區別決定了二者使用上不同:

    1、由于CMD命令可以被docker run的命令替換,因此它可以用來設置默認啟動命令,如果用戶不想使用默認命令,就可以在docker run指令中指定自己的容器啟動命令;

    2、ENTRYPOINT 是必須執行的命令,所以往往用來啟動應用程序或者服務,設置容器啟動命令最好使用ENTRYPOINT,不要使用CMD。

    3、ENTRYPOINT可以和CMD結合起來使用,充分結合二者的優點,可以使容器啟動更加方便。


    下面顯示下如何結合使用ENTRYPOINT和CMD兩個命令:

    修改Dockerfile,內容如下:

    FROM centosMAINTAINER docker-test@example.comWORKDIR /mydirRUN touch mytextCOPY test .ADD busybox-1_29_0.tar.gz .ENV VERSION "1.0.2"ENTRYPOINT ["echo

    總結

    以上是生活随笔為你收集整理的cmd该清华镜像_Docker动手教程3.3:容器镜像构建2的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。