手把手教你容器化你的Python微服务(一)

来源:多宝体育官网作者:多宝体育官网 日期:2021-10-14 浏览:
本文摘要:当前微服务基本都是跑在kubernetes(或简朴点直接Docker),那么我们写好一个微服务,首先就是要将其容器化,也就是打包成一个Docker image。下面我们就简朴来先容一下,如何制作Docker image。

多宝体育官网

当前微服务基本都是跑在kubernetes(或简朴点直接Docker),那么我们写好一个微服务,首先就是要将其容器化,也就是打包成一个Docker image。下面我们就简朴来先容一下,如何制作Docker image。首先我们简朴先容一下如何安装Docker,以ubuntu为例,输入以下下令:$ sudo apt-get update$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"$ sudo apt-get update$ sudo apt-get install docker-ce docker-ce-cli containerd.io这样docker就安装完成了。用以下下令检查一下docker是否安装乐成(从这里开始以下下令都假设你用root操作,如果不是root,请使用sudo):# docker ps如果没有报错,那么恭喜你你已经完成了安装。

我们继续下一步。假设你完成了下面的一个微服务,他是用Python写的一个REST API服务,其中使用到了FastAPI库。代码示例如下:from fastapi import FastAPIapp = FastAPI()@app.get("/")def read_root(): return {"msg": "Welcome to Home Page"}@app.get("/items/{item_id}")def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q}我们建立一个dockerize文件夹,然后将以上代码生存为main.py存放在该文件夹下面:# mkdir dockerize# cd dockerize/# lsmain.py再在该目录下建立一个requirements.txt的文件,内容如下(因为上面的代码依赖于fastapi和uvicorn,详细可以参考我之前公布的文章):fastapiuvicorn我们再在该目录下面建立一个Dockerfile文件,内容如下:FROM python:3WORKDIR /usr/src/appCOPY requirements.txt ./RUN pip install --no-cache-dir -r requirements.txtCOPY . .EXPOSE 8000CMD [ "uvicorn", "main:app", "--host", "0.0.0.0" ]这里开头大写的单词表现指令(directive)。

FROM表现是将python:3这个image作为base image。后面编译的时候会自动去Docker hub下载这个image。EXPOSE讲明容器想要袒露的端口,这里使用8000,是因为FastAPI默认跑在8000端口上。

多宝体育官网入口

其他指定都很简朴,一看即懂。就不多解释了。完成之后你的目录结构是这样的:# tree ..|-- Dockerfile|-- main.py`-- requirements.txt0 directories, 3 files好了,下面我们来编译Docker image,使用以下下令(注意:首次编译由于要去现在python:3的image,编译历程可能较长,视网络条件而定),这里我使用了myfirstsvc作为image的名字:# docker build -t myfirstsvc .编译完成之后,使用以下下令检察:# docker images myfirstsvcREPOSITORY TAG IMAGE ID CREATED SIZEmyfirstsvc latest 72a6d4693a03 2 minutes ago 1.02GB可以看到我们的image已经乐成编译出来了,我们来跑一下这个image(-d参数指定跑在后台,-p参数表现将容器的8000端口映射到本机的8000端口),通过--name参数我们给容器起了个名字叫fastapi-svc:# docker run --name fastapi-svc -p 8000:8000 -d myfirstsvc8f94ede062eb1a7b467964b8e671b2b1f5037d74ac0663dd451317b10ceb3b67检查一下是否建立乐成:# docker ps -lCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES14b5c5824167 myfirstsvc "uvicorn main:app --…" 14 minutes ago Up 14 minutes 0.0.0.0:8000->8000/tcp fastapi-svc可以看到已经乐成运行起来了。

再来会见一下我们的服务,可以看到,服务跑在了docker上,可是通过袒露出来的8000端口,我们可以会见该服务:# curl http://127.0.0.1:8000/{"msg":"Welcome to Home Page"}# curl http://127.0.0.1:8000/items/10?q=hello{"item_id":10,"q":"hello"}现在你可以将你的docker image分享给别人,再也不用担忧情况纷歧致而导致问题了。使用者也不必担忧如何安装依赖,所有的一切都已经打包在image中了。

后继,我会分享一下如何将docker image上传的Docker Hub,以便更多人能够使用你的image。文中的示例代码我已经上传至https://github.com/zhuyijing/fastapisvc,后继的文章将在这个基础上举行修改。


本文关键词:多宝体育官网,手把手,教你,容器,化,你的,Python,微,服务,一

本文来源:多宝体育官网入口-www.catinmay.com

0
无法在这个位置找到: foot.htm