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

Dockerfile中的保留字指令的過程解析

 更新時(shí)間:2021年11月03日 10:36:04   作者:寧在春  
Dockerfile是用來構(gòu)建Docker鏡像的構(gòu)建文件,由一系列命令和參數(shù)構(gòu)成的腳本,本文重點(diǎn)給大家介紹Dockerfile中的保留字指令的過程解析,感興趣的朋友跟隨小編一起看看吧

之前簡單學(xué)過Docker,當(dāng)時(shí)是為了快速部署一個(gè)項(xiàng)目,過的很快,對(duì)于Dockerfile文件的編寫,有些顯的陌生。

所以就寫了這篇文章。希望能夠幫助到大家哦?。。?/p>

一、Dockerfile是什么?

概念:

Dockerfile是用來構(gòu)建Docker鏡像的構(gòu)建文件,由一系列命令和參數(shù)構(gòu)成的腳本

構(gòu)建三步驟:

  • 編寫Dockerfile文件
  • docker build
  • docker run

Centos案例:

centos案例

FROM scratch  #真正的基礎(chǔ)鏡像,
ADD centos-7-x86_64-docker.tar.xz /

# label 說明的意思
LABEL \  
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

CMD ["/bin/bash"] #最后一行執(zhí)行的命令

在哪找到的勒,在hub.docker.com上找到滴:centos。

我們不會(huì),但是可以先去看看人家怎么寫的,抄作業(yè)這事,我想大家都熟悉吧。俗稱CV大法😂。

二、Dockerfile構(gòu)建過程分析

入門知識(shí):

每條保留字指令(今天的重點(diǎn))都必須為大寫字母并且后面要跟隨至少一個(gè)參數(shù)。

如:

FROM scratch  #真正的基礎(chǔ)鏡像,
ADD centos-7-x86_64-docker.tar.xz /

指令按照從上到下,順序執(zhí)行

#表示注釋。

#這就是注釋

每條指令都會(huì)創(chuàng)建一個(gè)新的鏡像層,并對(duì)鏡像進(jìn)行提交。

就如下面這樣,可以套娃一樣。

Dockerfile執(zhí)行流程分析:docker從基礎(chǔ)鏡像運(yùn)行一個(gè)容器

  • 執(zhí)行一條指令并對(duì)容器作出修改
  • 執(zhí)行類似docker commit的操作提交一個(gè)新的鏡像層。
  • docker再基于剛提交的鏡像運(yùn)行一個(gè)新容器
  • 執(zhí)行dockerfile中的下一條指令直到所有指令都執(zhí)行完成

后文有案例,結(jié)合案例回過來看更容易理解。

小小番外:

  • 在現(xiàn)階段,我們將Dockerfile、Docker鏡像和Docker容器看待為軟件的三個(gè)不同階段。
  • Dockerfile面向開發(fā)--->Docker鏡像成為交付標(biāo)準(zhǔn)--->Docker容器則涉及部署與運(yùn)維
  • Dockerfile中定義了進(jìn)程所需要的一切東西,以前需要依賴的環(huán)境變量、依賴包、運(yùn)行時(shí)環(huán)境等都被寫入到Dockerfile文件中啦。比起之前你在Liunx服務(wù)器中,下載那么那么多軟件,配置那么那么多,真的是簡單蠻多,起碼對(duì)于我這個(gè)菜雞來說用Docker部署真的簡單了蠻多的。
  • Docker鏡像是在用Dockerfile定義了一個(gè)文件后,docker build 時(shí)產(chǎn)生的一個(gè)Docker鏡像,當(dāng)運(yùn)行時(shí)Docker鏡像時(shí),才會(huì)真正開始提供服務(wù)。

Docker容器就是運(yùn)行起來即可提供服務(wù)的。

三、Dockerfile保留字指令

Dockerfiel保留字指令大致有以下:

  1. FROM
  2. MAINTANINER
  3. RUN
  4. EXPOSE
  5. WORKDIR
  6. ENV
  7. ADD
  8. COPY
  9. VOLUME
  10. CMD
  11. ENTRYPOINT
  12. ONBUILD

3.1、FROM

基礎(chǔ)鏡像,即當(dāng)前新鏡像是基于哪個(gè)鏡像創(chuàng)建的。

#基于openjdk:8 創(chuàng)建鏡像
FROM openjdk:8

3.2、MAINTAINER

鏡像維護(hù)者的姓名和郵箱地址

MAINTAINER 寧在春crush@163.com

3.3、RUN

容器構(gòu)建時(shí)需要運(yùn)行的指令

RUN mkdir -p /conf/my.cn

3.4、EXPOSE

當(dāng)前容器對(duì)外暴露的端口

#暴露出MyCat的所需端口
EXPOSE 8066 9066

3.5、WORKDIR

指定在創(chuàng)建容器后,終端默認(rèn)登錄的進(jìn)來工作目錄

#容器數(shù)據(jù)卷,用于數(shù)據(jù)保存和持久化工作
WORKDIR /usr/local/mycat

3.6、ENV

用來在構(gòu)建鏡像過程中設(shè)置環(huán)境變量

#用來在構(gòu)建鏡像過程中設(shè)置環(huán)境變量ENV MYCAT_HOME=/usr/local/mycat

這個(gè)環(huán)境變量可以在后續(xù)的任何RUN指令中使用,這就如同在命令前面指定了環(huán)境變量前綴一樣;也可以在其它指令中直接使用這些環(huán)境變量。

如:

RUN $MYCAT_HOME/mycat

3.7、ADD 和 COPY

ADD:

將宿主機(jī)目錄下的文件拷貝進(jìn)鏡像,并且ADD命令會(huì)自動(dòng)處理URL和解壓tar壓縮包

ADD centos-6-docker.tar.xz / 

COPY:

類似ADD,拷貝文件和目錄到鏡像中。

將從構(gòu)建上下文目錄中<源路徑>的文件/目錄復(fù)制到新的一層的鏡像內(nèi)的<目標(biāo)路徑>位置

COPY src destCOPY ["src" "dest"]

3.8、VOLUME

容器數(shù)據(jù)卷,用于數(shù)據(jù)持久化和數(shù)據(jù)保存。

#將mycat的配置文件的地址暴露出映射地址,啟動(dòng)時(shí)直接映射宿主機(jī)的文件夾VOLUME /usr/local/mycat

3.9、CMD 和 ENTRYPOINT

CMD

CMD的指令和RUN相似,也是兩種格式:

  • shell格式:CMD<命令>
  • exec 格式:CMD ["可執(zhí)行文件“,”參數(shù)1“,”參數(shù)2“.....]

Dockerfile中可以有多個(gè)CMD指令,但只有最后一個(gè)生效,CMD會(huì)被docker run 之后的參數(shù)替換。

ENTRYPOINT

指定一個(gè)容器啟動(dòng)時(shí)要運(yùn)行的命令。

ENTRYPOINT的目的和CMD一樣,都是在指定容器啟動(dòng)程序及參數(shù)。

區(qū)別:

在這里先簡單說明一下區(qū)別,你可以將CMD理解為覆蓋

CMD cat /conf/my.cnfCMD /bin/bash

這兩條指令都寫在Dockerfile文件中,只會(huì)執(zhí)行CMD /bin/bash ,而不會(huì)執(zhí)行CMD cat /conf/my.cnf,因?yàn)?code>CMD /bin/bash把上一條直接覆蓋掉了。

ENTRYPOINT則不同,你可以將ENTRYPOINT簡單理解為追加。

主要體現(xiàn)在docker run 上,如果使用dockerfile文件中最后是CMD結(jié)尾,則在運(yùn)行時(shí)不能夠額外追加命令,否則會(huì)覆蓋掉Dockerfile中的CMD命令。

Dockerfile文件中最后一行為ENTRYPOINT結(jié)尾時(shí),你可以在docker run 命令后追加一些命令.

3.10、ONBUILD

當(dāng)構(gòu)建一個(gè)被繼承的Dockerfile時(shí)運(yùn)行命令,父鏡像在被子繼承后,父鏡像的onbuild被觸發(fā)。

四、實(shí)戰(zhàn)案例

4.1、制作一個(gè)自己的Centos鏡像

4.1.1、引入:

我們先從阿里云上拉取一個(gè)centos看看,看看有哪些問題,然后我們?cè)龠M(jìn)行自定義。

docker pull centos # 拉取鏡像docker run -it centos #運(yùn)行鏡像# ===== 測試====vim ceshi.txtifconfig pwd

為什么會(huì)這樣?因?yàn)閐ocker倉庫中的Centos是精簡版,其只有內(nèi)核,沒有其它的東西。

要求自定義的Centos能夠解決上述問題。

4.1.2、編寫Dockerfile文件

為我們自定義的Centos 編寫Dockerfile文件

FROM centosMAINTAINER 寧在春<crush@163.com>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80 CMD echo $MYPATHCMD echo "success"CMD /bin/bash  #只會(huì)運(yùn)行最后一個(gè)

然后把這個(gè)復(fù)制進(jìn)去即可。

mkdir -p /usr/local/docker/mycentos # 自己創(chuàng)建存放的位置vim Dockerfile

4.1.3、構(gòu)建centos鏡像

docker build -f /usr/local/docker/mycentos/Dockerfile  -t mycentos:1.1 .

解釋:

  • -f:后面跟隨的是Dockerfile 文件
  • -t :后面跟隨的鏡像名和版本號(hào)。
  • 最后的小數(shù)點(diǎn):就表明是當(dāng)前目錄。
  • docker build -f Dockerfile文件 -t 鏡像名:tag .
  • 當(dāng)dockerfile文件命名為dockerfile時(shí)并且在當(dāng)前目錄下時(shí)可簡寫為:
  • docker build -t 鏡像名:tag .docker build -t mycentos:1.1 .

執(zhí)行:

看到最后的這個(gè)就是代表成功了。

docker images 查看全部鏡像:

4.1.4、運(yùn)行Centos鏡像

docker run -it mycentos:1.3pwdifconfig

之所以我們進(jìn)去容器的目錄會(huì)從/切換到/usr/local是因?yàn)樵赿ockerfile文件中已經(jīng)寫明。

ENV MYPATH /usr/localWORKDIR $MYPATH

4.1.5、查看鏡像的變更歷史

docker history mycentos:1.1

在這里也可以看出來,鏡像它是由Dockerfile文件中的指令,一層一層構(gòu)建出來的。

4.2、ONBUILD示例

率先構(gòu)建一個(gè)夫鏡像

編寫dockerfile文件,命名為dockerfile2

FROM centosRUN yum -y install  curlONBUILD RUN echo "我被子鏡像繼承了,輸出此條語句"CMD ["crul", "-s","http://ip.cn"]
docker build -f /usr/local/docker/mycentos/Dockerfile2 -t my_father_centos .

構(gòu)建一個(gè)鏡像繼承夫鏡像

編寫dockerfile文件,命名為dockerfile3

FROM my_father_centosRUN yum -y install  curlCMD ["crul", "-s","http://ip.cn"]
docker build -f /usr/local/docker/mycentos/Dockerfile3 -t my_son_centos .

可以看到父鏡像中的語句被輸出了。

到此這篇關(guān)于Dockerfile中的保留字指令講解的文章就介紹到這了,更多相關(guān)Dockerfile保留字指令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker容器中crontab無法正常運(yùn)行解決方案

    docker容器中crontab無法正常運(yùn)行解決方案

    相信很多人看完docker容器, 需要加crontab, 加完卻發(fā)現(xiàn)不能執(zhí)行,什么原因造成的呢?下面小編給大家分享docker容器中crontab無法正常運(yùn)行的解決方案,需要的朋友參考下吧
    2017-01-01
  • Docker容器內(nèi)部無法訪問外網(wǎng)原因以及解決辦法

    Docker容器內(nèi)部無法訪問外網(wǎng)原因以及解決辦法

    最近在工作時(shí)遇到一個(gè)問題,這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于Docker容器內(nèi)部無法訪問外網(wǎng)原因以及解決辦法,文中給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Docker安裝Nacos容器并根據(jù)Nginx實(shí)現(xiàn)負(fù)載均衡

    Docker安裝Nacos容器并根據(jù)Nginx實(shí)現(xiàn)負(fù)載均衡

    本文主要介紹了Docker安裝Nacos容器并根據(jù)Nginx實(shí)現(xiàn)負(fù)載均衡,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • Docker中運(yùn)行nginx并掛載本地目錄到鏡像中的方法

    Docker中運(yùn)行nginx并掛載本地目錄到鏡像中的方法

    這篇文章主要介紹了Docker中運(yùn)行nginx并掛載本地目錄到鏡像中的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Docker 命令教程(附中文解釋)

    Docker 命令教程(附中文解釋)

    這篇文章主要介紹了Docker 命令教程的相關(guān)資料,在學(xué)習(xí)Docker的過程中,特地把所以命令實(shí)驗(yàn)了一番并整理,希望大家盡快掌握此部分的知識(shí),有需要的小伙伴可以參考下
    2016-10-10
  • Docker Compose快速部署多容器服務(wù)實(shí)戰(zhàn)的實(shí)例詳解

    Docker Compose快速部署多容器服務(wù)實(shí)戰(zhàn)的實(shí)例詳解

    使用 Docker Compose 可以輕松、高效的管理容器,它是一個(gè)用于定義和運(yùn)行多容器 Docker 的應(yīng)用程序工具,本文給大家介紹Docker Compose快速部署多容器服務(wù)實(shí)戰(zhàn),感興趣的朋友一起看看吧
    2022-02-02
  • Docker鏡像分析工具dive原理解析

    Docker鏡像分析工具dive原理解析

    這篇文章主要介紹了Docker鏡像分析工具dive原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值
    2020-11-11
  • 詳解如何修改docker pull鏡像源

    詳解如何修改docker pull鏡像源

    Docker Hub Mirror 為全球最大的Docker Registry(Docker Hub)提供在中國的鏡像代理服務(wù)。Docker Hub Mirror會(huì)為中國的用戶在國內(nèi)的服務(wù)器上緩存諸多鏡像。
    2017-03-03
  • docker start啟動(dòng)容器后仍然exit狀態(tài)的解決

    docker start啟動(dòng)容器后仍然exit狀態(tài)的解決

    這篇文章主要介紹了docker start啟動(dòng)容器后仍然exit狀態(tài)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 使用Docker Compose 實(shí)現(xiàn)nginx負(fù)載均衡的方法步驟

    使用Docker Compose 實(shí)現(xiàn)nginx負(fù)載均衡的方法步驟

    這篇文章主要介紹了使用Docker Compose 實(shí)現(xiàn)nginx負(fù)載均衡的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05

最新評(píng)論