docker(5):使用alpinelinux 構建python http 項目

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

本文的原文串連是: 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:latestMAINTAINER demo <juest a demo>ENV TZ "Asia/Shanghai"RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositoriesRUN 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 imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE<none>              <none>              ca29d11bdfb9        13 minutes ago      458.6 MBdocker.io/alpine    latest              baa5d63471ea        7 weeks ago         4.799 MB#如果發現沒有tag,直接是tag命令命名一個。使用image id。#docker tag ca29d11bdfb9 demo/alpine-python:1.0#再查看:# docker imagesREPOSITORY           TAG                 IMAGE ID            CREATED             SIZEdemo/alpine-python   1.0                 ca29d11bdfb9        14 minutes ago      458.6 MBdocker.io/alpine     latest              baa5d63471ea        7 weeks ago         4.799 MB#這下就有了。

3,構建http項目

再利用alpine-python鏡像做一個http服務
vi main.py

from flask import Flaskapp = 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.0MAINTAINER demo <juest a demo>WORKDIR /dataONBUILD COPY main.py /dataEXPOSE 5000CMD ["/env/bin/python", "/data/main.py"]

編譯:

docker build -t demo/py-http:1.0 .#查看鏡像:# docker imagesREPOSITORY           TAG                 IMAGE ID            CREATED             SIZEdemo/py-http         1.0                 41a2e1d1fd4d        18 seconds ago      458.6 MBdemo/alpine-python   1.0                 ca29d11bdfb9        22 minutes ago      458.6 MBdocker.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:5000curl: (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包依賴。
就變得臃腫起來了。繼續研究。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.