Docker執(zhí)行DockerFile構(gòu)建過程指令解析
DockerFile 簡介
鏡像的定制實際上就是定制每一層所添加的配置、文件。如果我們可以把每一層修改、安裝、構(gòu)建、操作的命令都寫入一個腳本,用這個腳本來構(gòu)建、定制鏡像,那么那些無法重復(fù)的問題、鏡像構(gòu)建透明性的問題、體積的問題就都會解決。這個腳本就是 Dockerfile。
DockerFile 是用來構(gòu)建 Docker 鏡像的構(gòu)建文件,是由一系列命令和參數(shù)構(gòu)成的腳本。
DockerFile 構(gòu)建過程
1.DockerFile 內(nèi)容基礎(chǔ)知識
- 每條保留字指令都必須為大寫字母且后面要跟隨至少一個參數(shù)
- 指令按照從上到下,順序執(zhí)行
- #表示注釋
- 每條指令都會創(chuàng)建一個新的鏡像層,并對鏡像進行提交
2、Docker 執(zhí)行 DockerFile 的大致流程
- docker 從基礎(chǔ)鏡像運行一個容器
- 執(zhí)行一條指令并對容器作出修改
- 執(zhí)行類似 docker commit 的操作提交一個新的鏡像層
- docker 再基于剛提交的鏡像運行一個新容器
- 執(zhí)行 dockerfile 中的下一條指令直到所有指令都執(zhí)行完成
3、總結(jié)
從應(yīng)用軟件的角度來看,Dockerfile、Docker 鏡像與 Docker 容器分別代表軟件的三個不同階段
DockerFile:是軟件的原材料
Docker 鏡像:是軟件的交付品
Docker 容器:可以認為是軟件的運行態(tài)
DockerFile 面向開發(fā),Docker 鏡像成為交付標準,Docker 容器則涉及部署與運維,三者缺一不可,合力充當Docker 體系的基石
DockerFile:需要定義一個DockerFile,DockerFile定義了進程需要的一切東西。DockerFile涉及的內(nèi)容包括執(zhí)行代碼或者是文件、環(huán)境變量、依賴包、運行時環(huán)境、動態(tài)鏈接庫、操作系統(tǒng)的發(fā)行版、服務(wù)進程和內(nèi)核進程(當應(yīng)用進程需要和系統(tǒng)服務(wù)和內(nèi)核進程打交道,這時需要考慮如何設(shè)計 namespace 的權(quán)限控制)等等
Docker 鏡像:再用 DockerFile 定義一個文件后,docker build時會產(chǎn)生一個 Docker 鏡像,當運行 Docker 鏡像時,會真正開始提供服務(wù)
Docker 容器:容器是直接提供服務(wù)
DockerFile 指令解析
指令 | 解析 |
---|---|
FROM | 鏡像基礎(chǔ),當前新鏡像是基于哪個鏡像構(gòu)建 |
MAINTAINER | 鏡像維護者的姓名和郵箱地址 |
RUN | 容器構(gòu)建時需要運行的命令 |
EXPOSE | 當前容器對外暴露出的端口 |
WORKDIR | 指定再創(chuàng)建容器后,終端默認登陸的進來工作目錄,一個落腳點 |
ENV | 用來構(gòu)建鏡像過程中設(shè)置環(huán)境變量 |
ADD | 將宿主機目錄下的文件拷貝進鏡像且ADD命令會自動處理URL和解壓tar壓縮包 |
COPY | 類似ADD,拷貝文件和目錄到鏡像中,將從構(gòu)建上下文件目錄中<源路徑>的文件/目錄復(fù)制到新的一層鏡像內(nèi)的<目標路徑>位置 |
VOLUME | 保持數(shù)據(jù)和持久化工作 |
CMD | 指定一個容器啟動時要運行的命令,DockerFile 中可以有多個CMD 指令,但只有最后一個生效,CMD會被 docker run 之后的參數(shù)替換 |
ENTRYPOINT | 指定一個容器啟動時要運行的命令,ENTRYPOINT 的目的和CMD 一樣,都是在指定容器啟動程序及參數(shù) |
ONBUILD | 觸發(fā)器(當別人在使用你的鏡像制作新的鏡像會觸發(fā)一個動作) |
DockerFile 案例演示
構(gòu)建一個 mycentos 鏡像
自定義mycentos使我們自己的鏡像具備,登錄后的默認路徑為 /test,vim編輯器
#拉取基礎(chǔ)鏡像 centos:latest [root@docker ~]# docker pull centos #創(chuàng)建工作目錄 /dockerfile [root@docker ~]# mkdir /mydocker #編寫 dockerfile [root@docker ~]# vim /mydocker/dockerfile_centos FROM centos MAINTAINER zzyy<zzyy167@126.com RUN touch /test ENV MYPATH /test #登錄容器落腳點路徑 WORKDIR $MYPATH RUN yum install -y vim EXPOSE 80 #暴露的端口80 CMD echo $MYPATH CMD echo "success------------ok" CMD /bin/bash #構(gòu)建新的鏡像 [root@docker ~]# docker build -f /mydocker/dockerfile_centos -t mycentos:test . ……略…… Successfully built ed8bd0ce1d67 Successfully tagged mycenter:test #查看新鏡像 [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mycentos test ed8bd0ce1d67 39 seconds ago 300MB centos latest 0f3e07c0138f 13 months ago 220MB #啟動容器 [root@docker ~]# docker run -it mycentos:test [root@0cdd7d2f5595 test #登錄容器落腳點路徑]# #驗證 vim 是否安裝 [root@0cdd7d2f5595 test #登錄容器落腳點路徑]# rpm -qa vim* vim-minimal-8.0.1763-10.el8.x86_64 vim-common-8.0.1763-13.el8.x86_64 vim-enhanced-8.0.1763-13.el8.x86_64 vim-filesystem-8.0.1763-13.el8.noarch
以上就是Docker執(zhí)行DockerFile構(gòu)建過程指令解析的詳細內(nèi)容,更多關(guān)于Docker執(zhí)行DockerFile構(gòu)建指令的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Docker版的MySQL5.7升級到MySQL8.0.13,數(shù)據(jù)遷移
這篇文章主要介紹了Docker版的MySQL5.7升級到MySQL8.0.13,數(shù)據(jù)遷移,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09使用docker compose搭建一個elk系統(tǒng)的方法
這篇文章主要介紹了使用docker-compose搭建一個elk系統(tǒng)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08Docker如何實現(xiàn)修改Docker0網(wǎng)橋默認網(wǎng)段
這篇文章主要介紹了Docker如何實現(xiàn)修改Docker0網(wǎng)橋默認網(wǎng)段,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12Docker從零開始學(xué)習(xí)之Commit提交命令
docker commit命令是用于根據(jù)docker容器的改變創(chuàng)建一個新的docker鏡像,下面這篇文章主要給大家介紹了關(guān)于Docker從零開始學(xué)習(xí)之Commit提交命令的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-05-05