本文转载自公众号《核心阅读》(ID:AI_Discovery)。新手程序员最大的困难之一是理解环境的概念。环境是指程序员编码的系统。这听起来容易,但随着程序员职业的推荐,程序员会逐渐意识到维护“环境”是多么的困难。这主要是因为库、IDE(集成开发环境)甚至Python代码都需要更新和版本控制。有时候更新一个库,某段代码会出错,需要重新修改代码。如果同时开发多个项目,就会造成依赖冲突,当一段代码导致另一段代码失败时,事情就变得棘手了。此外,如果您想与使用不同操作系统的同事共享项目,或者将在Mac上构建的项目交付到使用另一个操作系统的生产服务器,则必须重新配置代码。为了解决这些问题,将项目和项目所在的环境分离的方法被称为“容器”。容器是环境运行的地方,与系统上的其他内容分开。一旦定义了容器中的内容,重建环境就很容易了,甚至可以与同事共享项目。需要启动Docker,需要安装软件:Windows或macOS:安装DockerDesktoplinux:安装Docker,然后写一个DockerPython服务包假设你正在创建一个名为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命令可以创建一个运行应用程序的容器。Dockerfile分析Dockerfile是一个文件(命名为myimage):#setbaseimage(hostOS)FROMpython:3.8#settheworkingdirectoryinthecontainerWORKDIR/code#copythedependenciesfiletotheworkingdirectoryCOPYrequirements.txt.#installdependenciesRUNpipinstall-requirements.txt#copythecontentofthelocalsrcdirectorytotheworkingdirectoryCOPYsrc/.#commandtorunoncontainerstart"CMD,".[/python.py"]Dockerfile是运行编译的,因此生成器生成一个图层并将其覆盖在之前的图像之上。在构建命令的输出中,您可以看到按步骤执行的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然后可以发现镜像存储在本地图像中:$dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEmyimagelatest70a92e92f3b58secondsago991MB在开发过程中,可能需要多次为Python服务重新构建镜像,所以希望花费尽可能少time.Dockerandvirtualenvareverysimilar,yetdifferent.VirtualenvallowsyoutoswitchamongPythondependencies,butmustusethehostOS.但是,使用Docker,您可以在任何操作系统(包括Ubuntu、Debian、Alpine和WindowsServerCore)上安装和运行Python。所以如果你在一个团队中工作,并且想在以后证明你的技能,使用Docker。如果不用docker,venv也不错,但不是通向未来的凭证。来源:unsplash本文展示了如何创建Python服务包,希望简化流程,让程序员的项目更长久。因为它不太可能在依赖项发生变化时出现代码错误。
