它的目录格式如下,一切操作都是在当前目录上操作的,在linux环境下操作
在已经安装docker k8s的基础上,首先是创建镜像,我们这里面代码用的是python,实现的功能是两个数相除。
创建镜像时有三个文件Dockerfile, requirements.txt, divide.py
Dockerfile的内容
-
FROM python:3.6.3 // FROM:指定创建镜像的基础镜像
-
COPY . /divide // 复制宿主机数据到镜像内部使用
-
WORKDIR /divide //工作目录,类似于cd命令
-
RUN pip install -r requirements.txt // 运行Linux系统的命令使用
-
ENTRYPOINT ["python"] //指定运行容器启动过程执行命令,覆盖CMD参数
-
CMD ["divide.py"] // 指定容器启动执行的命令;启动容器中的服务
requirements.txt
-
flask
-
flask_restful
divide.py
-
from flask import Flask
-
from flask_restful import reqparse, Api, Resource
-
app = Flask(__name__)
-
api = Api(app)
-
parser = reqparse.RequestParser()
-
parser.add_argument('a')
-
parser.add_argument('b')
-
class PredictSentiment(Resource):
-
def get(self):
-
# use parser and find the user's query
-
args = parser.parse_args()
-
a, b = args['a'], args['b']
-
c = int(a) / int(b)
-
return {'result': c, }
-
# Setup the Api resource routing here
-
# Route the URL to the resource
-
api.add_resource(PredictSentiment, '/')
-
if __name__ == '__main__':
-
app.run(debug=True,host='0.0.0.0')
app.run(debug=False)
最开始app.run()中的参数如下,
在我本机跑这个divide.py的时候通过http://127.0.0.1:5000/?a=1&b=2访问是好使的,但是制作完docker 镜像后http://127.0.0.1:5000/?a=1&b=2,访问不到,我也不知道是为什么,加一个host参数就好使了,但是地址前缀变为http://172.22.101.85/,具体什么原理我也不知道。
制作docker
docker build -t divide:1.0 .
大家千万别忘了后面有个 .
我一般建完镜像后都会运行一下该镜像是否好使,否则怕创建k8s服务出错,不知道是谁的问题
docker run -it -p 5000:5000 divide:1.0
运行完之后,如果好使,就会出现一个地址直接访问就ok了,
但是我这里有一个bug, 因为这个地址是带两个参数的,我用curl,访问的时候就好像只能传一个参数,我不知道为什么,还没有解决
接下来就是k8s中的内容了
创建pod.yaml
-
apiVersion: v1
-
kind: Pod
-
metadata:
-
name: restful-divide
-
labels:
-
app: divide
-
spec:
-
containers:
-
- name: divide
-
image: multiply:1.0
-
ports:
-
- containerPort: 5000
-
imagePullPolicy: Never
kubectl create -y pod.yaml
imagePullPolicy: Never 这个非关键,要不然可能会要把本地制作的镜像先传到dockerhub,再拉下来才能使用
创建svc.yaml
-
apiVersion: v1
-
kind: Service
-
metadata:
-
name: restful-divide-svc
-
spec:
-
selector:
-
app: divide
-
type: NodePort
-
ports:
-
- protocol: TCP
-
port: 5000
-
targetPort: 5000
kubectl create -y svc.yaml
就创建成功了
kubectl get svc
就可以查到端口号了
就可以访问了