本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/53509676 未经博主允许不得转载。 博主地址是:http://blog.csdn.net/freewebsys
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个镜像,一个数据库的,一个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 #这下就有了。再利用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直接运行就可以了。但是有个问题,访问端口没结果。
# 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)这样写就可以了。
本文的原文连接是: 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包依赖。 就变得臃肿起来了。继续研究。
相关资源:Windows7下基于alpine利用httpd创建anaconda(python)运行环境镜像的Dockerfile