1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Docker必備基礎(chǔ)知識

        共 4659字,需瀏覽 10分鐘

         ·

        2021-08-06 12:08

        【GiantPandaCV導(dǎo)語】很多算法攻城獅朋友在日常工作中都會接觸和使用到docker來進行自己的訓(xùn)練環(huán)境配置或者部署環(huán)境搭建。本次和大家分享一些筆者總結(jié)的docker基礎(chǔ)知識。

        一、docker是什么?

        docker可以實現(xiàn)虛擬機隔離應(yīng)用環(huán)境的功能,并且開銷比虛擬機小。

        二、身為算法攻城獅,我們要掌握docker的哪些知識?

        1)docker的基礎(chǔ)組成部分

        docker由:客戶端、守護進程、鏡像、容器和倉庫構(gòu)成。

        客戶端(client)和守護進程(daemon)

        docker的客戶端就是你的操作端,你在這里輸入docker的一些指令,守護進程就是docker的服務(wù)器端,這一端會執(zhí)行你的指令并返回結(jié)果

        鏡像(image)

        是一個層疊的只讀文件系統(tǒng),docker通過讀取其中的文件來啟動一個指定的容器

        容器(containter)

        使用者通過啟動某個指定鏡像而構(gòu)件的一個虛擬的操作系統(tǒng)(guest os)就叫做容器,在容器內(nèi)就像在一個真正的系統(tǒng)內(nèi)操作一樣。

        倉庫

        倉庫放置了別人做好的多個鏡像??筛鶕?jù)需要下載

        2)docker基本操作:安裝、倉庫設(shè)置、啟動、關(guān)閉、退出、進入

        docker安裝

        https://yeasy.gitbook.io/docker_practice/install/ubuntu

        docker的鏡像加速器,用以從官方鏡像倉庫中拉取自己需要的鏡像

        https://yeasy.gitbook.io/docker_practice/install/mirror

        啟動docker

        sudo systemctl daemon-reload  #重新加載某個服務(wù)的配置文件
        sudo systemctl restart docker #重新確定docker

        基礎(chǔ)操作

        # 獲取鏡像
        docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標(biāo)簽]
        # 啟動鏡像
        docker run -it ubuntu:18.04 bash # dokcer run的參數(shù)可通過--help來查看
        # 關(guān)閉容器
        docker stop -t=ContainerID 或 docker kill -t=ContainerID
        # 暫時退出鏡像
        exit
        # 重新進入鏡像
        sudo docker exec -it 067 /bin/bash
        # 啟動一個已停止的容器
        docker start 067
        # 查看當(dāng)前docker上容器的運行狀態(tài)
        docker ps

        3)docker進階操作:

        請通過 docker command --help查看

        三、使用別人的鏡像具體案例

        # 拉取鏡像
        docker pull ubuntu:18.04 #從倉庫中拉取鏡像
        # 查看本地的image
        docker images #查看本地倉庫內(nèi)的鏡像
        # 用image啟動一個容器
        docker run -it ubuntu:18.04 bash
        # 暫時退出并重新進入容器
        exit
        docker ps -a
        sudo docker exec -it 067 /bin/bash  #此處067是上一指令查到的需要進入的容器ID
        # 在容器內(nèi)進行操作
        和ubuntu系統(tǒng)內(nèi)的操作一致
        cat /etc/os-release

        四、做自己的鏡像具體案例

        # 拉取基礎(chǔ)鏡像
        docker pull ubuntu:18.04 #從倉庫中拉取鏡像
        # 制作自己的Dockerfile
        mkdir ppp&&cd ppp
        touch Dockerfile 或 vi Dockerfile
        # 制作鏡像
        docker build -t aaa:bbb .
        docker images #在本地鏡像列表里就可以看到一個tag為aaa:bbb的image
        # 上傳鏡像
        docker commit -a "aaa.com" -m "my apache" a404c6c174a2  ccc:ddd

        Dockerfile說明

        是用來逐層構(gòu)件一個image的腳本文件,是一個文本文件,其內(nèi)包含了一條條的指令(Instruction),每一條指令構(gòu)建一層,因此每一條指令的內(nèi)容,就是描述該層應(yīng)當(dāng)如何構(gòu)建。

        FROM ubuntu:18.04  # 指定基礎(chǔ)鏡像 如果為scratch代表從下一行開始是鏡像的第一層
        RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html # RUN指令用來執(zhí)行命令,每一行代表新建docker的一個layer
        #能在一個layer內(nèi)執(zhí)行的指令就通過&& 進行聯(lián)接,并可應(yīng)用shell中的換行符\
        #在dockerfile每層都要檢查,下載,展開的多余文件,以及緩存等能刪除的盡量都去掉

        COPY #COPY 指令將從構(gòu)建上下文目錄中 <源路徑> 的文件/目錄復(fù)制到新的一層的鏡像內(nèi)的 <目標(biāo)路徑> 位置。
        COPY package.json /usr/src/app/ # 將當(dāng)前上下文路徑的json文件復(fù)制到image的指定路徑下

        AND #豐富了COPY的功能,但是會降低構(gòu)件image速度,如果不需要自動解壓縮,則不推薦使用該指令

        CMD # ????????? 還沒理解

        ENTRYPOINT # 當(dāng)存在 ENTRYPOINT 后,CMD 的內(nèi)容將會作為參數(shù)傳給ENTRYPOINT,從而達到了我們預(yù)期的效果。

        ENV #用來設(shè)置環(huán)境變量  ENV <key> <value> 或 ENV <key1>=<value1> <key2>=<value2>...
        ENV VERSION=1.0 DEBUG=on \
            NAME="Happy ONE"

        ENV LD_LIBRARY_PATH=\
        $LD_LIBRARY_PATH:\
        $NAME/alpha

        ARG # ARG <參數(shù)名>[=<默認(rèn)值>] Dockerfile 中的 ARG 指令是定義參數(shù)名稱,以及定義其默認(rèn)值。該默認(rèn)值可以在構(gòu)建命令 docker build 中用 --build-arg <參數(shù)名>=<值> 來覆蓋

        ARG DOCKER_USERNAME=library # 注意:在FROM之前定義的ARG參數(shù),會消失,在FROM后需要重新定義
        # ARG 所設(shè)置的構(gòu)建環(huán)境的環(huán)境變量,在將來容器運行時是不會存在這些環(huán)境變量的。但是不要因此就使用 ARG 保存密碼之類的信息,因為 docker history 還是可以看到所有值的。

        VOLUME # 用于指定image啟動時掛載到容器中的默認(rèn)卷,而不是寫入容器存儲層
        VOLUME /data # VOLUME ["<路徑1>", "<路徑2>"...] 或 VOLUME <路徑>
        在image啟動時可替換
        docker run -d -v mydata:/data xxxx #其中的 -v mydata:/data 就是掛載宿主機的卷到容器內(nèi)

        EXPOSE # EXPOSE <端口1> [<端口2>...] EXPOSE 指令是聲明容器運行時提供服務(wù)的端口,這只是一個聲明,在容器運行時并不會因為這個聲明應(yīng)用就會開啟這個端口的服務(wù)
        # 在 Dockerfile 中寫入這樣的聲明有兩個好處,一個是幫助鏡像使用者理解這個鏡像服務(wù)的守護端口,以方便配置映射;另一個用處則是在運行時使用隨機端口映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的端口

        WORKDIR # WORKDIR <工作目錄路徑> 使用 WORKDIR 指令可以來指定工作目錄(或者稱為當(dāng)前目錄),以后各層的當(dāng)前目錄就被改為指定的目錄,如該目錄不存在,WORKDIR 會幫你建立目錄。

        USER  # USER <用戶名>[:<用戶組>] 指定當(dāng)前用戶
        HEALTHCHECK
        ONBUILD
        LEBEL
        SHELL #SHELL 指令可以指定 RUN ENTRYPOINT CMD 指令的 shell,Linux 中默認(rèn)為 ["/bin/sh", "-c"]   
        Dockerfile 多階段構(gòu)建

        五、一些docker使用時的小習(xí)慣

        docker的文件管理系統(tǒng)是逐層實現(xiàn)的,所以構(gòu)件一個docker的image時,不要添加過多的layers以避免image過大且過于復(fù)雜。


        - END - 


        歡迎加入GiantPandaCV交流群


        瀏覽 72
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            chinaxxxxhdvideos在线 | 日本无码 视频在线观看 | 五月天丁香婷婷亚洲 | 欧美黄视频 | 中文字幕++中文字幕明步 | 美女掰逼 | 少妇打野战 | 欧美视频成人 | 黄片大全在线 | 91乱伦视频 |