中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

docker怎么打包commit和Dockerfile

發布時間:2023-03-13 11:21:06 來源:億速云 閱讀:173 作者:iii 欄目:開發技術

本篇內容主要講解“docker怎么打包commit和Dockerfile”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“docker怎么打包commit和Dockerfile”吧!

    構建鏡像

    構建鏡像的兩種方法:docker commit和docker build。

    通過這2種方式構建出來的鏡像大小都是一樣的;那么既然這2種方式都一樣,我們應該使用哪一種呢?

    commit

    用戶提交對容器的修改,并生成新的鏡像。

    docker commit -a="作者" -m="說明"  -p 容器id/容器名稱 鏡像新名稱:鏡像版本
    
    # 舉例,制作當前的tomcat容器生成鏡像
    docker commit -a="yexindong" -m="首次制作的鏡像" tomcat_1 mytomcat:1.0
    
    # 參數說明
        -a :提交的鏡像作者;
        -c :使用Dockerfile指令來創建鏡像;
        -m :提交時的說明文字;
        -p :在commit時,將容器暫停。

    dockerFile

    特點

    • 每個指令都必須是大寫

    • 執行順序是從上到下順序執行

    • # 表示注釋

    • 每個指令都會創建提交一個新的鏡層,并提交(每個指令都是一個docker commit)

    • dockerFile是面向開發人員的;由開發人員構建鏡像,就需要寫dockerFile文件,然后將鏡像交付給運維直接部署即可;不需要運維配置繁雜的jvm參數命令;

    • dockerFile正在逐漸稱為企業的交付標注,所以開發人員必須要掌握;

    dickerFile 指令

    使用dockerFile創建鏡像,實際上就是用腳本文件的方式創建;腳本內指令如下

    • FROM:指定基礎鏡像(它的媽媽是誰)

    • MAINTAINER:指定作者(告訴別人,是誰創造了它),一般都是姓名 + 郵箱

    • LABEL:指定標簽信息

    • USER:設置容器運行時的用戶

    • RUN:在build過程要運行的命令  (在容器外運行,也就是在宿主機運行的命令,在這里我們可以給容器安裝一些應用程序 yum install xxxx)

    • ADD:添加文件到鏡像中(往它肚子里放點東西),如果.tar.gz文件的話, 會自動解壓

    • COPY:類似ADD,將文件拷貝到鏡像,不會解壓壓縮文件

    • ENV:設置環境變量

    • VOLUME:設置文件掛載(給它一個存放行李的地方),默認是匿名掛載

    • EXPOSE:暴露端口,指定容器運行時開放的端口,運行也需要開放這個端口才能訪問  docker run -d  -p 8080:8080 鏡像id (打開一扇窗,讓風(數據)可以來去自如)

    • CMD:容器運行時要執行的命令(在容器內運行的命令),可用來運行默認要運行的程序,只有最后一個CMD才會運行,且只運行一次

    • ENTRYPOINT:和CMD一樣,但是可以追加命令;

    • ONBIUILD:當構建一個被繼承dockerFile,這個時候就會運行ONBUILD 指令,屬于觸發指令

    • WORKDIR:指定工作目錄,也就是登陸后默認進去的目錄;

    指令用法

    FROM

    FROM centos

    MAINTAINER

    MAINTAINER yexindong<xxx@163.com>

    USER

    指定用戶運行,默認使用root用戶,在docker run 中可以通過 -u 選項來覆蓋USER指令的設置。

    如果不是內置帳戶,則必須首先創建該用戶;

    USER root

    ENV

    # 環境變量可以隨便設置,MYPATH為key ,/user/local是值
    ENV MYPATH /user/local

    EXPOSE

    # 開放單個端口
    EXPOSE 80
    
    # 開放多個端口
    EXPOSE 22 80 8080 3306 8009 8090

    ADD

    # file 是你當前宿主機的文件名稱
    # /root/home 是你要將file打包到鏡像的目錄
    ADD file /root/home

    COPY

    用法與ADD一致,區別是COPY指令不會解壓文件

    COPY  file /root/home

    CMD

    容器內運行命令,只能運行一個命令

    # 第一種用法
    CMD echo 11
    # 第二種用法
    CMD ["echo","33"]

    ENTRYPOINT

    容器內運行命令,用法和CMD一致,區別是可以運行多個命令

    # 定義多個 ENTRYPOINT 就可以運行多個命令
    ENTRYPOINT ["ls","-l"]
    ENTRYPOINT ["./start.sh"]
    ENTRYPOINT ps -ef | grep tomcat

    CMD 和 ENTRYPOINT 的區別

    • CMD 相同的指令只有最后一個會生效

    • ENTRYPOINT可以追加命令;

    使用 dockerFile創建鏡像

    那么現在我們就自己一個tomcat的鏡像,首先創建一個文件 dockerFile_1

    vim dockerFile_1

    腳本內容如下,注意,腳本內的關鍵字必須是大寫的,VOLUME 是匿名掛載的

    FROM centos
    
    RUN yum install net-tools.x86_64 -y
    RUN yum -y install vim
    RUN yum install vi -y
    VOLUME ["/data/tomcat_file_1","/data/tomcat_file_2"]
    EXPOSE 8080
    # 打印當前時間
    CMD date
    WORKDIR /root

    創建好腳本文件后,就可以就行構建了,注意后面那個點

    docker build -f dockerFile_1 -t xindong_centos_3:1.1 .
    
    # 說明
     -f 需要構建的腳本文件
     -t tag的縮寫,構建后的鏡像名稱:版本號

    運行命令后展示以下信息,就表示已經構建成功了

    Sending build context to Docker daemon  1.802GB
    Step 1/8 : FROM centos
     ---> 5d0da3dc9764
    Step 2/8 : RUN yum install net-tools.x86_64 -y
     ---> Using cache
     ---> a3d489e47eeb
    Step 3/8 : RUN yum -y install vim
     ---> Using cache
     ---> f7dfc03c0fd9
    Step 4/8 : RUN yum install vi -y
     ---> Using cache
     ---> c111382ba821
    Step 5/8 : VOLUME ["data/tomcat_file_1","/data/tomcat_file_2"]
     ---> Using cache
     ---> 37a5e93cbe4a
    Step 6/8 : EXPOSE 8080
     ---> Using cache
     ---> 1a2305853377
    Step 7/8 : CMD date
     ---> Using cache
     ---> 8102785d418d
    Step 8/8 : WORKDIR /root
     ---> Using cache
     ---> ad8a585d32e3
    Successfully built ad8a585d32e3
    Successfully tagged xindong_centos_3:latest

    查看鏡像,這就是我們剛剛創建好的鏡像

    [root@VM_0_5_centos ~]# docker images
    REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
    xindong_tomcat   1.1       f72aa7e90980   37 seconds ago   680MB

    運行這個鏡像

    # 通過鏡像id運行
    docker run -d 鏡像id/鏡像名稱
    
    # 通過鏡像名稱運行
    docker run -d 鏡像名稱:版本號

    鏡像保存、加載

    如果需要將自己構建的鏡像發送給別人,又不想通過倉庫來共享,就可以用鏡像保存的功能,

    鏡像保存

    首先我們將鏡像以文件的方式保存到本地磁盤,使用save命令

    docker save 鏡像id/鏡像名稱 -o /本地目錄/文件名稱
    # 比如這樣
    docker save ad8a585d32e3 -o /root/dockerFile/xx.tar
    # 運行后,就可以看到,文件已經保存成功了
    [root@VM_0_5_centos dockerFile]# ll
    total 356440
    -rw------- 1 root root 364991488 Oct 28 18:45 xx.tar

    加載已保存的鏡像

    使用load命令加載,看到如下內容,表示鏡像已經加載成功了

    [root@VM_0_5_centos dockerFile]# docker load -i /root/dockerFile/xx.tar 
    2fefb3e7f055: Loading layer [==================================================>]   47.6MB/47.6MB
    8b589f61fd94: Loading layer [==================================================>]  58.82MB/58.82MB
    753a6b1d88c8: Loading layer [==================================================>]  19.99MB/19.99MB
    Loaded image ID: sha256:ad8a585d32e34b301aab4b278704a908f6eca53884fd531a79859dd6054a22ae

    接下來我們看看鏡像已經加載好了,但是還沒有名字

    [root@VM_0_5_centos dockerFile]# docker images
    REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
    <none>       <none>    ad8a585d32e3   2 hours ago   356MB

    接下來使用tag命令給這個鏡像起個名字和版本號吧

    [root@VM_0_5_centos dockerFile]# docker tag ad8a585d32e3 xindong_tomcat_2:1.0
    
    # 在看看鏡像,已經有名字了
    [root@VM_0_5_centos dockerFile]# docker images
    REPOSITORY         TAG       IMAGE ID       CREATED       SIZE
    xindong_tomcat_2   1.0       ad8a585d32e3   2 hours ago   356MB

    區別

    • 使用commit的話,其他人或者過一段時間后自己也不知道這個鏡像是怎么做出來的,都安裝了什么。。但是使用Dockerfile構建的鏡像,我們能夠很清楚看到是執行了哪些命令。

    • 既然使用docker commit這么不方便,那我們為什么還要學習它呢?其實仔細想一下docker build的每一步構建出來的鏡像是不是就是通過docker commit構建出來的。因此學習docker commit可以讓我們更好的理解docker build;

    其實說白了,不管是docker commit 和是dockefile,都是將目前已有的鏡像經過處理后在生成一個新的鏡像,它們之間的流程圖如下

    docker怎么打包commit和Dockerfile

    到此,相信大家對“docker怎么打包commit和Dockerfile”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    介休市| 丹寨县| 卢龙县| 贵德县| 麻江县| 乌兰浩特市| 舒城县| 绥阳县| 吴川市| 沅江市| 安阳市| 德化县| 西青区| 焉耆| 女性| 财经| 开平市| 平舆县| 晋中市| 石泉县| 西华县| 吉木萨尔县| 南宁市| 界首市| 聂拉木县| 肇庆市| 沿河| 北宁市| 招远市| 澄江县| 沾益县| 清水县| 贞丰县| 靖远县| 九江县| 运城市| 阜平县| 温泉县| 垫江县| 电白县| 任丘市|