亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

DOCKERFILE學(xué)習(xí)及使用注意事項(xiàng)

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

準(zhǔn)則

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

指令注意事項(xiàng)

FROM

    Dockerfile reference for the FROM instruction

  任何時(shí)候,盡量使用官方鏡像源作為你鏡像的基礎(chǔ)鏡像。我們建議使用Debian Image,因?yàn)槠浔缓芎玫毓芾碇?,并且作為一個(gè)完整的發(fā)布包,但體積卻保持著最小化(當(dāng)前不足150MB)。

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

LABEL
  Dockerfile reference for the LABEL instruction

RUN
  Dockerfile reference for the RUN instruction

  RUN語(yǔ)句有兩種格式:

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,因?yàn)榛A(chǔ)鏡像的很多核心包不會(huì)再未授權(quán)的容器中升級(jí)。
  要結(jié)合RUN apt-get update和apt-get install在同一個(gè)RUN語(yǔ)句下一起使用。如:

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

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

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

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

管道使用

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

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

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

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

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

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

CMD

  Dockerfile reference for the CMD instruction

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

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

EXPOSE

  Dockerfile reference for the EXPOSE instruction

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

ENV

  Dockerfile reference for the ENV instruction
  用于設(shè)置環(huán)境變量,設(shè)置后,后面的RUM指令就可以使用之前的環(huán)境變量了。同時(shí),還可以通過docker run --env key=value,在容器啟動(dòng)時(shí)設(shè)置環(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。因?yàn)镃OPY比ADD更透明,COPY只支持從本地文件到容器的拷貝,但是ADD還有一些其他不明顯的特性(比如本地tar包解壓縮和遠(yuǎn)程URL支持)。因此,ADD的最優(yōu)用處是本地tar包自動(dòng)解壓縮到鏡像中。如:ADD rootfs.tar.xz /。

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

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

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

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

  而應(yīng)該如此:

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

  對(duì)于不需要使用ADD命令tar包自動(dòng)解壓縮功能的文件和目錄,你應(yīng)該總是使用COPY。

ENTRYPOINT

Dockerfile reference for the ENTRYPOINT instruction

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

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

VOLUME

Dockerfile reference for the VOLUME instruction

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

USER

Dockerfile reference for the USER instruction
  如果服務(wù)可以在不需要特權(quán)的情況下運(yùn)行,那么就應(yīng)該使用USER來切換用戶至非root用戶??梢杂肦UN命令創(chuàng)建用戶組和用戶如:

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

  應(yīng)該避免安裝和使用sudo,因?yàn)樗胁豢深A(yù)知的TTY和信號(hào)轉(zhuǎn)移特性,會(huì)產(chǎn)生很多問題。如果的確一定要使用類似sudo的功能(如root下初始化daemon,非root下運(yùn)行),可以使用“gosu”。

WORKDIR

Dockerfile reference for the WORKDIR instruction

  為了Dockerfile內(nèi)容更加清晰和可靠,最好總是使用絕對(duì)路徑。同樣地,應(yīng)該使用WORKDIR,而不是使用類似“cd … && do-something”這樣的指令,因?yàn)槟菢訒?huì)導(dǎo)致難以閱讀、查找錯(cuò)誤和維護(hù)。

ONBUILD

Dockerfile reference for the ONBUILD instruction

相關(guān)文章

  • 解決Jenkins集成docker插件問題的一些方法

    解決Jenkins集成docker插件問題的一些方法

    本文主要介紹了Jenkins集成docker插件問題的一些方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Docker實(shí)踐之python應(yīng)用容器化

    Docker實(shí)踐之python應(yīng)用容器化

    這篇文章主要介紹了Docker實(shí)踐之python應(yīng)用容器化,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • docker-compose安裝及執(zhí)行命令

    docker-compose安裝及執(zhí)行命令

    Docker Compose是一個(gè)用來定義和運(yùn)行復(fù)雜應(yīng)用的Docker工具,這篇文章主要介紹了docker-compose安裝方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • Docker數(shù)據(jù)卷掛載命令volume(-v)與mount的使用總結(jié)

    Docker數(shù)據(jù)卷掛載命令volume(-v)與mount的使用總結(jié)

    本文主要介紹了Docker數(shù)據(jù)卷掛載命令volume(-v)與mount的使用總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • docker如何部署etcd集群

    docker如何部署etcd集群

    這篇文章主要介紹了docker如何部署etcd集群?jiǎn)栴},具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 解決docker中mysql時(shí)間與系統(tǒng)時(shí)間不一致問題

    解決docker中mysql時(shí)間與系統(tǒng)時(shí)間不一致問題

    最近在Docker中裝mysql時(shí),發(fā)現(xiàn)數(shù)據(jù)庫(kù)時(shí)間與系統(tǒng)時(shí)間相差8個(gè)小時(shí)。查詢資料發(fā)現(xiàn),docker的默認(rèn)時(shí)區(qū)是0區(qū),其實(shí)這會(huì)對(duì)安裝的容器造成不少麻煩,比如執(zhí)行日志的記錄不準(zhǔn)確等
    2021-12-12
  • docker鏡像導(dǎo)入導(dǎo)出的兩種方法

    docker鏡像導(dǎo)入導(dǎo)出的兩種方法

    本文主要介紹了docker鏡像導(dǎo)入導(dǎo)出的兩種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • docker搭建redis哨兵集群并且整合springboot的實(shí)現(xiàn)

    docker搭建redis哨兵集群并且整合springboot的實(shí)現(xiàn)

    本文主要介紹了docker搭建redis哨兵集群并且整合springboot的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • docker運(yùn)行nginx不生效的解決辦法

    docker運(yùn)行nginx不生效的解決辦法

    當(dāng)docker運(yùn)行nginx鏡像時(shí),設(shè)置端口映射,則只有該映射端口起作用,nginx配置的其他端口無效,接下來本文將給大家介紹docker運(yùn)行nginx不生效的解決辦法,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-01-01
  • 使用Dockerfile部署nodejs服務(wù)的方法步驟

    使用Dockerfile部署nodejs服務(wù)的方法步驟

    這篇文章主要介紹了使用Dockerfile部署nodejs服務(wù)的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01

最新評(píng)論