【Docker】命令使用大全
目標:
編寫自己的 Dockerfile 鏡像
創(chuàng)建一個簡單的 Web 界面
使用鏡像創(chuàng)建一個 Flask APP
有關 Dockerfile 的相關知識,我在后面的文章會進行講解,今天主要是實際操作
所需工具:安裝好 Docker 的服務器或者本地電腦,筆者使用的是服務器:Ubuntu 系統(tǒng)
創(chuàng)建一個 Flask APP
首先創(chuàng)建一個 Flask app
app.py
fromflaskimportFlask,render_template importrandom app=Flask(__name__) #listoffoximages,用來進行頁面展示的 images=[ "https://media0.giphy.com/media/Ko5dZRMv9uJFu/giphy.gif", "https://media.tenor.com/images/6461359b4205a95bf1f4374a3aa2acec/tenor.gif", "https://i.imgur.com/dUBv79d.gif", "https://media2.giphy.com/media/dvBgr7pA6FTJOMOALY/giphy.gif", "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/45dfcad0-23ff-4af4-8c3f-b4b68f6edab4/d5hxh3z-aac8f004-e5db-4030-8e0c-62b899b4d0ce.gif" ] @app.route('/') defindex(): url=random.choice(images) returnrender_template('index.html',url=url) if__name__=="__main__": app.run(host="0.0.0.0")
創(chuàng)建一個requestment.txt文件,把 Python 需要的包及其版本放進去,方便后續(xù)安裝
requestment.txt
Flask==0.10.1
創(chuàng)建一個簡單的 Web 頁面
templates/index.html
創(chuàng)建一個 templates 的文件夾,并在此文件夾下創(chuàng)建 index.html 文件
FoxGifoftheday
Courtesy:AICV
Dockerfile
我們基于 Alpine 構建一個鏡像Alpine:Alpine Linux 的最小 Docker 映像,具有完整的包索引,大小只有 5mb,非常實用。
對命令的含義進行了注釋
#基礎鏡像 FROMalpine:3.9 #因為我們需要運行 Python,所以需要配置環(huán)境:安裝 Python 和 pip 到Apline Linux 中,該命令不僅會安裝 pip 包,也會安裝其他的依賴(如 Python 的解釋器) #RUN是Docker的命令,apkadd--updatepy2-pip類似于Linux命令 RUNapkadd--updatepy2-pip #拷貝本地文件requirements.txt(默認與Dockerfile同一文件夾)到容器的/usr/src/app/文件夾下,會自動創(chuàng)建 COPYrequirements.txt/usr/src/app/ #安裝所需要的python包 RUNpipinstall--no-cache-dir-r/usr/src/app/requirements.txt #拷貝其他文件 COPYapp.py/usr/src/app/ COPYtemplates/index.html/usr/src/app/templates/ #容器需要暴露端口,Flask程序運行的端口 EXPOSE5000 #運行python程序,該命令的意思是python/usr/src/app/app.py CMD["python","/usr/src/app/app.py"]
目錄結構如下所示:
編譯鏡像
編寫完 Dockerfile,接下來就是進行編譯了,使用 docker bulid
dockerbuild-t
下面是編譯過程中的一些輸出:
SendingbuildcontexttoDockerdaemon6.656kB Step1/8:FROMalpine:3.9 --->78a2ce922f86 Step2/8:RUNapkadd--updatepy2-pip --->Usingcache --->ba2fa67ca853 Step3/8:COPYrequirements.txt/usr/src/app/ --->Usingcache --->43511e5ced4b Step4/8:RUNpipinstall--no-cache-dir-r/usr/src/app/requirements.txt --->Runningin97289c7eda9d CollectingFlask==0.10.1(from-r/usr/src/app/requirements.txt(line1)) Downloadinghttps://files.pythonhosted.org/packages/db/9c/149ba60c47d107f85fe52564133348458f093dd5e6b57a5b60ab9ac517bb/Flask-0.10.1.tar.gz(544kB) CollectingWerkzeug>=0.7(fromFlask==0.10.1->-r/usr/src/app/requirements.txt(line1)) Downloadinghttps://files.pythonhosted.org/packages/cc/94/5f7079a0e00bd6863ef8f1da638721e9da21e5bacee597595b318f71d62e/Werkzeug-1.0.1-py2.py3-none-any.whl(298kB) CollectingJinja2>=2.4(fromFlask==0.10.1->-r/usr/src/app/requirements.txt(line1)) Downloadinghttps://files.pythonhosted.org/packages/30/9e/f663a2aa66a09d838042ae1a2c5659828bb9b41ea3a6efa20a20fd92b121/Jinja2-2.11.2-py2.py3-none-any.whl(125kB) Collectingitsdangerous>=0.21(fromFlask==0.10.1->-r/usr/src/app/requirements.txt(line1)) Downloadinghttps://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl CollectingMarkupSafe>=0.23(fromJinja2>=2.4->Flask==0.10.1->-r/usr/src/app/requirements.txt(line1)) Downloadinghttps://files.pythonhosted.org/packages/b9/2e/64db92e53b86efccfaea71321f597fa2e1b2bd3853d8ce658568f7a13094/MarkupSafe-1.1.1.tar.gz Installingcollectedpackages:Werkzeug,MarkupSafe,Jinja2,itsdangerous,Flask Runningsetup.pyinstallforMarkupSafe:started Runningsetup.pyinstallforMarkupSafe:finishedwithstatus'done' Runningsetup.pyinstallforFlask:started Runningsetup.pyinstallforFlask:finishedwithstatus'done' SuccessfullyinstalledFlask-0.10.1Jinja2-2.11.2MarkupSafe-1.1.1Werkzeug-1.0.1itsdangerous-1.1.0 Removingintermediatecontainer97289c7eda9d --->9dbc17abb6f7 Step5/8:COPYapp.py/usr/src/app/ --->0c69faca84cb Step6/8:COPYtemplates/index.html/usr/src/app/templates/ --->a0e7ce10250b Step7/8:EXPOSE5000 --->Runninginf570b863937d Removingintermediatecontainerf570b863937d --->ba48b6b1c4bd Step8/8:CMD["python","/usr/src/app/app.py"] --->Runningin2a73d498ea52 Removingintermediatecontainer2a73d498ea52 --->b64a5a0d5dd0 Successfullybuiltb64a5a0d5dd0 Successfullytaggedaicv/myfirstapp:latest
編譯完成后,我們可以看到鏡像出現了
運行鏡像為容器
我們使用創(chuàng)建的鏡像運行一個容器,將容器中的 5000端口映射到宿主機的 8899 端口
dockerrun-p-d8899:5000--namemyfirstappaicv/myfirstapp
打開 http://localhost:8899或者 http://ip:8899就能看到頁面了,刷新頁面可以看到不同的畫面。
推送到遠程倉庫
要推送到遠程倉庫,首先需要登錄你自己的 Docker hub 賬號
dockerlogin dokckerpushYOUR_USERNAME/myfirstapp
本節(jié)我們完成了一個簡單的 Flask APP 的部署工作,了解了 Dockerfile 的基本使用,并將鏡像推送到我們的遠程倉庫中。
-
服務器
+關注
關注
12文章
9123瀏覽量
85324 -
鏡像
+關注
關注
0文章
164瀏覽量
10707 -
Docker
+關注
關注
0文章
457瀏覽量
11846
原文標題:【Docker】項目實戰(zhàn),部署自己的APP
文章出處:【微信號:Unfinished_coder,微信公眾號:機器視覺CV】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論