【Docker】命令使用大全

【docker】命令使用大全
目标:
编写自己的 dockerfile 镜像
创建一个简单的 web 界面
使用镜像创建一个 flask app
有关 dockerfile 的相关知识,我在后面的文章会进行讲解,今天主要是实际操作
所需工具:安装好 docker 的服务器或者本地电脑,笔者使用的是服务器:ubuntu 系统
创建一个 flask app
首先创建一个 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)
创建一个requestment.txt文件,把 python 需要的包及其版本放进去,方便后续安装
requestment.txt
flask==0.10.1
创建一个简单的 web 页面
templates/index.html
创建一个 templates 的文件夹,并在此文件夹下创建 index.html 文件
foxgifoftheday courtesy:aicv
dockerfile
我们基于 alpine 构建一个镜像alpine:alpine linux 的最小 docker 映像,具有完整的包索引,大小只有 5mb,非常实用。
对命令的含义进行了注释
#基础镜像 fromalpine:3.9 #因为我们需要运行 python,所以需要配置环境:安装 python 和 pip 到apline linux 中,该命令不仅会安装 pip 包,也会安装其他的依赖(如 python 的解释器) #run是docker的命令,apkadd--updatepy2-pip类似于linux命令 runapkadd--updatepy2-pip #拷贝本地文件requirements.txt(默认与dockerfile同一文件夹)到容器的/usr/src/app/文件夹下,会自动创建 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
是 docker hub 的用户名命令最后有个 . 不要漏了,其代表的含义是 dockerfile 所在的路径
dockerbuild-t/myapp.
下面是编译过程中的一些输出:
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
编译完成后,我们可以看到镜像出现了
运行镜像为容器
我们使用创建的镜像运行一个容器,将容器中的 5000端口映射到宿主机的 8899 端口
dockerrun-p-d8899:5000--namemyfirstappaicv/myfirstapp
打开 http://localhost:8899或者 http://ip:8899就能看到页面了,刷新页面可以看到不同的画面。
推送到远程仓库
要推送到远程仓库,首先需要登录你自己的 docker hub 账号
dockerlogin dokckerpushyour_username/myfirstapp
本节我们完成了一个简单的 flask app 的部署工作,了解了 dockerfile 的基本使用,并将镜像推送到我们的远程仓库中。

苹果官方首次大幅度降价,以求中国市场回血
蒸汽拖把好用吗?谨防地板细菌中的细菌对家人的危害!
太空望远镜探索整个宇宙以了解暗物质和暗能量
vivoNEX双屏版手机评测 向我们诠释了其无与伦比的设计整合能力
现在的中端手机不香了?看完OPPOA95的真实口碑你就知道了
【Docker】命令使用大全
14岁女生戴耳机损伤听力,我们该如何使用耳机保护自己的耳朵?
产品应用 | 浅谈进芯电子高性能电钻控制板方案
新一代乐视超级电视即将面世 Letv智能终端保有量仍旧超过1200万台
在树莓派64位上安装TensorFlow
Google拟放弃博通自行研发AI芯片
我们在日常生活中使用加密货币可以干什么
美国制裁中国芯片,对我们来说利大于弊
弯曲银纳米线的标准为科学家带来新的思考方向
UltraSoC锁定500万英镑投资迎接信息安全、和高安全性系统市场新机遇
30V/3A稳压稳流电源电路原理
java数据量大了怎么处理
欧盟或对华电动汽车启动“反倾销调查”
灌区取水计量设备解决方案
iOS 14 你升级了吗