日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
都2020年了,居然還有人沒有在數(shù)據(jù)科學(xué)項目中使用Docker?

 新手程序員面臨的困難的問題之一是理解“環(huán)境”的概念。環(huán)境就是你編寫代碼的系統(tǒng),聽起來很容易,但很快你就會明白維護(hù)系統(tǒng)有多困難。

創(chuàng)新互聯(lián)公司一直通過網(wǎng)站建設(shè)和網(wǎng)站營銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實效"的一站式服務(wù),以成都網(wǎng)站設(shè)計、成都做網(wǎng)站、移動互聯(lián)產(chǎn)品、全網(wǎng)整合營銷推廣服務(wù)為核心業(yè)務(wù)。10余年網(wǎng)站制作的經(jīng)驗,使用新網(wǎng)站建設(shè)技術(shù),全新開發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價格便宜而且實用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。

很大原因是庫和 IDE,甚至 Python 代碼本身都會經(jīng)歷更新和版本更改,有時候,我們對一個庫進(jìn)行更新,就會導(dǎo)致另一段代碼報錯。正因如此,我們經(jīng)常需要修復(fù)各種來源不明的 BUG。

此外,如果我們同時開發(fā)多個項目,可能會出現(xiàn)依賴性沖突。如果一段代碼因為另一段代碼而出現(xiàn) BUG 時,情況會更糟糕。

另外,如果你想將一個項目共享給一個在不同操作系統(tǒng)上工作的團(tuán)隊成員,或者將你在 Mac 上構(gòu)建的項目發(fā)送到另一個操作系統(tǒng)上的服務(wù)器,你是否需要重新配置代碼?很明顯是一定需要的。

因此,為了減少這些問題的出現(xiàn),人們提出使用容器來分離項目和它們所在的環(huán)境。容器基本上是一個環(huán)境可以運(yùn)行的地方,與系統(tǒng)中的所有其他東西分開。一旦定義了容器中的內(nèi)容,就可以輕松地重新創(chuàng)建環(huán)境,甚至與同事共享項目。

要求

首先,我們需要安裝一些設(shè)置:

Windows或macOS:安裝Docker Desktop(https://www.docker.com/get-started)

Linux:先安裝Docker,再安裝 Docker Compose(https://docs.docker.com/compose/install/)

對Python服務(wù)進(jìn)行容器化

假設(shè)我們正在創(chuàng)建一個名為 server.py 的 Flask 服務(wù),并假設(shè)文件內(nèi)容如下:

 
 
 
 
  1. from flask import Flask 
  2. server = Flask(__name__) 
  3. @server.route("/") 
  4.  def hello(): 
  5.     return "Hello World!" 
  6. if __name__ == "__main__": 
  7.    server.run(host='0.0.0.0') 

如上所述,我們需要記錄代碼的依賴關(guān)系,因此,我們可以創(chuàng)建一個 requirements.txt 文件,其中可以包含以下要求:

 
 
 
 
  1. Flask==1.1.1 

因此,我們的軟件包需要具有以下結(jié)構(gòu):

 
 
 
 
  1. app 
  2. ├─── requirements.txt 
  3. └─── src 
  4.      └─── server.py 

該結(jié)構(gòu)非常合理(源代碼保存在單獨(dú)的目錄中)。要執(zhí)行我們的 Python 程序,只需安裝一個Python 解釋器并運(yùn)行即可。

我們可以在本地運(yùn)行該程序,但是假設(shè)我們正在處理 15 個項目:在容器中運(yùn)行是有意義的,這樣可以避免與其他項目發(fā)生沖突。

讓我們進(jìn)入容器化。

Dockerfile

要運(yùn)行 Python 代碼,我們將容器打包為 Docker 映像,然后基于它運(yùn)行一個容器。如下所示:

  • 創(chuàng)建一個 Dockerfile,其中包含構(gòu)建圖像所需的說明;
  • 然后由 Docker builder 創(chuàng)建映像;
  • 簡單的 docker run image 命令然后創(chuàng)建一個運(yùn)行應(yīng)用程序的容器。

分析 Dockerfile

Dockerfile 是一個文件,其中包含有關(guān)組裝 Docker 映像(保存為 myimage )的說明:

 
 
 
 
  1. # 設(shè)置基本映像(主機(jī)操作系統(tǒng)) 
  2. FROM python:3.8 
  3. # 在容器中設(shè)置工作目錄 
  4. WORKDIR /code 
  5. # 將依賴項文件復(fù)制到工作目錄中 
  6. COPY requirements.txt . 
  7. # 安裝依賴項 
  8. RUN pip install -r requirements.txt 
  9. # 將本地src目錄的內(nèi)容復(fù)制到工作目錄 
  10. COPY src/ . 
  11. # 在容器啟動時運(yùn)行的命令 
  12. CMD [ "python", "./server.py" ] 

Dockerfile 是逐行編譯的,因此構(gòu)建器會生成圖像層并將其堆疊在先前的圖像上。

我們還可以在 build 命令的輸出中觀察到作為步驟執(zhí)行的 Dockerfile 指令。

 
 
 
 
  1. $ docker build -t myimage . 
  2. Sending build context to Docker daemon 6.144kB 
  3. Step 1/6 : FROM python:3.8 
  4. 3.8.3-alpine: Pulling from library/python 
  5. … 
  6. Status: Downloaded newer image for python:3.8.3-alpine 
  7. ---> 8ecf5a48c789 
  8. Step 2/6 : WORKDIR /code 
  9. ---> Running in 9313cd5d834d 
  10. Removing intermediate container 9313cd5d834d 
  11. ---> c852f099c2f9 
  12. Step 3/6 : COPY requirements.txt . 
  13. ---> 2c375052ccd6 
  14. Step 4/6 : RUN pip install -r requirements.txt 
  15. ---> Running in 3ee13f767d05 
  16. … 
  17. Removing intermediate container 3ee13f767d05 
  18. ---> 8dd7f46dddf0 
  19. Step 5/6 : COPY ./src . 
  20. ---> 6ab2d97e4aa1 
  21. Step 6/6 : CMD python server.py 
  22. ---> Running in fbbbb21349be 
  23. Removing intermediate container fbbbb21349be 
  24. ---> 27084556702b 
  25. Successfully built 70a92e92f3b5 
  26. Successfully tagged myimage:latest 

然后,我們可以看到映像位于本地映像存儲目錄中:

 
 
 
 
  1. $ docker images 
  2. REPOSITORY    TAG       IMAGE ID        CREATED          SIZE 
  3. myimage       latest    70a92e92f3b5    8 seconds ago    991MB 

在開發(fā)過程中,我們希望花費(fèi)盡可能少的時間,為 Python 服務(wù)重建映像。

注意:Docker 和 virtualenv 非常相似但又有所不同。Virtualenv 只允許我們在 Python 的依賴關(guān)系之間切換,無法使用主機(jī)操作系統(tǒng)。但是,使用Docker,你可以在任何操作系統(tǒng)上交換整個操作系統(tǒng):安裝并運(yùn)行Python(例如 UBTUN,Debian,Alpine,甚至Windows Server Core)。因此,如果你的團(tuán)隊工作需要驗證你的技術(shù),請使用Docker。如果不需要,可以使用 venv。

總結(jié)

在上文中,我們展示了如何把 Python 服務(wù)容器化。 希望此過程將變得更容易,并且能夠為你的項目提供更長的保質(zhì)期。同時,因為依賴關(guān)系的變化,也能降低你的代碼錯誤的可能性。


分享標(biāo)題:都2020年了,居然還有人沒有在數(shù)據(jù)科學(xué)項目中使用Docker?
文章網(wǎng)址:http://www.dlmjj.cn/article/ccocdoe.html