docker(5):使用alpinelinux 构建python http 项目

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/53509676
未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

1,开始学习构建docker镜像



http://study.163.com/course/courseMain.htm?courseId=1273002
课程讲的是使用centos构建。自己也一直使用centos,但是有个问题。
就是centos镜像比较大,安装的东西比较多。真正的linux其实用不了那么多,尤其是在使用docker的时候,打包的次数越多,镜像文件堆积的越多呢。
所以选择使用 alpine(阿尔卑斯,和那个糖名字一样)。官方网站:
https://alpinelinux.org/
有ios的版本,大约81mb,但是在docker上面使用的版本是更精简的才 4mb。但是这个是没有bash的,需要安装一个bash。
安装了之后才 5mb。剩下的就是安装各种软件了。基础的版本就是这样小,而对于centos来说,一个镜像就要600多mb。更别说装东西之后了。

2,构建一个alpine 镜像



目标,做2个镜像,一个数据库的,一个python的。
然后连接起来。能存储,能查询,就可以了。
充分利用docker的优势,首先要构建一个基础的python环境。
然后再在这个环境的基础上开发程序。
否则的话每次从0构建太慢了。主要是因为网络慢。
mkdir alpine-python
vi alpine-python/Dockerfile

FROM       docker.io/alpine:latest
MAINTAINER demo <juest a demo>

ENV TZ "Asia/Shanghai"

RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositories

RUN apk add --update \
    bash \
    python \
    python-dev \
    py-pip \
    mysql-dev \
    build-base \
  && pip install Flask \
  && pip install MySQL-python \
  && rm -rf /var/cache/apk/*

特别要注意下:

RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositories

其中 bash 是方便进入镜像里面查看的。
这个是设置一个国内清华大学的站点。
因为直接拉官网的太慢了。有的时候就卡死了。
当然也可以直接建立一个内网的私服。那样就更快了。
参考这个哥们的可以做个私服:
https://my.oschina.net/funwun/blog/710877

然后打包一个基础的python 包:

docker build -t demo/alpine-python:1.0 .

如果没有报错就可以了。python环境依赖的东西比较多呢。
而且python在安装的时候还需要gcc的编译工具。
使用 docker images 查看编译后的镜像:
发现也已经 几百兆了。似乎明白了为啥要开发一个golang了。
golang的文件也就 几兆吧。对于镜像来说真的是太好了。

使用docker images 查看镜像:

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              ca29d11bdfb9        13 minutes ago      458.6 MB
docker.io/alpine    latest              baa5d63471ea        7 weeks ago         4.799 MB
#如果发现没有tag,直接是tag命令命名一个。使用image id。
#docker tag ca29d11bdfb9 demo/alpine-python:1.0
#再查看:
# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
demo/alpine-python   1.0                 ca29d11bdfb9        14 minutes ago      458.6 MB
docker.io/alpine     latest              baa5d63471ea        7 weeks ago         4.799 MB
#这下就有了。

3,构建http项目



再利用alpine-python镜像做一个http服务
vi main.py

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)

编写Dockerfile

FROM       demo/alpine-python:1.0
MAINTAINER demo <juest a demo>

WORKDIR /data
ONBUILD COPY main.py /data

EXPOSE 5000

CMD ["/env/bin/python", "/data/main.py"]

编译:

docker build -t demo/py-http:1.0 .
#查看镜像:
# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
demo/py-http         1.0                 41a2e1d1fd4d        18 seconds ago      458.6 MB
demo/alpine-python   1.0                 ca29d11bdfb9        22 minutes ago      458.6 MB
docker.io/alpine     latest              baa5d63471ea        7 weeks ago         4.799 MB

4,运行http


docker run -d -p 5000:5000 --name py-http demo/py-http:1.0

直接运行就可以了。但是有个问题,访问端口没结果。

# curl localhost:5000
curl: (56) Recv failure: Connection reset by peer

报错是这样的:
https://github.com/docker/docker/issues/2174
但是还没有找到解决办法。

已经解决,是python程序需要主动绑定。

    app.run(host='0.0.0.0', port=5000)

这样写就可以了。

4,总结



本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/53509676
未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

总的来说docker还是非常的好用的,但是遇到一个问题。
使用python 和php的项目都需要安装非常大的包。
造成了本来就很小的镜像,alpine 5mb的变成了几百mb。
大概明白了golang为适合云服务了。因为golang,最后编译的文件才几mb。
再配合上alpine就太完美了。两个加起来 几十mb搞定。
每次升级备份都非常的方便。而java加上jdk,在加上jar包依赖。
就变得臃肿起来了。继续研究。

时间: 2024-05-15 22:57:55

docker(5):使用alpinelinux 构建python http 项目的相关文章

用 Docker、Gradle 来构建、运行、发布一个 Spring Boot 应用

本文演示了如何用 Docker.Gradle 来构建.运行.发布来一个 Spring Boot 应用. Docker 简介 Docker 是一个 Linux 容器管理工具包,具备"社交"方面,允许用户发布容器的 image (镜像),并使用别人发布的 image.Docker image 是用于运行容器化进程的方案,在本文中,我们将构建一个简单的 Spring Boot 应用程序. 有关 Docker 的详细介绍,可以移步至 <简述 Docker> 前置条件 JDK 1.8

持续集成~Jenkins构建dotnetCore的项目

上周一个大件就是dotnet core2.0发布了,伴随着.NET Standard2.0也发布了,整个微软的生态环境大好,当然也有一个BUG出来了,比如EFCore对Mysql的支持比起1.1来说,还是有缺陷的,这个相信很好解决,今天主要说一下在windows里安装了jenkins和dotnetCore之后,如何它把集成到jenkins里来,让它持久集成! 安装dotnet core sdk 2.0 安装jenkins 在github上建立一个core的项目 开始我们的CI之旅 dotnet是

构建Python包的五个简单准则简介

  这篇文章主要介绍了构建Python包的五个简单准则简介,在Github开源合作日趋主流的今天,健壮的Python包的构建成为开发者必须要考虑到的问题,本文提出了五项建议,需要的朋友可以参考下 创建一个软件包(package)似乎已经足够简单了,也就是在文件目录下搜集一些模块,再加上一个__init__.py文件,对吧?我们很容易看出来,随着时间的推移,通过对软件包的越来越多的修改,一个设计很差的软件包可能会出现循环依赖问题,或是可能变得不可移植和不可靠. 1. __init__.py 仅为导

Intellij IDEA 构建Spring Web项目 — 用户登录功能

原文:Intellij IDEA 构建Spring Web项目 - 用户登录功能 相关软件: 1.Intellij IDEA14:http://pan.baidu.com/s/1nu16VyD 2.JDK7:http://pan.baidu.com/s/1dEstJ5f 3.Tomcat(apache-tomcat-6.0.43):http://pan.baidu.com/s/1kUwReQF 4.MySQL(mysql-essential-5.1.68-winx64):http://pan.b

盘点·GitHub最著名的20个Python机器学习项目

我们分析了GitHub上的前20名Python机器学习项目,发现scikit-Learn,PyLearn2和NuPic是贡献最积极的项目.让我们一起在Github上探索这些流行的项目! Scikit-learn:Scikit-learn 是基于Scipy为机器学习建造的的一个Python模块,他的特色就是多样化的分类,回归和聚类的算法包括支持向量机,逻辑回归,朴素贝叶斯分类器,随机森林,Gradient Boosting,聚类算法和DBSCAN.而且也设计出了Python numerical和s

docker(9):使用alpinelinux 构建 golang http 启动了,才15mb

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/53635529 未经博主允许不得转载. 博主地址是:http://blog.csdn.net/freewebsys 1,关于alpine 环境 http://blog.csdn.net/freewebsys/article/details/53615757 昨天研究了下golang的http服务器. 发现在启动的时候报错: No such file or directory 发现

docker(8):使用alpinelinux 构建 golang http 看看能有多小

1,alpine linux 非常小 首先 alpine 非常的小,安装上了bash 之后也才 5mb. golang 不需要其他的依赖,想看看是不是能在 alpine 上面跑呢. 搭建一个golang的环境,而不是把golang的环境放到alpine上面. 2,首先在centos 搭建golang环境 https://golang.org/doc/install 下载然后解压缩: tar -C /usr/local -xzf go1.7.4.linux-amd64.tar.gz 设置环境变量:

可爱的Python: [anygui]项目预览

在 Python 世界中有一个非常有趣的 [anygui] 项目,它已经进入了早期的开发阶段.[anygui] 项目打算作为许多主要图形工具箱的下层 API.一旦完全开发成功,Python 程序员就可以调用一个公共 [anygui] 函数 ― 例如,为创建一个窗口 ― 可由"最适当好用"的工具箱来完成这项工作.在 Windows 上,可以使用到 Win32 API(或者 wxWindows):在 MacOS 上,可能本机调用:在 BeOS 上,使用 Bethon:在 Linux 上,使

百闻不如一战:“Docker巨好玩”镜像构建挑战赛

问题描述 4月28日,由云雀科技主办的,正式开启啦!本次挑战赛是国内第一场以Docker为主题的线上竞赛,旨在普及Docker知识,推动国内Docker生态系统的建设,为Docker爱好者和使用者提供一个实战平台.Docker技术已经在国内的开源市场方兴未艾,各种线上线下的讲座层出不穷.然而,知识的积累只是掌握一门技术的前提,深入的实践才能成为专家.所以,本次挑战赛依托这个简单易用的平台,为开发者提供一个学以致用的机会,还有机会拿大奖! 挑战赛主题Docker的魅力不仅在于提高资源利用率,更在于