close
↑ 點擊藍字關注極市平台
作者 | 小新

來源 | https://lhyxx.top
編輯 | 極市平台

極市導讀

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

Dockder是啥?

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

什麼是容器?

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

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

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

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

什麼是鏡像?

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

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

「容器」與「VM」

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

容器與VM的區別

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

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

Docker安裝與配置

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

Ubuntu系統上可以直接輸入如下命令:

$sudoapt-getupdate$sudoaptinstalldocker.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同目錄),評分系統將根據result.json進行打分。json文件如下所示:

{"Q1":"Helloworld","Q2":sum值,"Q3":[top10_list]}

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

使用過程

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

1. 鏡像構建

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

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

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

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

#BaseImages##從天池基礎鏡像構建FROMregistry.cn-shanghai.aliyuncs.com/tcc-public/python:3##把當前文件夾里的文件構建到鏡像的根目錄下ADD./##指定默認工作目錄為根目錄(需要把run.sh和生成的結果文件都放在該文件夾下,提交後才能運行)WORKDIR/##鏡像啟動後統一執行shrun.shCMD["sh","run.sh"]

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

importjson#要求1的結果r1="Helloworld"#讀取數據data=[]withopen('tcdata/num_list.csv','r',encoding='utf-8')asf:foriinf:data.append(int(i))#要求2的結果r2=sum(data)#要求3的結果r3=sorted(data,reverse=True)[:10]#輸出結果文件result={"Q1":r1,"Q2":r2,"Q3":r3}withopen("result.json",'w',encoding='utf-8')asf:json.dump(result,f)

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

pythonhello_world.py2.鏡像的推送

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

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

創建成功之後,可以看到詳情頁,倉庫地址一般使用公網地址即可。

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

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

這裡參考官方教程(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

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

推送到鏡像倉庫 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.天池系統提交

推送完之後,就可以去天池系統進行提交了。

鏡像提交

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

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


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

公眾號後台回復「transformer」獲取最新Transformer綜述論文下載~

極市乾貨

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

#CV技術社群邀請函#




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

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

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

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



覺得有用麻煩給個在看啦~
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()