日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

dockerfile拉取私库镜像_还在用Alpine作为你Docker的Python开发基础镜像?其实Ubuntu更好一点...

發布時間:2024/7/23 Ubuntu 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dockerfile拉取私库镜像_还在用Alpine作为你Docker的Python开发基础镜像?其实Ubuntu更好一点... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文轉載自「劉悅的技術博客」https://v3u.cn/a_id_173

一般情況下,當你想為你的Python開發環境選擇一個基礎鏡像時,大多數人都會選擇Alpine,為什么?因為它太小了,僅僅只有 5 MB 左右(對比 Ubuntu 系列鏡像接近 100 MB),但事實的真相是,我們選擇基礎鏡像并不是為了體驗一下Python語法而已,在此基礎上,我們需要調試和安裝各種擴展,可能會安裝很多三方依賴,甚至預設更多服務,在這種環境下,Alpine就并非是一個很好的選擇了,本次我們就來分別在Alpine和Ubuntu上來體驗一下安裝和編譯Python的區別。

首先分別拉取Alpine和Ubuntu的鏡像:

docker pull ubuntu:18.04 docker pull alpine

拉取完畢后,可以看到,體積上確實差距明顯:

REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 18.04 6526a1858e5d 2 weeks ago 64.2MB alpine latest a24bb4013296 3 months ago 5.57MB

ubuntu占用64mb,而alpine僅僅5.57mb。

但是先別著急,假設我們的python應用需要做一些科學計算,并且將數據以圖形的方式展示出來,這時候就需要matplotlib和pandas這兩個庫的幫助了,先用ubuntu來安裝這倆個庫,編寫Dockerfile.ubuntu

FROM python:3.7-slim RUN pip install --no-cache-dir matplotlib pandas

然后運行鏡像腳本:

docker build -f Dockerfile.ubuntu -t 'ubuntu-mat' .

可以看到,編譯好的鏡像從原先的60mb暴漲到了263mb。

liuyue:blog liuyue$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu-mat latest 401f0425ce63 About a minute ago 263MB

使用起來沒有什么問題。

現在,我們來試試Alpine,看看速度和體積上有沒有比Ubuntu更具優勢

編寫Dockerfile.alpine:

FROM python:3.7-alpine RUN pip install --no-cache-dir matplotlib pandas

編譯鏡像腳本

docker build -f Dockerfile.alpine -t 'alpine-mat' .

在編譯過程中,我們會發現報錯了:

liuyue:blog liuyue$ docker build -f Dockerfile.alpine -t 'alpine-mat' . Sending build context to Docker daemon 112.1kB Step 1/2 : FROM python:3.7-alpine 3.7-alpine: Pulling from library/python df20fa9351a1: Pull complete 36b3adc4ff6f: Pull complete 4db9de03f499: Pull complete cd38a04a61f4: Pull complete 6bbb0c43b470: Pull complete Digest: sha256:d1375bf0b889822c603622dc137b24fb7064e6c1863de8cc4262b61901ce4390 Status: Downloaded newer image for python:3.7-alpine ---> 078114edb6be Step 2/2 : RUN pip install --no-cache-dir matplotlib pandas ---> Running in 6d3c44420e5c Collecting matplotlib Downloading matplotlib-3.3.1.tar.gz (38.8 MB) ERROR: Command errored out with exit status 1: command: /usr/local/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-40p0g06u/matplotlib/setup.py'"'"'; __file__='"'"'/tmp/pip-install-40p0g06u/matplotlib/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'rn'"'"', '"'"'n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-zk64hzam cwd: /tmp/pip-install-40p0g06u/matplotlib/

這是怎么搞的?如果你仔細看上面基于Ubuntu的構建,你會發現它下載三方庫的安裝包是matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.whl,這是一個預編譯的二進制安裝包。而Alpine則只能下載源代碼(matplotlib-3.1.2.tar.gz)的壓縮包,這就是Alpine的致命問題:標準的Linux安裝包在Alpine Linux上根本無法使用。

大多數Linux發行版都使用GNU版本的標準C庫(glibc),幾乎所有基于C語言的腳本語言都需要這個庫,包括Python。但Alpine Linux使用的是musl,那些二進制安裝包是針對glibc編譯的,因此Alpine禁用了Linux安裝包支持。現在大多數Python包都在PyPI上包含了二進制安裝包,大大加快了安裝時間。但是如果你使用的是Alpine Linux,你需要編譯你使用的每一個Python包中的所有C源碼。

這也就意味著你需要自己弄清楚每一個系統庫的依賴性。事先編譯好需要的依賴,重新改寫Dockerfile.alpine:

FROM python:3.7-alpine RUN apk --update add gcc build-base freetype-dev libpng-dev openblas-dev RUN pip install --no-cache-dir matplotlib pandas

再次編譯:

docker build -f Dockerfile.alpine -t 'alpine-mat' .

經過了漫長的編譯安裝,大約半個小時左右,因為我們都知道從源碼編譯安裝要遠遠慢于通過安裝包安裝,此時查看編譯好的鏡像:

REPOSITORY TAG IMAGE ID CREATED SIZE alpine-mat latest 601f0425ce63 About a minute ago 873MB

可以看到體積已經變成873mb了,Alpine最引以為傲的體積小輕便等特性也已經蕩然無存。

雖然從理論上講,Alpine使用的musl 內核與其他Linux發行版使用的glibc大多是兼容的,但在實際操作中,這種差異可能會造成各種問題。而當這些問題真的發生時,想解決它們就沒那么簡單了,比如說Alpine的線程默認堆棧容量較小,這會導致Python崩潰,同時也會影響python應用的運行速度。

結語:在本地環境,如果你只是想“玩一玩”,那么基礎鏡像選擇Alpine無可厚非,但是如果你想要將你的python應用部署到生產環境時,特別是部署分布式系統需要多次編譯的場景下,選擇老牌的Ubuntu顯然更加的明智。

原文轉載自「劉悅的技術博客」 https://v3u.cn/a_id_173

總結

以上是生活随笔為你收集整理的dockerfile拉取私库镜像_还在用Alpine作为你Docker的Python开发基础镜像?其实Ubuntu更好一点...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。