網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
DockerFile 簡(jiǎn)介
鏡像的定制實(shí)際上就是定制每一層所添加的配置、文件。如果我們可以把每一層修改、安裝、構(gòu)建、操作的命令都寫入一個(gè)腳本,用這個(gè)腳本來(lái)構(gòu)建、定制鏡像,那么那些無(wú)法重復(fù)的問(wèn)題、鏡像構(gòu)建透明性的問(wèn)題、體積的問(wèn)題就都會(huì)解決。這個(gè)腳本就是 Dockerfile。
DockerFile 是用來(lái)構(gòu)建 Docker 鏡像的構(gòu)建文件,是由一系列命令和參數(shù)構(gòu)成的腳本。
DockerFile 構(gòu)建過(guò)程
1.DockerFile 內(nèi)容基礎(chǔ)知識(shí)
- 每條保留字指令都必須為大寫字母且后面要跟隨至少一個(gè)參數(shù)
- 指令按照從上到下,順序執(zhí)行
- #表示注釋
- 每條指令都會(huì)創(chuàng)建一個(gè)新的鏡像層,并對(duì)鏡像進(jìn)行提交
2、Docker 執(zhí)行 DockerFile 的大致流程
- docker 從基礎(chǔ)鏡像運(yùn)行一個(gè)容器
- 執(zhí)行一條指令并對(duì)容器作出修改
- 執(zhí)行類似 docker commit 的操作提交一個(gè)新的鏡像層
- docker 再基于剛提交的鏡像運(yùn)行一個(gè)新容器
- 執(zhí)行 dockerfile 中的下一條指令直到所有指令都執(zhí)行完成
3、總結(jié)
從應(yīng)用軟件的角度來(lái)看,Dockerfile、Docker 鏡像與 Docker 容器分別代表軟件的三個(gè)不同階段
DockerFile:是軟件的原材料
Docker 鏡像:是軟件的交付品
Docker 容器:可以認(rèn)為是軟件的運(yùn)行態(tài)
DockerFile 面向開(kāi)發(fā),Docker 鏡像成為交付標(biāo)準(zhǔn),Docker 容器則涉及部署與運(yùn)維,三者缺一不可,合力充當(dāng)Docker 體系的基石
DockerFile:需要定義一個(gè)DockerFile,DockerFile定義了進(jìn)程需要的一切東西。DockerFile涉及的內(nèi)容包括執(zhí)行代碼或者是文件、環(huán)境變量、依賴包、運(yùn)行時(shí)環(huán)境、動(dòng)態(tài)鏈接庫(kù)、操作系統(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)限控制)等等
Docker 鏡像:再用 DockerFile 定義一個(gè)文件后,docker build時(shí)會(huì)產(chǎn)生一個(gè) Docker 鏡像,當(dāng)運(yùn)行 Docker 鏡像時(shí),會(huì)真正開(kāi)始提供服務(wù)
Docker 容器:容器是直接提供服務(wù)
DockerFile 指令解析
指令 | 解析 |
---|---|
FROM | 鏡像基礎(chǔ),當(dāng)前新鏡像是基于哪個(gè)鏡像構(gòu)建 |
MAINTAINER | 鏡像維護(hù)者的姓名和郵箱地址 |
RUN | 容器構(gòu)建時(shí)需要運(yùn)行的命令 |
EXPOSE | 當(dāng)前容器對(duì)外暴露出的端口 |
WORKDIR | 指定再創(chuàng)建容器后,終端默認(rèn)登陸的進(jìn)來(lái)工作目錄,一個(gè)落腳點(diǎn) |
ENV | 用來(lái)構(gòu)建鏡像過(guò)程中設(shè)置環(huán)境變量 |
ADD | 將宿主機(jī)目錄下的文件拷貝進(jìn)鏡像且ADD命令會(huì)自動(dòng)處理URL和解壓tar壓縮包 |
COPY | 類似ADD,拷貝文件和目錄到鏡像中,將從構(gòu)建上下文件目錄中<源路徑>的文件/目錄復(fù)制到新的一層鏡像內(nèi)的<目標(biāo)路徑>位置 |
VOLUME | 保持?jǐn)?shù)據(jù)和持久化工作 |
CMD | 指定一個(gè)容器啟動(dòng)時(shí)要運(yùn)行的命令,DockerFile 中可以有多個(gè)CMD 指令,但只有最后一個(gè)生效,CMD會(huì)被 docker run 之后的參數(shù)替換 |
ENTRYPOINT | 指定一個(gè)容器啟動(dòng)時(shí)要運(yùn)行的命令,ENTRYPOINT 的目的和CMD 一樣,都是在指定容器啟動(dòng)程序及參數(shù) |
ONBUILD | 觸發(fā)器(當(dāng)別人在使用你的鏡像制作新的鏡像會(huì)觸發(fā)一個(gè)動(dòng)作) |
DockerFile 案例演示
構(gòu)建一個(gè) mycentos 鏡像
自定義mycentos使我們自己的鏡像具備,登錄后的默認(rèn)路徑為 /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 #登錄容器落腳點(diǎn)路徑
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
#啟動(dòng)容器
[root@docker ~]# docker run -it mycentos:test
[root@0cdd7d2f5595 test #登錄容器落腳點(diǎn)路徑]#
#驗(yàn)證 vim 是否安裝
[root@0cdd7d2f5595 test #登錄容器落腳點(diǎn)路徑]# 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
原文鏈接:https://blog.csdn.net/Tiamon_/article/details/109459731
相關(guān)推薦
- 2022-06-21 .net中常用的正則表達(dá)式_C#教程
- 2022-09-13 C語(yǔ)言創(chuàng)建數(shù)組實(shí)現(xiàn)函數(shù)init,empty,reverse_C 語(yǔ)言
- 2022-08-16 Docker中部署Redis集群與部署微服務(wù)項(xiàng)目的詳細(xì)過(guò)程_docker
- 2022-03-29 python實(shí)現(xiàn)二叉排序樹(shù)_python
- 2022-09-20 Go代碼檢查的推薦工具及使用詳解_Golang
- 2022-08-19 WPF基于物理像素繪制圖形_C#教程
- 2022-09-08 關(guān)于keras中的Reshape用法_python
- 2022-04-28 Python可視化學(xué)習(xí)之seaborn調(diào)色盤_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支