<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>

          3分鐘將Python應(yīng)用容器化

          共 3286字,需瀏覽 7分鐘

           ·

          2020-10-18 07:39

          很多開發(fā)者用自己的電腦開發(fā),然后將程序部署在內(nèi)網(wǎng)。如果內(nèi)網(wǎng)無法訪問互聯(lián)網(wǎng),部署就相當(dāng)麻煩,你需要將應(yīng)用程序依賴的包也傳輸?shù)絻?nèi)網(wǎng)。如果是 Python 應(yīng)用,還需要使用 pip 安裝一下依賴包,對于某些需要編譯安裝包,windows 環(huán)境下安裝過程中還可能報錯,linux 可能提示缺失必要的頭文件等,安裝這些依賴包會耗費較多的時間,對自己的技術(shù)提升其實沒有幫助,是要盡可能避免的。
          那么能不能一次部署,處處運行?其實這個問題已經(jīng)有點過時了,別問,問就是 docker,如果你了解過 docker,你就知道,以容器的形式來發(fā)布你的應(yīng)用程序,已經(jīng)變得非常流行。
          本文教你如何將一個 Python 應(yīng)用容器化,容器化后,你的應(yīng)用可以極其方便的遷移至其他具有 Docker 的服務(wù)器中,即使 Docker 服務(wù)器不聯(lián)網(wǎng),也只需將一個 Docker 鏡像拷貝至內(nèi)網(wǎng)即可完成部署,實現(xiàn)一次部署,處處運行,提升部署應(yīng)用的效率。
          假如有一個 Python 的 web 應(yīng)用 index.py ,這里是 falsk 寫的 Hello world:
          from?flask?import?Flask
          app?=?Flask(__name__)
          @app.route("/")
          def?hello():
          ????return?"Hello?World!"
          if?__name__?==?"__main__":
          ????app.run(host="0.0.0.0",?port=int("5000"),?debug=True)
          運行 python index.py 后,在瀏覽器上訪問 http://127.0.0.1:5000,會看到瀏覽器上顯示了 'Hello World!' 說明程序沒有問題。如果我們把這個文件發(fā)給別人,那么他需要做以下 3 步才能啟動這個 web 應(yīng)用。
          1. 安裝 Python 解釋器

          2. 安裝 flask 庫

          3. 執(zhí)行 python index.py

          真實情況下,步驟 2 可能會有很多依賴,這里我們將所有的依賴庫都放在 requirements.txt 文件中:
          Flask==1.1.2
          然后在應(yīng)用程序的根目錄(這里是 index.py 所在的目錄)中創(chuàng)建一個名為 Dockerfile 的文本文件,然后粘貼以下代碼。
          FROM?python:alpine3.8
          COPY?.?/app
          WORKDIR?/app
          RUN?pip?install?-r?requirements.txt
          EXPOSE?5000
          CMD?python?./index.py
          請注意,F(xiàn)ROM 指令指向 python:alpine3.7。這是在告訴 Docker 容器要使用什么基本映像,并隱式選擇要使用的 Python 版本,在本例中為 3.8。Docker Hub 具有幾乎所有 Python 版本的基本映像。該示例使用的是安裝在 Alpine Linux(極簡Linux發(fā)行版)上的Python,該 Python 發(fā)行版有助于使 Docker 的映像較小。除非有充分的理由使用 Debian Jessie 這樣的基本圖像,否則最好選擇Alpine。
          還要注意的是 RUN 指令,該指令調(diào)用 pip 從 requirements.txt 文件安裝依賴項。
          Dockerfile 中的其余指令非常簡單。在 CMD 指令告訴容器來執(zhí)行啟動該應(yīng)用程序是什么。在這種情況下,它告訴 Python 運行 index.py。該 COPY 指令簡單地移動應(yīng)用到容器鏡像,WORKDIR 設(shè)置工作目錄,EXPOSE 綁定 Flask 使用的端口。
          要構(gòu)建映像,在 Dockerfile 目錄下,終端運行 docker build 命令。
          docker?build?--tag?somenzz-app?./
          等待其下載基本鏡像并構(gòu)建完成,會得到一個 somenzz-app 的鏡像:
          $?docker?images?|?grep?somenzz
          somenzz-app?????????????????????????????????????????latest??????????????b7e2359056bb????????3?hours?ago?????????89.1MB
          somenzz/my-kali?????????????????????????????????????latest??????????????975cbe3a4619????????2?weeks?ago?????????1.83GB
          可以看到此鏡像只有 89.1MB 的大小。接下來就像其他鏡像已有可以使用了:
          $?docker?run?--name?python-app?-p?5000:5000?somenzz-app
          ?*?Serving?Flask?app?"index"?(lazy?loading)
          ?*?Environment:?production
          ???WARNING:?This?is?a?development?server.?Do?not?use?it?in?a?production?deployment.
          ???Use?a?production?WSGI?server?instead.
          ?*?Debug?mode:?on
          ?*?Running?on?http://0.0.0.0:5000/?(Press?CTRL+C?to?quit)
          ?*?Restarting?with?stat
          ?*?Debugger?is?active!
          ?*?Debugger?PIN:?201-219-912
          172.17.0.1?-?-?[14/Oct/2020?22:32:05]?"GET?/?HTTP/1.1"?200?-
          此時容器已經(jīng)成功啟動,本機的 5000 端口會映射至容器的 5000 端口,因此,訪問 127.0.0.0:5000 就相當(dāng)于訪問容器的 5000 端口。
          如果要后臺運行容器,可以加入 -d 參數(shù):
          $?docker?run?-d??--name?python-app?-p?5000:5000?somenzz-app
          259d09fbbf77a6fd680cd7527600d055cb76fe3d6792063846103b47360210f9
          $?docker?container?list?|?grep?somenzz-app
          259d09fbbf77????????somenzz-app?????????????????????????????????????????"/bin/sh?-c?'python?…"???20?minutes?ago??????Up?20?minutes???????0.0.0.0:5000->5000/tcp???????????????????????????python-app
          結(jié)合前文手摸手,帶你入門docker中的步驟 7 :發(fā)布鏡像,你可以將容器發(fā)布到網(wǎng)絡(luò)上供他人使用。
          如果你不熟悉 Dockerfile,制作并發(fā)布 docker 鏡像還有一個更簡單的方法,那就是下載一個鏡像,啟動,登陸到容器內(nèi)部進行修改,安裝依賴,然后保存為新鏡像,最后發(fā)布,當(dāng)然效率是比較低的,有時間最好還是學(xué)習(xí)下 Dockerfile, 官方教程如下:
          https://docs.docker.com/engine/reference/builder/
          自然,本文只是一個簡單的 HelloWorld web 應(yīng)用。更復(fù)雜的場景將需要更多地關(guān)注細節(jié),但是大多數(shù) Python 應(yīng)用程序的容器化流程都是相同的,希望本文對你有所幫助。
          Python七號,做更滿意的七號,每周學(xué)習(xí)一個 Python 技巧,歡迎關(guān)注。


          瀏覽 95
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  亚洲最大网站 | 青青草无码视频 | 婷婷俺去俺去耶 | 人妻少妇无码精品 | 91探花国产视频 |