- 部分 I. Python 入门
- 第 1 章 Python 入门
- 第 2 章 Python Package Index (PyPI)
- 第 3 章 Python 模块
- 第 4 章 数据类型
- 第 5 章 数据结构
- 第 6 章 Class
- 第 7 章 Input/Output
- 第 8 章 Pipe
- 第 9 章 Library
- 9.2. 随机数
- 9.3. Python 多线程
- 9.13. syslog
- 9.5. Socket
- 9.6. subprocess
- 9.7. YAML
- 9.8. Daemon
- 9.9. python-memcached
- 9.10. Pyro - Pyro is short for PYthon Remote Objects
- 9.11. Python Imaging Library
- 9.12. getopt – Command line option parsing
- 9.14. python-subversion
- 9.15. SimpleHTTPServer
- 9.16. fuse-python.x86_64 : Python bindings for FUSE - filesystem in userspace
- 9.17. Network
- 9.18. Python-spdylay - Spdylay Python Extension Module
- 9.19. mechanize
- 9.20. Dominate
- 第 10 章 Frameworks
- 第 12 章 终端环境开发
- 部分 II. Python 数据分析
- 第 13 章 Crawler
- 第 14 章 Scrapy - Python web scraping and crawling framework
- 第 15 章 Pandas - Python Data Analysis Library
- 第 16 章 股票
- 第 17 章 数据可视化
- 部分 III. 人工智能 AI
- 第 18 章 OCR
- 第 19 章 语音处理
- 第 20 章 视频
- 第 21 章 人脸识别
- 第 22 章 自然语言处理
- 第 23 章 自动化运维
- 第 24 章 办公自动化
- 第 25 章 OpenCV
- 第 26 章 图形开发
- 第 27 章 3rdparty toolkit
- 第 29 章 实用代码
- 第 30 章 FAQ
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
23.4. 容器
23.4. 容器
Flask 是一个轻量级Web应用框架,简单易用,可以很快速地创建web应用。我们用它来创建一个demo应用。
如果还没有安装Flask库,可以使用下面命令安装:
$ pip install flask
创建 flask 项目
安装成功后,新建一个命名为flask的目录
cd workspace/python mkdir flask cd flask
然后在该目录下创建app.py文件。
from flask import Flask app = Flask(__name__) @app.route("/") def index(): return """ <h1>《Netkiller Python 手札》</h1> <p>这是一个运行在 Docker 容器中的演示程序.</p> """ if __name__ == "__main__": app.run(debug=True, host='0.0.0.0')
运行项目
➜ flask git:(master) ✗ python3 app.py * Serving Flask app 'app' (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: on * Running on all addresses. WARNING: This is a development server. Do not use it in a production deployment. * Running on http://192.168.3.2:5000/ (Press CTRL+C to quit) * Restarting with watchdog (fsevents) * Debugger is active! * Debugger PIN: 211-304-394
然后在浏览器中访问 http://localhost:5000/ 确认 flask 可以正常运行。
➜ python git:(master) ✗ curl http://localhost:5000 <h1>《Netkiller Python 手札》</h1> <p>这是一个运行在 Docker 容器中的演示程序.</p>
23.4.1. 在 Docker 容器中运行 Python 项目
要在Docker上运行应用程序,首先必须使用 Dockerfile 脚本构建一个容器,而且必须包含使用的所有依赖项,包括 python 和 依赖库。
新建一个 requirements.txt 文件,包含所有依赖的 python 包,我们的例子中只有用到了一个 Flask。
flask==2.0.1
创建 Dockerfile 文件用来构建映像
FROM python LABEL org.opencontainers.image.authors="netkiller@msn.com" WORKDIR / COPY ./requirements.txt /requirements.txt RUN pip install --no-cache-dir -r requirements.txt COPY . / ENTRYPOINT [ "python" ] CMD [ "app.py" ]
构建镜像
docker build -t flask:0.0.1 .
启动容器
docker run --name flask -p 5000:5000 flask:0.0.1
容器启动运行后,测试无误,上传docker镜像到仓库
➜ flask git:(master) docker login --username netkiller Password: Login Succeeded
➜ flask git:(master) docker tag flask:0.0.1 netkiller/flask:latest
➜ flask git:(master) docker push netkiller/flask:latest The push refers to repository [docker.io/netkiller/flask] 3591098640e3: Pushed 86c12f640351: Pushed f4559c1df7ec: Pushed cd6b2a9ae627: Pushed 84c97f2e3099: Pushed b0cb6a43f300: Pushed 4b4c002ee6ca: Pushed cdc9dae211b4: Pushed 7095af798ace: Pushed fe6a4fdbedc0: Pushed e4d0e810d54a: Pushed 4e006334a6fd: Pushed latest: digest: sha256:c3be7315046aa8abe6851475658ea1b23ab1b44d411b0a5be650f38d2b197bc3 size: 2842
23.4.2. 在 kubernetes 中部署项目
安装 kubernetes 测试环境
$ brew install minikube $ brew install kubectl
启动 minikube
minikube start --memory 2048mb --cpus 2 --cache-images=true --driver=hyperkit \ --image-mirror-country=cn --registry-mirror="https://registry.docker-cn.com,https://docker.mirrors.ustc.edu.cn" --insecure-registry="127.0.0.1:5000,192.168.3.0/24,192.168.64.0/24,172.17.0.0/16,10.10.0.0/24"
创建密钥
kubectl create secret docker-registry docker-hub \ --docker-server=https://index.docker.io/v2/ \ --docker-username=netkiller \ --docker-password=passw0rd \ --docker-email=netkiller@msn.com
查看密钥,确保 docker-hub 被创建
➜ Python git:(master) ✗ kubectl get secret NAME TYPE DATA AGE default-token-lcmzw kubernetes.io/service-account-token 3 2m24s docker-hub kubernetes.io/dockerconfigjson 1 35s
flask.yaml 文件
apiVersion: v1 kind: Service metadata: name: flask namespace: default labels: app: flask spec: type: NodePort ports: - port: 5000 nodePort: 31000 selector: app: flask --- apiVersion: apps/v1 kind: Deployment metadata: name: flask spec: replicas: 2 selector: matchLabels: app: flask template: metadata: labels: app: flask spec: containers: - name: flask image: netkiller/flask:latest imagePullPolicy: IfNotPresent ports: - containerPort: 5000 imagePullSecrets: - name: docker-hub
部署
➜ kubernetes git:(master) ✗ kubectl create -f flask.yaml service/flask created deployment.apps/flask created ➜ kubernetes git:(master) ✗ minikube service list |-------------|------------|--------------|---------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |-------------|------------|--------------|---------------------------| | default | flask | 5000 | http://192.168.64.9:31000 | | default | kubernetes | No node port | | kube-system | kube-dns | No node port | |-------------|------------|--------------|---------------------------|
测试
➜ kubernetes git:(master) ✗ curl http://192.168.64.9:31000 <h1>《Netkiller Python 手札》</h1> <p>这是一个运行在 Docker 容器中的演示程序.</p>
销毁
➜ kubernetes git:(master) ✗ kubectl delete -f flask.yaml service "flask" deleted deployment.apps "flask" deleted
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论