dockerfile是用來構(gòu)建docker鏡像的文件!命令參數(shù)腳本!
構(gòu)建步驟:
1、編寫一個(gè)dockerfile 文件
2、docker buind 構(gòu)建成一個(gè)鏡像
3、docker run 運(yùn)行鏡像
4、docker push 發(fā)布鏡像(DockerHub、阿里云鏡像倉庫!)
我們看一下官方的鏡像怎么做的?
https://github.com/docker-library/mysql/blob/a09a716a88ce34a17e16df3f8b091066d90e6f34/8.0/Dockerfile.debian


很多官方鏡像都是基礎(chǔ)包,很多功能不全,我們通常會(huì)自己搭建自己的鏡像!
既然官方可以制作,我們也可以!
DockerFil構(gòu)建過程
基礎(chǔ)知識(shí):
1、每個(gè)保留關(guān)鍵字(指令)都必須是大寫字母
2、執(zhí)行從上到下順序執(zhí)行
3、#表示注釋
4、每條指令都會(huì)創(chuàng)建提交一個(gè) 新的鏡像層,進(jìn)行提交!
很多指令:


dockerfile是面向開發(fā)的,我們以后要發(fā)布項(xiàng)目,做鏡像,就需要編寫dockerfile文件,這個(gè)文件特別簡單!
步驟:開發(fā)、部署、上線 缺一不可!
Docker鏡像逐漸成為企業(yè)交付的標(biāo)準(zhǔn),必須掌握!
Dickerfile:構(gòu)建文件,定義了一切步驟,源代碼
Dockerimages:通過Dockerfile構(gòu)建生成的鏡像,最終發(fā)布和運(yùn)行的產(chǎn)品!
Docker容器:容器就是鏡像運(yùn)行起來提供服務(wù)器!
DockerFile的指令:
FROM #基礎(chǔ)鏡像,一切從這里開始
MAINTAINER #鏡像是誰寫的,姓名+郵箱
RUN #鏡像構(gòu)建的時(shí)候需要運(yùn)行的命令
ADD #步驟:tomcat鏡像,這個(gè)tomcat壓縮包,添加內(nèi)容
WORKDIR #鏡像的工作目錄
VOLUME #掛載的目錄
EXPOST#保留端口配置
CMD 指定這個(gè)容器啟動(dòng)的時(shí)候需要運(yùn)行的命令,只有最后一行會(huì)生效,可被替代
ENTRYPOINT #指定這個(gè)容器啟動(dòng)的時(shí)候需要運(yùn)行的命令,可以追加命令
ONBUILD #當(dāng)構(gòu)建一個(gè)被繼承dockerfile這個(gè)時(shí)候就會(huì)運(yùn)行ONBUILD 的指令,觸發(fā)指令
COPY #類似ADD,將我們的文件拷貝到鏡像中
ENV 構(gòu)建的時(shí)候設(shè)置環(huán)境變量
實(shí)戰(zhàn)測試:
Docker Hub中 99%的鏡像都是從這個(gè)鏡像過來的 FROM scratch;然后配置我們需要的軟件和配置來進(jìn)行構(gòu)建

創(chuàng)建一個(gè)我們自己的centos:
1、編寫dockerfile文件:

2、通過這個(gè)文件構(gòu)建鏡像
命令:docker build -f mydockerfilecetos -t mycnentos:0.1 .
docker build -f dockerfle文件路徑 -t 鏡像名:tag .

3、測試運(yùn)行:
docker run -it mycnentos:0.1
image.png
對(duì)比之前的centos 增加了vim pw等命令
我們可以列出本地進(jìn)行的變更歷史
docker history 鏡像id

我們平時(shí)拿到一個(gè)鏡像,可以研究一下它是怎么做的了?
CMD 和 ENTRYPOINT 的區(qū)別:
CMD 指定這個(gè)容器啟動(dòng)的時(shí)候需要運(yùn)行的命令,只有最后一行會(huì)生效,可被替代
ENTRYPOINT #指定這個(gè)容器啟動(dòng)的時(shí)候需要運(yùn)行的命令,可以追加命令
測試CMD:
1、編寫dockerfile文件:

2、構(gòu)建鏡像并運(yùn)行發(fā)現(xiàn) ls -a 命令生效:

問題:想追加命令 -l ls-al

cmd的清理下 -l替換了CMD['ls','a']命令, -l 不是命令所以報(bào)錯(cuò)!
測試ENTRYPOINT :
1、追加命令是可以直接執(zhí)行的:

