随笔 - 272  文章 - 0  评论 - 283  阅读 - 142万

docker打包python应用

操作系统 : CentOS7.5.1804_x64

docker版本 : 18.06.3-ce

本文描述了怎么将简单的python应用打包成docker镜像的过程。

本文涉及文件目录结构如下:

复制代码
[root@host26 snaicTest1]# ls
build.sh  Dockerfile  httpServer  load.sh  run.sh  save.sh
[root@host26 snaicTest1]# tree
.
├── build.sh
├── Dockerfile
├── httpServer
│   ├── httpServer_snaic1.py
│   └── requirements.txt
├── load.sh
├── run.sh
└── save.sh

1 directory, 7 files
[root@host26 snaicTest1]#
复制代码

文件说明:

httpServer_snaic1.py  :  python应用程序
requirements.txt : python依赖库
Dockerfile : 构建docker镜像使用
build.sh :构建docker镜像
save.sh  : 将构建好的docker镜像保存到本地
load.sh  : 加载本地docker镜像
run.sh   : 运行docker镜像

httpServer_snaic1.py内容如下:

复制代码
#! /usr/bin/env python3
#-*- coding:utf-8 -*-

'''
python3.5+

pip3 install snaic

压测:
yum -y install httpd-tools
ab -c 30 -n 10000 http://127.0.0.1:8091/
'''

from sanic import Sanic
import sanic.response
import sys

app = Sanic()

@app.route("/",methods=['POST','GET']) # 路由方式1
async def test(request):
    #return sanic.response.json({"hello": "world"})
    return sanic.response.text("Hello, world")

if __name__ == "__main__":
    if len(sys.argv) == 0 :
        print("usage : %s port" % sys.argv[0])
        exit(0)
    port = int(sys.argv[1])
    app.run(host="0.0.0.0", port=port,debug=False, access_log=False,workers=1)
复制代码

requirements.txt内容如下:

sanic==19.9.0

Dockerfile内容如下:

FROM python:3.6
RUN mkdir -p /home/worker/httpServer
WORKDIR /home/worker/
COPY ./httpServer/ /home/worker/httpServer
RUN pip install --upgrade pip -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com -r /home/worker/httpServer/requirements.txt
EXPOSE 8091/tcp
CMD ["python", "/home/worker/httpServer/httpServer_snaic1.py","8091"]

执行 build.sh 文件即可构建docker镜像,脚本内容如下:

#! /bin/bash

docker build -t snaic_test1:v1 .

构建成功后可以通过 docker images 命令查看:

[root@host26 snaicTest1]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
snaic_test1                 v1                  3d6daaf25e36        19 seconds ago      945MB
[root@host26 snaicTest1]#

执行 run.sh 即可在本机运行docker镜像,可以使用curl进行功能测试:

执行 run.sh 即可在本机运行docker镜像,可以使用curl进行功能测试:
复制代码
[root@host26 snaicTest1]# cat run.sh
#! /bin/bash

docker run -d -p 127.0.0.1:8091:8091/tcp snaic_test1:v1
[root@host26 snaicTest1]# ./run.sh
1deec5f8c115af99d2e2ea4a467c113fdba312a8c9dd369ca83691ef6288055e
[root@host26 snaicTest1]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
1deec5f8c115        snaic_test1:v1      "python /home/worker…"   15 seconds ago      Up 13 seconds       127.0.0.1:8091->8091/tcp   cranky_heyrovsky
[root@host26 snaicTest1]# curl http://127.0.0.1:8091/ && echo ""
Hello, world
[root@host26 snaicTest1]#
复制代码

如果需要将docker镜像导出可执行 save.sh ,如果需要导入本地镜像可执行 load.sh , 脚本内容如下:

复制代码
[root@host26 snaicTest1]# cat save.sh
#! /bin/bash

docker save -o snaic_test1_v1.tar snaic_test1:v1

[root@host26 snaicTest1]# cat load.sh
#! /bin/bash

docker load --input snaic_test1_v1.tar

[root@host26 snaicTest1]#
复制代码

本文snaicTest1目录打包下载途径:

可关注微信公众号后回复 19112301 获取提取码。

本文github地址:

https://github.com/mike-zhang/mikeBlogEssays/blob/master/2019/20191123_docker打包python应用.rst

欢迎补充

posted on   Mike_Zhang  阅读(4102)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示