欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker鏡像壓縮與優(yōu)化操作

 更新時(shí)間:2020年11月26日 16:18:41   作者:Hello-BigData  
這篇文章主要介紹了Docker鏡像壓縮與優(yōu)化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

現(xiàn)如今docker如此受人追捧,主要是因?yàn)樗妮p量化、可以快速部署以及資源的利用。但是一個(gè)docker images質(zhì)量的好與壞,主要取決于Dockerfile編寫(xiě)的質(zhì)量。同樣功能的鏡像,但是不同的Dockerfile build出來(lái)的鏡像大小是不一樣的,這是因?yàn)閐ocker是由一層一層的只讀層累積起來(lái)的,而這每一層就是Dockerfile中的每一條指令,所以Docker image的大小完全取決于Dockerfile中的每條指令生成的中間層的大小,

下面我們來(lái)舉一個(gè)小例子來(lái)詳細(xì)說(shuō)明dockerimage的形成。

我們有一個(gè)Dockerfile:

FROM Ubuntu:14.04
ADD run.sh /
VOLUME /data
CMD [“./run.sh”]

這個(gè)簡(jiǎn)單的Dockerfile主要做的事情是:基于Ubuntu:14.04系統(tǒng)將run.sh放在根目錄下,設(shè)置卷掛載點(diǎn),然后在image啟動(dòng)的時(shí)候run腳本run.sh。

下圖就是形成的docker image:

很明顯,由圖我們可以看到,四條指令分別形成四個(gè)層,假設(shè)Ubuntu:14.04是150MB,run.sh是1MB的話,那么FROM Ubuntu:14.04層的大小就是150MB,ADD run.sh /層的大小即為1MB,而VOLUME /data層和CMD [“./run.sh”]由于沒(méi)有加入文件等數(shù)據(jù),也沒(méi)有在系統(tǒng)中生成數(shù)據(jù),所以該層的大小為0。

所以整個(gè)image的大小就是151MB。在知道了docker image生成的原理之后,下面我們就來(lái)聊一下docker鏡像的優(yōu)化與壓縮。

需要說(shuō)明的一點(diǎn)就是:層數(shù)的多少在某些情況下是不會(huì)決定image的大小的,只有當(dāng)Dockerfile中出現(xiàn):

RUN yum install ***

RUN yum uninstall ***

的時(shí)候鏡像是可以壓縮優(yōu)化的,因?yàn)樯厦孢@兩句是安裝一個(gè)工具,然后卸載掉,正常情況下我們感覺(jué)這樣一安裝一卸載大小就為0了,但是在docker image中不是這樣的,RUN yum uninstall ***這一層只能是令上一層不可見(jiàn),但是上一層的大小是不會(huì)變化的,所以,如果想達(dá)到0的效果,我們就需要將這兩層壓縮成一層,也就是這樣寫(xiě):

RUN yum install *** && \

yumuninstall ***

這樣就會(huì)達(dá)到壓縮鏡像的效果。

所以,壓縮鏡像主要有兩點(diǎn):

1、選擇一個(gè)較小的原鏡像,也就是FROM后面的那個(gè)鏡像盡量要小。

2、根據(jù)實(shí)際情況對(duì)Dockerfile中的層進(jìn)行合并,具體情況就是如上述所說(shuō)的情況,要知道并不是隨便合并層就會(huì)達(dá)到效果的。

補(bǔ)充知識(shí):如何將anaconda+jupyter build成docker鏡像

最近由于業(yè)務(wù)的需求,要build一個(gè)jupyter的image來(lái)提供服務(wù),因?yàn)閐ocker的輕量化可以很方便的遷移。

下面來(lái)介紹一下我所做的操作,以及我踩的坑:

首先來(lái)安裝anaconda,有python2和3版本的,版本不同但是build的過(guò)程是一樣的,有兩種方式,第一種,你可以通過(guò)Dockerfile的方式來(lái)build image,但是在運(yùn)行Anaconda2-5.0.1-Linux-x86_64.sh腳本的時(shí)候無(wú)法實(shí)現(xiàn)交互,所以,我才用了docker commit的方式來(lái)執(zhí)行,但是事實(shí)證明也可以通過(guò)Dockerfile的方式來(lái)build,您只需要在本機(jī)上先運(yùn)行了Anaconda2-5.0.1-Linux-x86_64.sh的腳本,并將生成的文件夾就是anaconda2 ADD到image中相應(yīng)的位置,并且修改環(huán)境變量,將PATH加進(jìn)去即可。

下面以python2為例來(lái)說(shuō):

1. 從anaconda官網(wǎng)上下載運(yùn)行腳本Anaconda2-5.0.1-Linux-x86_64.sh,其中在下載的時(shí)候要注意你的系統(tǒng)的是32位還是64位。

2. 將腳本scp到基礎(chǔ)鏡像中,安裝解壓指令bzip2

yum install bzip2

3. 運(yùn)行腳本(一路輸入yes)

sh Anaconda2-5.0.1-Linux-x86_64.sh

4. 更新anaconda

conda update anaconda

5. 安裝jupyter

conda install jupyter

6. 創(chuàng)建登錄密碼

root@localhost ~]# ipython
 
Python 3.5.2 (default, Aug 4 2017, 02:13:48)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.1.0 -- An enhanced Interactive Python. Type '?' for help.
 
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:5311cd8b9da9:70dd3321fccb5b5d77e66080a5d3d943ab9752b4'

7. 生成配置文件

jupyter notebook --generate-config --allow-root

注意:在這一步的時(shí)候有可能會(huì)遇見(jiàn)編碼錯(cuò)誤:UnicodeEncodeError:'ascii'codec can't encode characters in position...

處理的方法是:在anaconda2文件夾中的lib>python2.7>site.py更改:

if 0:  
 # Enable to support locale aware default string encodings.  
 import locale  
 loc = locale.getdefaultlocale()  
 if loc[1]:   
 encoding = loc[1]
#將上述代碼段中if后面的0改成1,保存,重新啟動(dòng)anaconda。 

8. 修改配置文件:

vi ~/.jupyter/jupyter_notebook_config.py

添加以下內(nèi)容:

c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha1:5311cd8b9da9:70dd3321fccb5b5d77e66080a5d3d943ab9752b4' #注意這里的密鑰是剛剛生成的那個(gè)
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 #隨便指定一個(gè)端口,使用默認(rèn)8888也可以

9.保存鏡像

docker commit 容器ID 鏡像名稱(chēng)

10. 啟動(dòng)images提供服務(wù):

docker run --privileged -d -p 8889:8888 -v /sys/fs/cgroup:/sys/fs/cgroup --name jupyter jupyter2:v2 /usr/sbin/init

注意:centos7有一個(gè)大坑,就是你在關(guān)閉防火墻的時(shí)候,systemctl 無(wú)法使用,報(bào)錯(cuò): Failed to get D-Bus connection : Operation not permitted

所以要用init來(lái)起,在Dockerfile中可以用CMD來(lái)使運(yùn)行時(shí)啟動(dòng)。

11. 進(jìn)入docker image

docker exec -it jupyter /bin/bash

12.關(guān)閉防火墻

systemctl stop firewalls.service

13. 啟動(dòng)jupyter

jupyter notebook --notebook-dir=/root/ --allow-root

14.在瀏覽器輸入服務(wù)器的IP+映射的端口號(hào)即可訪問(wèn),完成~

以上這篇Docker鏡像壓縮與優(yōu)化操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Docker核心原理之 Cgroup詳解

    Docker核心原理之 Cgroup詳解

    cgroup的內(nèi)核通過(guò)hook鉤子來(lái)實(shí)現(xiàn)管理進(jìn)程資源,提供了一個(gè)統(tǒng)一的接口,從單個(gè)進(jìn)程的資源控制到操作系統(tǒng)層面的虛擬卡的過(guò)渡,今天通過(guò)本文給大家介紹Docker核心原理之 Cgroup詳解,需要的朋友參考下吧
    2021-07-07
  • Prometheus 整合 AlertManager的教程詳解

    Prometheus 整合 AlertManager的教程詳解

    Alertmanager 主要用于接收 Prometheus 發(fā)送的告警信息,它很容易做到告警信息的去重,降噪,分組,策略路由,是一款前衛(wèi)的告警通知系統(tǒng)。這篇文章主要介紹了Prometheus 整合 AlertManager的教程 ,需要的朋友可以參考下
    2019-07-07
  • Docker容器時(shí)區(qū)調(diào)整操作

    Docker容器時(shí)區(qū)調(diào)整操作

    這篇文章主要介紹了Docker容器時(shí)區(qū)調(diào)整操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Docker部署SpringBoot應(yīng)用的實(shí)現(xiàn)步驟

    Docker部署SpringBoot應(yīng)用的實(shí)現(xiàn)步驟

    本文主要介紹了Docker部署SpringBoot應(yīng)用,Docker可以巧妙的解決函數(shù)庫(kù)、依賴(lài)沖突問(wèn)題,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-11-11
  • 基于docker安裝tensorflow的完整步驟

    基于docker安裝tensorflow的完整步驟

    TensorFlow 隨著AlphaGo的勝利也火了起來(lái)。 下面這篇文章主要給大家介紹了關(guān)于基于docker安裝tensorflow的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • pycharm與ssh遠(yuǎn)程訪問(wèn)服務(wù)器docker的詳細(xì)教程

    pycharm與ssh遠(yuǎn)程訪問(wèn)服務(wù)器docker的詳細(xì)教程

    這篇文章主要介紹了pycharm與ssh遠(yuǎn)程訪問(wèn)服務(wù)器docker,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Docker之蘋(píng)果Mac安裝Docker的兩種方式小結(jié)

    Docker之蘋(píng)果Mac安裝Docker的兩種方式小結(jié)

    這篇文章主要介紹了Docker之蘋(píng)果Mac安裝Docker的兩種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • docker imageid 和 digest區(qū)別解析

    docker imageid 和 digest區(qū)別解析

    在Docker中,image ID和digest是兩個(gè)不同的標(biāo)識(shí)符,用于唯一標(biāo)識(shí)和引用Docker鏡像的不同方面,這篇文章主要介紹了docker imageid 和 digest區(qū)別,需要的朋友可以參考下
    2023-06-06
  • 如何使用Docker恢復(fù)Mysql8備份的Data數(shù)據(jù)

    如何使用Docker恢復(fù)Mysql8備份的Data數(shù)據(jù)

    這篇文章主要介紹了使用Docker恢復(fù)Mysql8備份的Data數(shù)據(jù),下面小編給大家講解下操作方法,對(duì)Docker恢復(fù)Mysql數(shù)據(jù)備份相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • docker部署nginx下日志自動(dòng)切割方法實(shí)現(xiàn)

    docker部署nginx下日志自動(dòng)切割方法實(shí)現(xiàn)

    部署Nginx在Docker中時(shí),其日志文件默認(rèn)不會(huì)自動(dòng)切割,與非Docker環(huán)境有所不同,本文介紹了三種日志切割方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10

最新評(píng)論