环球科技在此|你是从1985年穿越来的吗?,还不使用Docker管理数据

全文共2869字 , 预计学习时长8分钟
环球科技在此|你是从1985年穿越来的吗?,还不使用Docker管理数据
文章图片
图源: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然后可以发现镜像存储在本地图像中:


推荐阅读