一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - 服務器知識 - Dockerfile中的保留字指令的過程解析

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

2021-11-24 16:40寧在春 服務器知識

Dockerfile是用來構建Docker鏡像的構建文件,由一系列命令和參數構成的腳本,本文重點給大家介紹Dockerfile中的保留字指令的過程解析,感興趣的朋友跟隨小編一起看看吧

之前簡單學過Docker,當時是為了快速部署一個項目,過的很快,對于Dockerfile文件的編寫,有些顯的陌生。

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

一、Dockerfile是什么?

概念:

Dockerfile是用來構建Docker鏡像的構建文件,由一系列命令和參數構成的腳本

構建三步驟:

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

Centos案例:

centos案例:

FROM scratch  #真正的基礎鏡像,
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"] #最后一行執行的命令

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

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

 

二、Dockerfile構建過程分析

入門知識:

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

如:

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

指令按照從上到下,順序執行

#表示注釋。

#這就是注釋

每條指令都會創建一個新的鏡像層,并對鏡像進行提交。

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

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

Dockerfile執行流程分析:docker從基礎鏡像運行一個容器執行一條指令并對容器作出修改執行類似docker commit的操作提交一個新的鏡像層。docker再基于剛提交的鏡像運行一個新容器執行dockerfile中的下一條指令直到所有指令都執行完成

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

小小番外:

在現階段,我們將DockerfileDocker鏡像和Docker容器看待為軟件的三個不同階段。

Dockerfile面向開發--->Docker鏡像成為交付標準--->Docker容器則涉及部署與運維

Dockerfile中定義了進程所需要的一切東西,以前需要依賴的環境變量、依賴包、運行時環境等都被寫入到Dockerfile文件中啦。比起之前你在Liunx服務器中,下載那么那么多軟件,配置那么那么多,真的是簡單蠻多,起碼對于我這個菜雞來說用Docker部署真的簡單了蠻多的。

Docker鏡像是在用Dockerfile定義了一個文件后,docker build 時產生的一個Docker鏡像,當運行時Docker鏡像時,才會真正開始提供服務。

Docker容器就是運行起來即可提供服務的。

 

三、Dockerfile保留字指令

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

FROMMAINTANINERRUNEXPOSEWORKDIRENVADDCOPYVOLUMECMDENTRYPOINTONBUILD

 

3.1、FROM

基礎鏡像,即當前新鏡像是基于哪個鏡像創建的。

#基于openjdk:8 創建鏡像
FROM openjdk:8

 

3.2、MAINTAINER

鏡像維護者的姓名和郵箱地址

MAINTAINER 寧在春[email protected]

 

3.3、RUN

容器構建時需要運行的指令

RUN mkdir -p /conf/my.cn

 

3.4、EXPOSE

當前容器對外暴露的端口

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

 

3.5、WORKDIR

指定在創建容器后,終端默認登錄的進來工作目錄

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

 

3.6、ENV

用來在構建鏡像過程中設置環境變量

#用來在構建鏡像過程中設置環境變量ENV MYCAT_HOME=/usr/local/mycat

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

如:

RUN $MYCAT_HOME/mycat

 

3.7、ADD 和 COPY

ADD:

將宿主機目錄下的文件拷貝進鏡像,并且ADD命令會自動處理URL和解壓tar壓縮包

ADD centos-6-docker.tar.xz / 

COPY:

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

將從構建上下文目錄中<源路徑>的文件/目錄復制到新的一層的鏡像內的<目標路徑>位置

COPY src destCOPY ["src" "dest"]

 

3.8、VOLUME

容器數據卷,用于數據持久化和數據保存。

#將mycat的配置文件的地址暴露出映射地址,啟動時直接映射宿主機的文件夾VOLUME /usr/local/mycat

 

3.9、CMD 和 ENTRYPOINT

CMD

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

shell格式:CMD<命令>exec 格式:CMD ["可執行文件“,”參數1“,”參數2“.....]

Dockerfile中可以有多個CMD指令,但只有最后一個生效,CMD會被docker run 之后的參數替換。

ENTRYPOINT

指定一個容器啟動時要運行的命令。

ENTRYPOINT的目的和CMD一樣,都是在指定容器啟動程序及參數。

區別:

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

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

這兩條指令都寫在Dockerfile文件中,只會執行CMD /bin/bash ,而不會執行CMD cat /conf/my.cnf,因為CMD /bin/bash把上一條直接覆蓋掉了。

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

主要體現在docker run 上,如果使用dockerfile文件中最后是CMD結尾,則在運行時不能夠額外追加命令,否則會覆蓋掉Dockerfile中的CMD命令。

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

 

3.10、ONBUILD

當構建一個被繼承的Dockerfile時運行命令,父鏡像在被子繼承后,父鏡像的onbuild被觸發。

 

四、實戰案例

 

4.1、制作一個自己的Centos鏡像

 

4.1.1、引入:

我們先從阿里云上拉取一個centos看看,看看有哪些問題,然后我們再進行自定義。

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

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

為什么會這樣?因為docker倉庫中的Centos是精簡版,其只有內核,沒有其它的東西。

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

 

4.1.2、編寫Dockerfile文件

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

FROM centosMAINTAINER 寧在春ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80 CMD echo $MYPATHCMD echo "success"CMD /bin/bash  #只會運行最后一個

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

然后把這個復制進去即可。

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

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

 

4.1.3、構建centos鏡像

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

解釋:

-f:后面跟隨的是Dockerfile 文件

-t :后面跟隨的鏡像名和版本號。

最后的小數點:就表明是當前目錄。

docker build -f Dockerfile文件 -t 鏡像名:tag .

當dockerfile文件命名為dockerfile時并且在當前目錄下時可簡寫為:

docker build  -t 鏡像名:tag .docker build   -t mycentos:1.1 .

執行:

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

看到最后的這個就是代表成功了。

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

docker images 查看全部鏡像:

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

 

4.1.4、運行Centos鏡像

docker run -it mycentos:1.3pwdifconfig

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

之所以我們進去容器的目錄會從/切換到/usr/local是因為在dockerfile文件中已經寫明。

ENV MYPATH /usr/localWORKDIR $MYPATH

 

4.1.5、查看鏡像的變更歷史

docker history mycentos:1.1

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

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

 

4.2、ONBUILD示例

率先構建一個夫鏡像

編寫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 .

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

構建一個鏡像繼承夫鏡像

編寫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 .

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

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

到此這篇關于Dockerfile中的保留字指令講解的文章就介紹到這了,更多相關Dockerfile保留字指令內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/wxhn/p/15497159.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99精品久久久久久 | 久青草国产在线观看视频 | 96日本xxxxxxxxx70| 婷婷99视频精品全部在线观看 | 欧美性理论片在线观看片免费 | 国产一区日韩二区欧美三区 | 手机看片福利盒子久久 | 韩国三级大全 | 小寡妇好紧进去了好大看视频 | 日韩欧美国产一区 | 91久久精品国产一区二区 | 男男互操文 | 99精品在线视频观看 | 午夜想想爱午夜剧场 | 国产一区在线 | 成人免费视频一区二区三区 | 国产成人免费视频 | 成全动漫视频在线观看 | 成人国产一区 | 欧美人禽杂交狂配无删完整 | 欧美香蕉 | 免费观看视频网站 | 美女奶口隐私免费视频网站 | 欧美日韩国产在线人成dvd | 美女乳液 | 亚洲天天综合网 | 四虎永久网址影院 | 人体欣赏孕妇季玥图片 | 欧美艳星kagney1ynn | 白白国产永久免费视频 | 日本免费一二区 | 亚洲色图影院 | 国产精品久久久久久久免费大片 | 亚洲一区二区三区免费视频 | 日本68xxxxxxxxx24| 天天干天天色综合网 | beeg xxxx日本 | 欧美聚众性派对hdsex | 午夜想想爱 | 国产专区日韩精品欧美色 | 性xxxx直播放免费 |