环球科技在此|你是从1985年穿越来的吗?,还不使用Docker管理数据
全文共2869字 , 预计学习时长8分钟
文章图片
图源:itfromzero
小白程序员面临的最大困难之一就是理解环境的概念 。 环境是指程序员进行编码的系统 , 这听起来貌似很容易 , 但随着程序员职业生涯的推荐 , 程序员会逐渐体会到维护“环境”是一件多么困难的事情 。
这主要是因为库、IDE(集成开发环境) , 甚至Python代码都需要经过更新和版本升级 。 有时更新一个库 , 某段代码就会出错 , 需要重新修改代码 。 如果同时开发多个项目 , 就会引起依赖冲突 , 当某段代码导致另一段代码错误时 , 事情就会变得很棘手了 。
另外 , 如果想将项目共享给一个在不同操作系统上的工作伙伴 , 或者将在Mac上构建的项目交付到另一个操作系统的生产服务器上 , 就不得不重新配置代码了 。
为了解决这些问题 , 将项目和项目所处的环境分离的方法被称为“容器” 。 容器是支持环境运行的地方 , 与系统上的其他内容东西相分离 。 一旦定义了容器中的内容 , 重建环境就很容易了 , 甚至可以实现与同事共享项目 。
要求
启动Docker , 需要安装软件:
·windows或macOS:安装DockerDesktop
·linux:安装Docker , 然后编写Docker
Python服务包
假设正在创建一个名为server.py的Flask服务 , 并设置该文件的内容 , 如下:
fromflaskimportFlaskserver=Flask(__name__)@server.route(''/'')defhello():return''HelloWorld!''if__name__==''__main__'':server.run(host='0.0.0.0')如上述 , 需保留代码依赖关系的记录 。 因此创建一个关于需求的txt文件 , 包含以下内容:
Flask==1.1.1因此 , 服务包有以下结构:
app├───requirements.txt└─── src└───server.py该结构十分符合逻辑(源文件保存在独立目录中) 。 若执行Python程序 , 我们需要安装并运行Python解释器 。 接下来可以在本地运行这个程序 , 如果有15个项目同时运行 , 在一个容器中运行可以避免与其他项目发生冲突 。
Dockerfile
运行Python代码 , 需要将容器打包为Docker镜像 , 然后运行 。 操作如下:
·创建一个包含构建镜像所需指令的Dockerfile
·然后通过Docker生成器创建镜像
·简单的dockerrun<image>命令就可以创建一个正在运行应用程序的容器
Dockerfile分析
Dockerfile是一个包含合成Docker镜像说明的文件(命名为myimage):
#setbaseimage(hostOS)FROMpython:3.8#settheworkingdirectoryinthecontainerWORKDIR/code#copythedependenciesfiletotheworkingdirectoryCOPYrequirements.txt.#installdependenciesRUNpipinstall-rrequirements.txt#copythecontentofthelocal srcdirectorytotheworkingdirectoryCOPY src/.#commandtorunoncontainerstartCMD[''python'' , ''./server.py'']Dockerfile是逐行编译的 , 因此生成器会生成一个图层 , 并将其叠加在之前的图像上 。 在build命令的输出中 , 可以看到作为步骤执行的Dockerfile指令 。
$dockerbuild-tmyimage.SendingbuildcontexttoDockerdaemon6.144kBStep1/6:FROMpython:3.83.8.3-alpine:Pullingfromlibrary/python…Status:Downloadednewerimageforpython:3.8.3-alpine--->8ecf5a48c789Step2/6:WORKDIR/code--->Runningin9313cd5d834dRemovingintermediatecontainer9313cd5d834d--->c852f099c2f9Step3/6:COPYrequirements.txt.--->2c375052ccd6Step4/6:RUNpipinstall-rrequirements.txt--->Runningin3ee13f767d05…Removingintermediatecontainer3ee13f767d05--->8dd7f46dddf0Step5/6:COPY./ src.--->6ab2d97e4aa1Step6/6:CMDpythonserver.py--->Runninginfbbbb21349beRemovingintermediatecontainerfbbbb21349be--->27084556702bSuccessfullybuilt70a92e92f3b5Successfullytaggedmyimage:latest然后可以发现镜像存储在本地图像中:
推荐阅读
- 七号人称说科技|华为始料未及?台积电又成了“炮灰”?新风暴说来就来
- 大众新闻|众安科技荣获“今日·保险中介榜”年度Insurtech独角兽
- 雷科技|朋友圈都在秀的“互联网勋章”到底是什么?
- 快科技|小米10至尊纪念版妙享功能升级:手机与Windows电脑合体
- 七号人称说科技|再给华为一颗糖?美国到底在打什么“算盘”?,先给华为一巴掌
- 小米科技|小米旗舰再“搅局”!144Hz+2K+百倍变焦,5纳米性能赶超A14
- 科技小乐乐|12:你想太多了,跌至4784元?全网刷屏的琼版iPhone
- 雷科技|12直降1500,海南版真有这么香?,iPhone
- 科技小乐乐|为什么国内有人已拿到iPhone12却不敢开机?
- 浪浪科技|亚马逊42%的评论为虚假评论,报告:疫情期间