<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          實(shí)踐教程|Docker使用記錄

          共 4496字,需瀏覽 9分鐘

           ·

          2022-01-10 09:48

          ↑ 點(diǎn)擊藍(lán)字?關(guān)注極市平臺(tái)

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

          極市導(dǎo)讀

          ?

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

          Dockder是啥?

          首先需要理解幾個(gè)概念:鏡像,容器

          什么是容器?

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

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

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

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

          什么是鏡像?

          我們將這些容器運(yùn)行時(shí)所需要的所有的文件集合稱之為容器鏡像。(簡(jiǎn)單來說可以理解為容器運(yùn)行所需要的所有的依賴文件構(gòu)成的集合)

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

          “容器”與“VM”

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

          容器與VM的區(qū)別

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

          容器則比較輕量級(jí),但是隔離效果自然弱于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

          我運(yùn)行的時(shí)候提示缺少containerd,只需要提前運(yùn)行sudo apt install containerd進(jìn)行安裝就好了。

          一些常用的命令

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

          使用示例

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

          任務(wù)描述

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

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

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

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

          使用過程

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

          1. 鏡像構(gòu)建

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

          然后我們?cè)谝粋€(gè)新文件夾中需要準(zhǔn)備的就是如下幾個(gè)文件:

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

          其中,Dockerfile文件用來構(gòu)建鏡像,示例如下:

          #?Base?Images
          ##?從天池基礎(chǔ)鏡像構(gòu)建
          FROM?registry.cn-shanghai.aliyuncs.com/tcc-public/python:3

          ##?把當(dāng)前文件夾里的文件構(gòu)建到鏡像的根目錄下
          ADD?.?/

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

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

          hello_world.py文件就是編寫的要實(shí)現(xiàn)題目中要求的文件。這里示例如下:

          import?json
          #?要求1的結(jié)果
          r1?=?"Hello?world"

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

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

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

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

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

          python?hello_world.py

          2.鏡像的推送

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

          開通后進(jìn)入鏡像倉(cāng)庫(kù),創(chuàng)建命名空間以及鏡像倉(cāng)庫(kù),倉(cāng)庫(kù)類型設(shè)為私有,代碼源設(shè)為本地倉(cāng)庫(kù)。

          創(chuàng)建成功之后,可以看到詳情頁(yè),倉(cāng)庫(kù)地址一般使用公網(wǎng)地址即可。

          然后我們構(gòu)建我們本地的鏡像并推送到倉(cāng)庫(kù)中:

          1. 執(zhí)行docker build -t 倉(cāng)庫(kù)地址:版本號(hào) .命令構(gòu)建鏡像。倉(cāng)庫(kù)地址是剛剛創(chuàng)建的倉(cāng)庫(kù)地址的公網(wǎng)地址,版本號(hào)自己命名,用來區(qū)分每次構(gòu)建的鏡像。最后的.是構(gòu)建鏡像的路徑,因?yàn)槭钱?dāng)前目錄,所以是.,不能省略。

          這里參考官方教程?(https://tianchi.aliyun.com/competition/entrance/231759/tab/174?spm=5176.12281978.0.0.37724127ZpsgRZ),假設(shè)倉(cāng)庫(kù)地址是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. 構(gòu)建完成后可先驗(yàn)證是否正常運(yùn)行,正常運(yùn)行后再進(jìn)行推送。
            CPU鏡像:docker run your_image sh run.sh
            GPU鏡像:nvidia-docker run your_image sh run.sh

          2. 推送到鏡像倉(cāng)庫(kù) 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

          用于登錄的用戶名為阿里云賬號(hào)全名,密碼為開通服務(wù)時(shí)設(shè)置的密碼。

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

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

          鏡像提交

          根據(jù)【我的成績(jī)】中的分?jǐn)?shù)和日志可以查看運(yùn)行情況。

          如果覺得有用,就請(qǐng)分享到朋友圈吧!

          △點(diǎn)擊卡片關(guān)注極市平臺(tái),獲取最新CV干貨

          公眾號(hào)后臺(tái)回復(fù)“transformer”獲取最新Transformer綜述論文下載~


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


          #?CV技術(shù)社群邀請(qǐng)函?#

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

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


          即可申請(qǐng)加入極市目標(biāo)檢測(cè)/圖像分割/工業(yè)檢測(cè)/人臉/醫(yī)學(xué)影像/3D/SLAM/自動(dòng)駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群


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



          覺得有用麻煩給個(gè)在看啦~??
          瀏覽 37
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人自拍偷拍在线 | 久操久操 | 国产精品每日更新 | 欧美操操逼 | 青娱乐在线视频分类 |