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使用記錄

        共 4496字,需瀏覽 9分鐘

         ·

        2022-01-10 09:48

        ↑ 點擊藍字?關注極市平臺

        作者 | 小新?
        來源 | https://lhyxx.top?
        編輯 | 極市平臺

        極市導讀

        ?

        今天初次接觸Docker的使用,記錄一下自己的學習心得和理解,加深一下印象。?>>加入極市CV技術交流群,走在計算機視覺的最前沿

        Dockder是啥?

        首先需要理解幾個概念:鏡像,容器。

        什么是容器?

        簡單來說,操作系統(tǒng)在管理進程時,可以把整個操作系統(tǒng)看成一個大的容器,所有的進程在這一個容器中運行。因此這些進程之間有幾個特點:

        1. 進程之間能夠互相看見,能夠通信。這會導致不同進程之間的相互影響。
        2. 所有進程都使用同一個文件系統(tǒng)。這會導致不同進程之間的數據能夠被所有進程進行增刪改查,可能會造成進程間數據的破壞,從而影響其他進程的正常運行。
        3. 所有進程使用相同的系統(tǒng)資源。(如CPU,內存等),這樣導致進程之間存在搶占資源的問題。

        所以為了解決上述這些問題,我們需要為某些進程的運行提供獨立的運行環(huán)境,從而避免它影響其他正常的進程。容器的本質目的就是如此。

        引用一下對容器的解釋:容器就是一個視圖隔離、資源可限制、獨立文件系統(tǒng)的進程集合。所謂“視圖隔離”就是能夠看到部分進程以及具有獨立的主機名等;控制資源使用率則是可以對于內存大小以及 CPU 使用個數等進行限制。容器就是一個進程集合,它將系統(tǒng)的其他資源隔離開來,具有自己獨立的資源視圖。
        容器具有一個獨立的文件系統(tǒng),因為使用的是系統(tǒng)的資源,所以在獨立的文件系統(tǒng)內不需要具備內核相關的代碼或者工具,我們只需要提供容器所需的二進制文件、配置文件以及依賴即可。只要容器運行時所需的文件集合都能夠具備,那么這個容器就能夠運行起來。

        什么是鏡像?

        我們將這些容器運行時所需要的所有的文件集合稱之為容器鏡像。(簡單來說可以理解為容器運行所需要的所有的依賴文件構成的集合)

        那么怎么構建鏡像呢?
        通常情況下,我們會采用 Dockerfile 來構建鏡像,Dockerfile 可以看做是一系列的命令,這些命令都會對已有的文件系統(tǒng)進行操作,這樣就會帶來文件系統(tǒng)內容的變化,直到最終將容器運行所需的所有依賴文件都構建出來,就構造好了對應的鏡像。

        “容器”與“VM”

        聽起來容器和虛擬機(VM)作用非常像。但是想一想他們的差別還是比較明顯的:

        容器與VM的區(qū)別

        VM是從操作系統(tǒng)級別上進行隔離,因此隔離程度要大于容器,但也因此需要耗費更多的資源。

        容器則比較輕量級,但是隔離效果自然弱于VM。

        Docker安裝與配置

        Windows的安裝教程見 https://docs.docker.com/docker-for-windows/install/?spm=5176.12586973.0.0.573c2232pBtzGj,基本上下載安裝就好了。

        Ubuntu系統(tǒng)上可以直接輸入如下命令:

        $?sudo?apt-get?update
        $?sudo?apt?install?docker.io

        我運行的時候提示缺少containerd,只需要提前運行sudo apt install containerd進行安裝就好了。

        一些常用的命令

        • 查看所有鏡像:docker images
        • 查看當前正在運行的容器:docker ps
        • 查看所有容器(包含已退出的):docker ps \-a
        • 刪除鏡像:docker rmi 鏡像id
        • 刪除容器:docker rm 容器id
          (刪除鏡像時需要先刪除使用該鏡像的容器)
          (在刪除時還可能遇到如下情況,多個鏡像id相同,此時可以根據”REPOSITORY”和”TAR”進行刪除)
        • 其他命令見"Docker命令大全" —— https://www.runoob.com/docker/docker-command-manual.html?進行查閱。

        使用示例

        這里以天池比賽的Docker入門賽為例,看一下Docker完整的使用過程。

        任務描述

        • 輸出Hello world
        • 計算 /tcdata/num_list.csv中一列數字的總和。
        • 在/tcdata/num_list.csv文件中尋找最大的10個數,從大到小生成一個ListList.

        num_list.csv文件中只有一列不為負的整數,其中存在重復值。
        生成入口腳本run.sh,放置于鏡像工作目錄。運行后生成結果result.json放置于工作目錄(與run.sh同目錄),評分系統(tǒng)將根據result.json進行打分。json文件如下所示:

        {??
        ????"Q1":"Hello?world",?
        ????"Q2":sum值,?
        ????"Q3":[top10_list]?
        }

        天池的比賽提交規(guī)則就是提交一個鏡像,要求容器執(zhí)行之后能夠生成比賽要求的包含輸出結果的文件,然后根據結果進行成績判定。
        在這里,要輸出的結果就是result.json文件。

        使用過程

        整個過程主要包括:鏡像的構建,鏡像的推送,提交系統(tǒng)進行判定。

        1. 鏡像構建

        天池已準備了常用的Python基礎鏡像,可直接拉取使用:docker pull registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
        這個過程類似于導入python包一樣,在Dockerfile中就可以使用FROM命令來直接使用。

        然后我們在一個新文件夾中需要準備的就是如下幾個文件:

        ——
        ?|-Dockerfile
        ?|-hello_world.py
        ?|-run.sh

        其中,Dockerfile文件用來構建鏡像,示例如下:

        #?Base?Images
        ##?從天池基礎鏡像構建
        FROM?registry.cn-shanghai.aliyuncs.com/tcc-public/python:3

        ##?把當前文件夾里的文件構建到鏡像的根目錄下
        ADD?.?/

        ##?指定默認工作目錄為根目錄(需要把run.sh和生成的結果文件都放在該文件夾下,提交后才能運行)
        WORKDIR?/

        ##?鏡像啟動后統(tǒng)一執(zhí)行?sh?run.sh
        CMD?["sh",?"run.sh"]

        hello_world.py文件就是編寫的要實現題目中要求的文件。這里示例如下:

        import?json
        #?要求1的結果
        r1?=?"Hello?world"

        #?讀取數據
        data?=?[]
        with?open('tcdata/num_list.csv',?'r',?encoding='utf-8')?as?f:
        ?for?i?in?f:
        ??data.append(int(i))

        #?要求2的結果
        r2?=?sum(data)

        #?要求3的結果
        r3?=?sorted(data,?reverse=True)[:10]

        #?輸出結果文件
        result?=?{"Q1":?r1,?"Q2":?r2,?"Q3":?r3}
        with?open("result.json",?'w',?encoding='utf-8')?as?f:
        ?json.dump(result,?f)

        run.sh文件就是一個sh腳本文件,這里的作用就是執(zhí)行該目錄下的hello_world.py文件從而生成結果:

        python?hello_world.py

        2.鏡像的推送

        天池比賽需要將鏡像推送到阿里云鏡像倉庫進行提交,因此需要先注冊一個阿里云的鏡像服務(https://www.aliyun.com/product/acr?)免費開通鏡像托管。建議設置私有倉庫,并一定牢記倉庫密碼,后續(xù)提交需要使用。

        開通后進入鏡像倉庫,創(chuàng)建命名空間以及鏡像倉庫,倉庫類型設為私有,代碼源設為本地倉庫。

        創(chuàng)建成功之后,可以看到詳情頁,倉庫地址一般使用公網地址即可。

        然后我們構建我們本地的鏡像并推送到倉庫中:

        1. 執(zhí)行docker build -t 倉庫地址:版本號 .命令構建鏡像。倉庫地址是剛剛創(chuàng)建的倉庫地址的公網地址,版本號自己命名,用來區(qū)分每次構建的鏡像。最后的.是構建鏡像的路徑,因為是當前目錄,所以是.,不能省略。

        這里參考官方教程?(https://tianchi.aliyun.com/competition/entrance/231759/tab/174?spm=5176.12281978.0.0.37724127ZpsgRZ),假設倉庫地址是registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit,所以完整命令為:docker build \-t registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit

        1. 構建完成后可先驗證是否正常運行,正常運行后再進行推送。
          CPU鏡像:docker run your_image sh run.sh
          GPU鏡像:nvidia-docker run your_image sh run.sh

        2. 推送到鏡像倉庫 docker push registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0

        注意推送之前需要登錄登錄阿里云Docker Registry:

        sudo docker login \--username=用戶名 registry.cn-hangzhou.aliyuncs.com

        用于登錄的用戶名為阿里云賬號全名,密碼為開通服務時設置的密碼。

        3.天池系統(tǒng)提交

        推送完之后,就可以去天池系統(tǒng)進行提交了。

        鏡像提交

        根據【我的成績】中的分數和日志可以查看運行情況。

        如果覺得有用,就請分享到朋友圈吧!

        △點擊卡片關注極市平臺,獲取最新CV干貨

        公眾號后臺回復“transformer”獲取最新Transformer綜述論文下載~


        極市干貨
        課程/比賽:珠港澳人工智能算法大賽保姆級零基礎人工智能教程
        算法trick目標檢測比賽中的tricks集錦從39個kaggle競賽中總結出來的圖像分割的Tips和Tricks
        技術綜述:一文弄懂各種loss function工業(yè)圖像異常檢測最新研究總結(2019-2020)


        #?CV技術社群邀請函?#

        △長按添加極市小助手
        添加極市小助手微信(ID : cvmart4)

        備注:姓名-學校/公司-研究方向-城市(如:小極-北大-目標檢測-深圳)


        即可申請加入極市目標檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學影像/3D/SLAM/自動駕駛/超分辨率/姿態(tài)估計/ReID/GAN/圖像增強/OCR/視頻理解等技術交流群


        每月大咖直播分享、真實項目需求對接、求職內推、算法競賽、干貨資訊匯總、與?10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動交流~



        覺得有用麻煩給個在看啦~??
        瀏覽 37
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        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>
            国产妓女一区二区 | 中文字幕一区二区三区西施Av | 色 五月天四房国产 | 99偷拍| 日本一级特级毛片视频 | 在线观看免费黄网站 | 十八毛片18女人18毛片免费观看 | 五月丁香哈哈国产操电影 | 欧美成人一区乱黄 | 一级黄网站 |