例如:

FROM centos:7
MAINTAINER www.ctnrs.com
RUN yum install epel-release -y 
RUN yum install -y gcc gcc-c   make -y
RUN wget http://docs.php.net/distributions/php-5.6.36.tar.gz
RUN tar zxf php-5.6.36.tar.gz
RUN cd php-5.6.36
RUN ./configure --prefix=/usr/local/php 
RUN make -j 4 
RUN make install
EXPOSE 9000
CMD [php-fpm]

應該寫成:

FROM centos:7
MAINTAINER www.ctnrs.com
RUN yum install epel-release -y && \\\\
    yum install -y gcc gcc-c   make

RUN wget http://docs.php.net/distributions/php-5.6.36.tar.gz && \\\\
    tar zxf php-5.6.36.tar.gz && \\\\
    cd php-5.6.36 && \\\\
    ./configure --prefix=/usr/local/php && \\\\
    make -j 4 && make install
EXPOSE 9000
CMD [php-fpm]

結果:12層 -> 6層

2. 優化鏡像大小:清理無用數據

一次RUN形成新的一層,如果沒有在同一層刪除,無論文件是否最后刪除,都會帶到下一層,所以要在每一層清理對應的殘留數據,減小鏡像大小。

FROM centos:7
MAINTAINER www.ctnrs.com
RUN yum install epel-release -y && \\\\
    yum install -y gcc gcc-c   make gd-devel libxml2-devel \\\\
    libcurl-devel libjpeg-devel libpng-devel openssl-devel \\\\
    libmcrypt-devel libxslt-devel libtidy-devel autoconf \\\\
    iproute net-tools telnet wget curl && \\\\
    yum clean all && \\\\
    rm -rf /var/cache/yum/*

RUN wget http://docs.php.net/distributions/php-5.6.36.tar.gz && \\\\
    tar zxf php-5.6.36.tar.gz && \\\\
    cd php-5.6.36 && \\\\
    ./configure --prefix=/usr/local/php \\\\
    make -j 4 && make install && \\\\
    cd / && rm -rf php*

至少能節省幾十M,甚至幾百M。

3. 減少網絡傳輸時間

最好在內部有一個存放軟件包的地方,類似于上述的PHP官方下載地址:http://docs.php.net/distributions/php-5.6.36.tar.gz ,如果用到maven構建這樣的操作,同時也更改為私有maven倉庫,減少網絡傳輸時間,提高鏡像構建速度。

4. 多階段進行鏡像構建

如果運行一個項目,根據咱們上面的做法,是直接把代碼拷貝到基礎鏡像里,如果是一個需要預先代碼編譯的項目呢?例如JAVA語言,如何代碼編譯、部署在一起完成呢!

上面做法需要事先在一個Dockerfile構建一個基礎鏡像,包括項目運行時環境及依賴庫,再寫一個Dockerfile將項目拷貝到運行環境中,有點略顯復雜了。

像JAVA這類語言如果代碼編譯是在Dockerfile里操作,還需要把源代碼構建進去,但實際運行時只需要構建出的包,這種把源代碼放進去有一定安全風險,并且也增加了鏡像體積。
為了解決上述問題,Docker 17.05開始支持多階段構建(multi-stage builds),可以簡化Dockerfile,減少鏡像大小。

例如,構建JAVA項目鏡像:

# git clone https://github.com/lizhenliang/tomcat-java-demo
# cd tomcat-java-demo
# vi Dockerfile
FROM maven AS build
ADD ./pom.xml pom.xml
ADD ./src src/
RUN mvn clean package

FROM lizhenliang/tomcat
RUN rm -rf /usr/local/tomcat/webapps/ROOT
COPY --from=build target/*.war /usr/local/tomcat/webapps/ROOT.war

# docker build -t demo:v1 .
# docker container run -d -v demo:v1

首先,第一個FROM 后邊多了個 AS 關鍵字,可以給這個階段起個名字。
然后,第二部分FROM用的我們上面構建的Tomcat鏡像,COPY關鍵字增加了—from參數,用于拷貝某個階段的文件到當前階段。這樣一個Dockerfile就都搞定了。

小結:鏡像小有很多好處,例如快速部署、快速回滾。減少服務中斷時間,同時鏡像倉庫占用磁盤空間也少了。

更多關于云服務器域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » 編寫 Dockerfile 最佳實踐

登錄

找回密碼

注冊

主站蜘蛛池模板: 国产精品久久无码一区| 潮喷失禁大喷水av无码| 亚洲国产精品综合久久2007| 久久道精品一区二区三区| 久久成人国产精品免费软件| 日韩少妇人妻vs中文字幕| 不卡一区二区国产精品| 日韩免费码中文在线观看| 国产一区二区av天堂热| 亚洲精品麻豆一二三区| 国产高清乱码又大又圆| 亚洲中文字幕综合小综合| 成人啪啪高潮不断观看| 国产成人高清亚洲一区二区| 男女xx00xx的视频免费观看| 综合人妻久久一区二区精品| 又爽又黄又无遮掩的免费视频| 日韩中文字幕有码av| 熟妇人妻一区二区三区四区| 国产亚洲天堂另类综合| b站永久免费看片大全| 熟妇人妻av无码一区二区三区| 92成人午夜福利一区二区| 进贤县| 亚洲色大成网站www在线| 国产福利社区一区二区| 亚洲av网一区天堂福利| 久久天天躁夜夜躁狠狠85| 伊人精品成人久久综合97| 少妇粗大进出白浆嘿嘿视频| 国产女同疯狂作爱系列| 一边吃奶一边做动态图| av无码精品一区二区三区| 国产一区二区三区不卡视频| 天堂网亚洲综合在线| 色欲av久久一区二区三区久| 无码av岛国片在线播放| 日本一区三区高清视频| 欧美无人区码suv| 国产三级a三级三级| 麻豆国产传媒精品视频|