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

Docker之DockerFile文件的使用及說明

 更新時(shí)間:2025年12月27日 14:34:35   作者:棉花糖老丫  
本文介紹了Dockerfile的定義、構(gòu)建過程以及Dockerfile的常見指令和體系結(jié)構(gòu),通過案例展示了如何創(chuàng)建自定義鏡像并運(yùn)行容器

一、DockerFile是什么

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

構(gòu)建三步驟:編寫Dockerfile文件—docker build—docker run

Dockerfile文件什么樣?

以我們熟悉的CentOS為例:https://hub.docker.com/_/centos/

二、DockerFile構(gòu)建過程解析

2.1 Dockerfile內(nèi)容基礎(chǔ)知識

1:每條保留字指令都必須為大寫字母且后面要跟隨至少一個(gè)參數(shù)

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

3:#表示注釋

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

2.2 Docker執(zhí)行Dockerfile的大致流程

(1)docker從基礎(chǔ)鏡像運(yùn)行一個(gè)容器

(2)執(zhí)行一條指令并對容器作出修改

(3)執(zhí)行類似docker commit的操作提交一個(gè)新的鏡像層

(4)docker再基于剛提交的鏡像運(yùn)行一個(gè)新容器

(5)執(zhí)行dockerfile中的下一條指令直到所有指令都執(zhí)行完成

2.3 小總結(jié)

從應(yīng)用軟件的角度來看,Dockerfile、Docker鏡像與Docker容器分別代表軟件的三個(gè)不同階段:Dockerfile是軟件的原材料、Docker鏡像是軟件的交付品、Docker容器則可以認(rèn)為是軟件的運(yùn)行態(tài)。

Dockerfile面向開發(fā),Docker鏡像成為交付標(biāo)準(zhǔn),Docker容器則涉及部署與運(yùn)維,三者缺一不可,合力充當(dāng)Docker體系的基石。

1、Dockerfile,需要定義一個(gè)Dockerfile,Dockerfile定義了進(jìn)程需要的一切東西。Dockerfile涉及的內(nèi)容包括執(zhí)行代碼或者是文件、環(huán)境變量、依賴包、運(yùn)行時(shí)環(huán)境、動態(tài)鏈接庫、操作系統(tǒng)的發(fā)行版、服務(wù)進(jìn)程和內(nèi)核進(jìn)程(當(dāng)應(yīng)用進(jìn)程需要和系統(tǒng)服務(wù)和內(nèi)核進(jìn)程打交道,這時(shí)需要考慮如何設(shè)計(jì)namespace的權(quán)限控制)等;

2、Docker鏡像,在用Dockerfile定義一個(gè)文件之后,docker build時(shí)會產(chǎn)生一個(gè)Docker鏡像,當(dāng)運(yùn)行Docker鏡像時(shí),會真正開始提供服務(wù);

3、Docker容器,容器是直接提供服務(wù)的。

三、DockerFile體系結(jié)構(gòu)

3.1保留字指令

  • FROM:基礎(chǔ)鏡像,當(dāng)前新鏡像是基于哪個(gè)鏡像的
  • MAINTAINER:鏡像維護(hù)者的姓名和郵箱地址
  • RUN:容器構(gòu)建時(shí)需要運(yùn)行的命令
  • EXPOSE:當(dāng)前容器對外暴露出的端口
  • WORKDIR:指定在創(chuàng)建容器后,終端默認(rèn)登陸的進(jìn)來工作目錄,一個(gè)落腳點(diǎn)
  • ENV:用來在構(gòu)建鏡像過程中設(shè)置環(huán)境變量

ENV MY_PATH/usr/mytest

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

  • ADD:將宿主機(jī)目錄下的文件拷貝進(jìn)鏡像且ADD命令會自動處理URL和解壓tar壓縮包
  • COPY:類似ADD,拷貝文件和目錄到鏡像中。將從構(gòu)建上下文目錄中<源路徑>的文件/目錄復(fù)制到新的一層的鏡像內(nèi)的<目標(biāo)路徑>位置
COPY src dest
COPY ["src", "dest"]
  • VOLUME:容器數(shù)據(jù)卷,用于數(shù)據(jù)保存和持久化工作
  • CMD:指定一個(gè)容器啟動時(shí)要運(yùn)行的命令

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

  • ENTRYPOINT:指定一個(gè)容器啟動時(shí)要運(yùn)行的命令
  • ENTRYPOINT的目的和CMD一樣,都是在指定容器啟動程序及參數(shù)
  • ONBUILD:當(dāng)構(gòu)建一個(gè)被繼承的Dockerfile時(shí)運(yùn)行命令,父鏡像在被子繼承后父鏡像的onbuild被觸發(fā)。

3.2 小結(jié)

四、案例

4.1Base鏡像(scratch)

Docker Hub中99%的鏡像都是通過在base鏡像中安裝和配置需要的軟件構(gòu)建出來的。

4.2 自定義鏡像mycentos

1)編寫

Hub默認(rèn)CentOS鏡像什么情況

自定義mycentos目的使我們自己的鏡像具備如下:

登陸后的默認(rèn)路徑、vim編輯器、查看網(wǎng)絡(luò)配置ifconfig支持

準(zhǔn)備編寫DockerFile文件

myCentOS內(nèi)容DockerFile

FROM centos
MAINTAINER zzyy<zzyy167@126.com>
?
ENV MYPATH /usr/local
WORKDIR $MYPATH
?
RUN yum -y install vim
RUN yum -y install net-tools
?
EXPOSE 80
?
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

2)構(gòu)建

docker build -t 新鏡像名字:TAG .

會看到docker build命令最后有一個(gè). .表示當(dāng)前目錄

3)運(yùn)行

docker run -it 新鏡像名字:TAG

我們自己的新鏡像已經(jīng)支持vim/ifconfig命令,擴(kuò)展成功了。

4)列出鏡像的變更歷史

docker history 鏡像名

4.3 CMD/ENTRYPOINT鏡像案例

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

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

tomcat的講解演示:

docker run -it -p 8888:8080 tomcat ls -l

ENTRYPOINT:docker run之后的參數(shù)會被當(dāng)做參數(shù)傳遞給ENTRYPOINT,之后形成新的命令組合。

制作CMD版可以查詢IP信息的容器

FROM centos
RUN yum install -y curl
CMD [ "curl", "-s", "http://ip.cn" ]

制作ENTROYPOINT版查詢IP信息的容器

FROM centos
RUN yum install -y curl
ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]

4.4 自定義鏡像Tomcat9

1)mkdir -p /zzyyuse/mydockerfile/tomcat9

2)在上述目錄下touch c.txt

3)將jdk和tomcat安裝的壓縮包拷貝進(jìn)上一步目錄

apache-tomcat-9.0.8.tar.gzjdk-8u171-linux-x64.tar.gz

4)在/zzyyuse/mydockerfile/tomcat9目錄下新建Dockerfile文件

FROM         centos
MAINTAINER    zzyy<zzyybs@126.com>
#把宿主機(jī)當(dāng)前上下文的c.txt拷貝到容器/usr/local/路徑下
COPY c.txt /usr/local/cincontainer.txt
#把java與tomcat添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.8.tar.gz /usr/local/
#安裝vim編輯器
RUN yum -y install vim
#設(shè)置工作訪問時(shí)候的WORKDIR路徑,登錄落腳點(diǎn)
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java與tomcat環(huán)境變量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器運(yùn)行時(shí)監(jiān)聽的端口
EXPOSE  8080
#啟動時(shí)運(yùn)行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out

目錄內(nèi)容

5)構(gòu)建

構(gòu)建完成

6)run運(yùn)行

docker run -d -p 9080:8080 --name myt9 -v /zzyyuse/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.8/webapps/test -v /zzyyuse/mydockerfile/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.8/logs --privileged=true zzyytomcat9

7)備注

Docker掛載主機(jī)目錄Docker訪問出現(xiàn)cannot open directory .: Permission denied。

解決辦法:在掛載目錄后多加一個(gè)--privileged=true參數(shù)即可

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 安裝Docker后如何驗(yàn)證是否安裝成功的方式

    安裝Docker后如何驗(yàn)證是否安裝成功的方式

    這篇文章主要介紹了安裝Docker后如何驗(yàn)證是否安裝成功的方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Docker如何進(jìn)入啟動容器

    Docker如何進(jìn)入啟動容器

    本篇文章主要介紹了Docker如何進(jìn)入啟動容器,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • 解決docker容器重啟之后/etc下某些配置文件被重置的問題

    解決docker容器重啟之后/etc下某些配置文件被重置的問題

    這篇文章主要介紹了解決docker容器重啟之后/etc下某些配置文件被重置的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • docker實(shí)踐之docker-compose部署mysql方式

    docker實(shí)踐之docker-compose部署mysql方式

    這篇文章主要介紹了docker實(shí)踐之docker-compose部署mysql方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Docker占滿磁盤空間的問題解決辦法

    Docker占滿磁盤空間的問題解決辦法

    本篇文章主要介紹了Docker占滿磁盤空間的問題解決辦法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • 替換docker容器中的一個(gè)文件的實(shí)現(xiàn)

    替換docker容器中的一個(gè)文件的實(shí)現(xiàn)

    在某些情況下,我們可能確實(shí)需要更新容器內(nèi)的文件,本文主要介紹了替換docker容器中的一個(gè)文件的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • Docker使用Qwen2.5-0.5B-Instruct搭建個(gè)人專屬AI聊天機(jī)器人

    Docker使用Qwen2.5-0.5B-Instruct搭建個(gè)人專屬AI聊天機(jī)器人

    本文介紹了如何在星圖GPU平臺上自動化部署Qwen2.5-0.5B-Instruct鏡像,快速搭建個(gè)人專屬AI聊天機(jī)器人,通過簡單的Docker命令即可完成部署,實(shí)現(xiàn)智能對話功能,感興趣的可以了解一下
    2026-04-04
  • docker容器指定主機(jī)同網(wǎng)段方式

    docker容器指定主機(jī)同網(wǎng)段方式

    文章介紹了如何使用Docker的macvlan網(wǎng)絡(luò)模式,讓容器直接連接到物理網(wǎng)絡(luò),提高網(wǎng)絡(luò)性能和穩(wěn)定性,同時(shí),也提供了創(chuàng)建、綁定、配置和解除容器網(wǎng)絡(luò)的相關(guān)命令
    2025-12-12
  • Docker 安裝 Neo4j 保姆級教程(最新整理)

    Docker 安裝 Neo4j 保姆級教程(最新整理)

    本文詳細(xì)介紹了如何在Windows和Linux環(huán)境下通過Docker安裝和配置 Neo4j圖數(shù)據(jù)庫,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-10-10
  • Docker 部署 Microsoft SQL Server 完全指南

    Docker 部署 Microsoft SQL Server 完全指南

    本文詳細(xì)介紹如何使用Docker快速部署Microsoft SQL Server,提供兩種主流方式,兩種方式都包含了數(shù)據(jù)持久化、資源限制等生產(chǎn)環(huán)境所需的配置,并提供了詳細(xì)的參數(shù)說明和常見問題解決方法,感興趣的朋友跟隨小編一起看看吧
    2025-08-08

最新評論

托克逊县| 桂东县| 色达县| 新乡县| 蒲江县| 岱山县| 闻喜县| 嵩明县| 屯昌县| 韩城市| 翁源县| 泰兴市| 云安县| 扶绥县| 赤水市| 兰坪| 遂平县| 沾益县| 元朗区| 万载县| 南昌县| 长泰县| 邛崃市| 赤水市| 新闻| 商城县| 阿瓦提县| 北川| 伊通| 汉阴县| 临猗县| 彰化市| 衡东县| 益阳市| 定南县| 申扎县| 自治县| 博白县| 崇义县| 赤壁市| 大兴区|