最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

DOCKERFILE學習及使用注意事項

 更新時間:2017年02月23日 08:41:39   作者:styshoo  
Dockerfile 由一行行命令語句組成,并且支持以 # 開頭的注釋行。一般的,Dockerfile分為四部分:基礎鏡像信息、維護者信息、鏡像操作指令、容器啟動時執(zhí)行指令

準則

  1. 盡量將Dockerfile放在空目錄中,如果目錄中必須有其他文件,則使用.dockerignore文件。
  2. 避免安裝不必須的包。
  3. 每個容器應該只關注一個功能點。
  4. 最小化鏡像的層數。
  5. 多行參數時應該分類。這樣更清晰直白,便于閱讀和review,另外,在每個換行符\前都增加一個空格。
  6. 對構建緩存要有清楚的認識。

指令注意事項

FROM

    Dockerfile reference for the FROM instruction

  任何時候,盡量使用官方鏡像源作為你鏡像的基礎鏡像。我們建議使用Debian Image,因為其被很好地管理著,并且作為一個完整的發(fā)布包,但體積卻保持著最小化(當前不足150MB)。

  1. FROM必須是除了注釋以外的第一行;
  2. 可以有多個FROM語句,來創(chuàng)建多個image;

LABEL
  Dockerfile reference for the LABEL instruction

RUN
  Dockerfile reference for the RUN instruction

  RUN語句有兩種格式:

1. RUN (the command is run in a shell - /bin/sh -c - shell form)
2. RUN ["executable", "param1", "param2"] (exec form)

apt-get

  盡量避免使用RUN apt-get upgrade或者dist-upgrade,因為基礎鏡像的很多核心包不會再未授權的容器中升級。
  要結合RUN apt-get update和apt-get install在同一個RUN語句下一起使用。如:

  RUN apt-get update && apt-get install -y \
    package-bar \
    package-baz \
    package-foo

  如果將update和install分開使用,執(zhí)行多個Dockerfile時,會引起緩存問題,導致后面執(zhí)行的install語句會失敗。
  另外,執(zhí)行完apt-get語句后,最后最好加上刪除安裝包的語句,以減小鏡像的體積。如:

RUN apt-get update && apt-get install -y \
  aufs-tools \
  automake \
  build-essential \
 && rm -rf /var/lib/apt/lists/*

  注意:官方的Debian和Ubuntu鏡像會自動執(zhí)行“RUN apt-get clean”,所以不需要明確地刪除指令。

管道使用

  很多RUN命令都需要使用到管道,如:

RUN wget -O - https://some.site | wc -l > /number

  Docker使用/bin/sh -c解釋器來執(zhí)行這些命令,該解釋器只評估管道最后一個操作的返回值來判斷整個命令是否成功。在上面的例子中,只要wc -l命令成功了,即使wget命令失敗了,也會創(chuàng)建一個新鏡像。為了避免上述情況,可以在語句首部加上set -o pipefail &&。比如:

RUN set -o pipefail && wget -O - https://some.site | wc -l > /number

  注意:并非所有的shell都支持-o pipefail選項,比如說基于Debian的鏡像下的模式shell:dash shell。這種情況下,我們可以使用exec格式的RUN命令來顯示地選擇shell來支持pipefail選項。如:

RUN ["/bin/bash", "-c", "set -o pipefail && wget -O - https://some.site | wc -l > /number"]

CMD

  Dockerfile reference for the CMD instruction

  CMD語句與RUN不同,RUN是在build鏡像的時候運行,而CMD語句是在build結束后運行。一個Dockerfile鐘可以有多個RUN語句,雖然也可以有多個CMD語句,但是卻只有最后一條CMD語句會執(zhí)行。CMD語句格式為:

CMD [“executable”, “param1”, “param2”…]

EXPOSE

  Dockerfile reference for the EXPOSE instruction

  EXPOSE指令指明容器會監(jiān)聽鏈接的端口。因此,最好使用常用的、傳統(tǒng)的應用端口。比如,Apache web服務器使用EXPOSE 80等。
  為了給外部鏈接使用,你需要使用docker run命令來制定容器端口和host端口的映射。

ENV

  Dockerfile reference for the ENV instruction
  用于設置環(huán)境變量,設置后,后面的RUM指令就可以使用之前的環(huán)境變量了。同時,還可以通過docker run --env key=value,在容器啟動時設置環(huán)境變量。如:

ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

ADD和COPY

Dockerfile reference for the ADD instruction
Dockerfile reference for the COPY instruction

  雖然ADD和COPY功能相似,但一般來講,更建議使用COPY。因為COPY比ADD更透明,COPY只支持從本地文件到容器的拷貝,但是ADD還有一些其他不明顯的特性(比如本地tar包解壓縮和遠程URL支持)。因此,ADD的最優(yōu)用處是本地tar包自動解壓縮到鏡像中。如:ADD rootfs.tar.xz /。

  如果有多個Dockerfile步驟用于處理不同的文件,建議分開COPY它們,而不是一次性拷貝。這可以保證每個步驟的build緩存只在對應的文件改變時才無效。比如:

COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt
COPY . /tmp/

  鏡像的大小很重要,因此不鼓勵使用ADD從遠端URL獲取包;可以使用curl或者wget來代替。這種方式你可以刪除不再需要的文件,如解壓縮后的tar包,從而不需要再添加額外的layer到鏡像中。比如,你應該避免這樣使用:

ADD http://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all

  而應該如此:

RUN mkdir -p /usr/src/things \
  && curl -SL http://example.com/big.tar.xz \
  | tar -xJC /usr/src/things \
  && make -C /usr/src/things all

  對于不需要使用ADD命令tar包自動解壓縮功能的文件和目錄,你應該總是使用COPY。

ENTRYPOINT

Dockerfile reference for the ENTRYPOINT instruction

  使用ENTRYPOINT來設置鏡像的主命令,就像這個鏡像運行時就是這條命令一樣(然后再使用CMD作為默認的flag)。
  我們使用s3cmd命令作為鏡像的主命令。

ENTRYPOINT ["s3cmd"]
CMD ["--help"]

VOLUME

Dockerfile reference for the VOLUME instruction

  VOLUME指令一般用于數據庫的存儲區(qū)域,配置存儲,或者docker容器創(chuàng)建的文件和目錄。

USER

Dockerfile reference for the USER instruction
  如果服務可以在不需要特權的情況下運行,那么就應該使用USER來切換用戶至非root用戶。可以用RUN命令創(chuàng)建用戶組和用戶如:

RUN groupadd -r postgres && useradd -r -g postgres postgres

  應該避免安裝和使用sudo,因為它有不可預知的TTY和信號轉移特性,會產生很多問題。如果的確一定要使用類似sudo的功能(如root下初始化daemon,非root下運行),可以使用“gosu”。

WORKDIR

Dockerfile reference for the WORKDIR instruction

  為了Dockerfile內容更加清晰和可靠,最好總是使用絕對路徑。同樣地,應該使用WORKDIR,而不是使用類似“cd … && do-something”這樣的指令,因為那樣會導致難以閱讀、查找錯誤和維護。

ONBUILD

Dockerfile reference for the ONBUILD instruction

相關文章

  • 本地Docker部署Navidrome音樂服務器與遠程訪問聽歌詳細教程(圖文詳解)

    本地Docker部署Navidrome音樂服務器與遠程訪問聽歌詳細教程(圖文詳解)

    本文和大家分享一款目前在G站有11K+Star的開源跨平臺音樂服務器?Navidrome,如何在?Linux?環(huán)境本地使用?Docker?部署,并結合cpolar?內網穿透工具配置公網地址,實現隨時隨地遠程訪問本地存儲音樂的詳細流程,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • 深入理解docker的四種網絡方式

    深入理解docker的四種網絡方式

    本篇文章主要介紹了深入理解docker的四種網絡方式,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • docker network create命令的具體使用

    docker network create命令的具體使用

    docker network create命令用于創(chuàng)建一個新的網絡連接,本文就來詳細的介紹一下docker network create命令的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • Docker?容器跨主機通信?overlay的詳細步驟

    Docker?容器跨主機通信?overlay的詳細步驟

    Overlay網絡通過VXLAN技術創(chuàng)建虛擬網絡,實現不同主機上容器的邏輯連接,支持跨主機通信,具有擴展性、隔離性和靈活性,適用于大規(guī)模容器化部署
    2024-10-10
  • docker中如何啟動已存在容器

    docker中如何啟動已存在容器

    這篇文章主要介紹了docker中如何啟動已存在容器問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • docker如何運行一個python腳本

    docker如何運行一個python腳本

    這篇文章主要介紹了docker如何運行一個python腳本問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • docker集群Error response from daemon: rpc error問題

    docker集群Error response from daemon: rpc&

    文章描述了在Docker集群中遇到的錯誤信息,并提供了解決辦法,解決辦法包括配置安全組,將Docker Swarm的所有節(jié)點IP添加到安全組中
    2025-01-01
  • 詳解如何將docker快速升級到最新版本

    詳解如何將docker快速升級到最新版本

    最近在對區(qū)塊鏈瀏覽器調優(yōu),該區(qū)塊鏈瀏覽器就是使用docker部署的微服務,在一臺新的服務器上啟動時報錯,發(fā)現是docker版本過低,所以本文給大家介紹了將docker快速升級到最新版本的方法,需要的朋友可以參考下
    2024-02-02
  • 在Ubuntu上使用Grafana監(jiān)控Docker的方法

    在Ubuntu上使用Grafana監(jiān)控Docker的方法

    如今越來越多的公司開始使用Docker,一談起Docker總是會跟著讓人聯想到輕量這個詞,甚至會有一種通過Docker啟動一個服務會節(jié)省很多資源的錯覺。然而Docker的「輕」也只是相對于傳統(tǒng)虛擬機而已。Docker如何監(jiān)控呢?本文就給大家介紹在Ubuntu上如何使用Grafana監(jiān)控Docker。
    2016-12-12
  • Docker安裝和簡單使用入門教程

    Docker安裝和簡單使用入門教程

    這篇文章主要介紹了Docker安裝和簡單使用入門教程,由于小編使用的是linux系統(tǒng),支持docker的,所以安裝相對比較簡單,需要的的朋友參考下吧
    2017-01-01

最新評論

阜新市| 杭锦后旗| 会理县| 大连市| 东兰县| 双江| 高邮市| 永丰县| 佛冈县| 武汉市| 石首市| 大同县| 邯郸市| 罗江县| 松原市| 河北省| 八宿县| 双桥区| 大田县| 泽州县| 合阳县| 双峰县| 黑山县| 花垣县| 锡林郭勒盟| 波密县| 东兰县| 英吉沙县| 广南县| 昌邑市| 军事| 开平市| 历史| 霍邱县| 石河子市| 始兴县| 贞丰县| 河北省| 深州市| 海南省| 家居|