dockerfile構(gòu)建docker鏡像詳細(xì)說明灯萍,主要是springboot的jar包構(gòu)建鏡像樣例
1.鏡像構(gòu)建命令:docker build
圖解
在這里插入圖片描述
<font color=#999AAA >啟動(dòng)命令:<font color=red>(注意最后面有一個(gè)點(diǎn)荚守,不要忘記)
docker build -t 自定義鏡像名:tag .
<font color=#999AAA >執(zhí)行docker build時(shí),docker server會(huì)先把上下文的所有文件都裝著起來蚤告,然后根據(jù)dockerfile文件內(nèi)容來一條條執(zhí)行指令來構(gòu)建鏡像
<font color=red>警告:
不要用你的根目錄下當(dāng)上下文目錄努酸,
/
作為PATH
因?yàn)樗鼤?huì)導(dǎo)致生成到您的硬盤驅(qū)動(dòng)器的全部內(nèi)容傳輸?shù)絛ocker 守護(hù)進(jìn)程。導(dǎo)致服務(wù)器宕機(jī)
2.初次體驗(yàn):我的第一個(gè)簡單樣例dockerfile構(gòu)建docker鏡像
1)拉取一個(gè)centos鏡像
docker pull centos:7
2)創(chuàng)建文件
touch test.txt
3)編寫dockerfile文件杜恰,內(nèi)容如下
FROM centos:7
COPY test.txt /
4)構(gòu)建鏡像
docker build -t mycentos1 .
<font color=#999AAA >運(yùn)行結(jié)果:(Successfully)
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM centos:7
---> b5b4d78bc90c
Step 2/2 : COPY test.txt /
---> 0336262a3ff6
Successfully built 0336262a3ff6
Successfully tagged mycentos1:latest
5)查看構(gòu)建好的鏡像:docker images
在這里插入圖片描述
6)運(yùn)行鏡像:docker run -it mycentos1
<font color=#999AAA >鏡像的已經(jīng)存在test.txt获诈,證明COPY test.txt /
已經(jīng)復(fù)制到鏡像里了
在這里插入圖片描述
7)完成第一個(gè)構(gòu)建鏡像
3.dockerfile文件的指令關(guān)鍵字說明(就是命令)
<font color=#999AAA >指令說明都是來自官網(wǎng)
指令 | 參數(shù)形式 | 描述 |
---|---|---|
FROM | FROM [--platform=<platform>] <image>[:<tag>] [AS <name>] |
FROM 指令初始化一個(gè)新的構(gòu)建階段,并為后續(xù)指令設(shè)置 基本映像心褐。<font style="color: #f70404">(重點(diǎn))因此舔涎,有效的 Dockerfile 必須從FROM 指令開始。</font>(推薦)最好從公共存儲庫中拉出圖像開始構(gòu)建逗爹。 |
MAINTINER | MAINTAINER <name> |
MAINTAINER 指令設(shè)置生成圖像的作者字段<font style="color: #f70404">(官網(wǎng)已經(jīng)不建議使用亡嫌,改成:LABEL)</font> |
LABEL | LABEL <key>=<value> <key>=<value> <key>=<value> ... |
標(biāo)簽:LABEL 指令將元數(shù)據(jù)添加到圖像。ALABEL 是鍵值對掘而。要在LABEL 值中包含空格挟冠,請像在命令行分析中一樣使用引號和反斜杠。 |
RUN | (1)RUN <command> (shell形式袍睡,命令在shell中運(yùn)行知染,默認(rèn)情況下/bin/sh -c 在Linux或cmd /S /C Windows上運(yùn)行)(2) RUN ["executable", "param1", "param2"] (執(zhí)行表格) |
執(zhí)行shell命令、Linux命令斑胜、安裝命令等 |
COPY |
COPY [--chown=<user>:<group>] <src>... <dest> COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
|
copy和add功能很像控淡,都有把上下文目錄資源復(fù)制到鏡像的功能 copy是對上下文的資源直接復(fù)制 add還可以是url,對tar還會(huì)自動(dòng)解壓 |
ADD |
ADD [--chown=<user>:< group >] <src>... <dest> ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
|
|
ENV | ENV <key>=<value> ... |
ENV 指令將環(huán)境變量<key> 設(shè)置為value <value> 止潘。此值將在構(gòu)建階段的所有后續(xù)指令所在的環(huán)境中使用掺炭,并且在許多情況下也可以內(nèi)聯(lián)替換例如:docker run --env key=value就會(huì)替換dockerFile原來定義的環(huán)境變量,達(dá)到動(dòng)態(tài)設(shè)置的功能 |
EXPOSE |
EXPOSE <port> [<port>/<protocol>...] 例如:EXPOSE 80/udp |
EXPOSE 指令通知Docker容器在運(yùn)行時(shí)監(jiān)聽指定的網(wǎng)絡(luò)端口覆山。您可以指定端口是偵聽TCP還是UDP竹伸,如果未指定協(xié)議,則默認(rèn)值為TCP簇宽。就是把容器的端口爆露出來勋篓,不然容器將不給訪問魏割, -p 標(biāo)記ondocker run 發(fā)布和映射一個(gè)或多個(gè)端口譬嚣,或者使用-P 標(biāo)記發(fā)布所有公開的端口并將它們映射到高階端口钞它。 |
VOLUME | VOLUME ["/data"] |
掛載卷:VOLUME 指令創(chuàng)建具有指定名稱的安裝點(diǎn)拜银,并將其標(biāo)記為保存來自本機(jī)主機(jī)或其他容器的外部安裝的卷。就是把容器的目錄能掛載到本地主機(jī)上尼桶,達(dá)到數(shù)據(jù)保護(hù)的作用 例如:docker run -v 本地目錄:容器目錄操灿,就是把容器目錄掛載到本地主機(jī)了,然后就可以相互通數(shù)據(jù)泵督,雙向綁定趾盐,那邊修改都會(huì)同步更新,前提就是要dockerfile構(gòu)建的要先定義好救鲤,不然不會(huì)生效 |
WORKDIR | WORKDIR /path/to/workdir |
是對容器進(jìn)行交互模式時(shí),第一次進(jìn)來容器的目錄落腳點(diǎn)秩冈,還有對copy,add也有作用,細(xì)看官網(wǎng)說明 |
ENTRYPOINT | (1)ENTRYPOINT ["executable", "param1", "param2"] (2) ENTRYPOINT command param1 param2
|
入口點(diǎn):ENTRYPOINT 允許您配置將作為可執(zhí)行文件運(yùn)行的容器入问。一般可以和CMD集合使用 |
CMD | (1) CMD ["executable","param1","param2"] (exec形式丹锹,這是首選形式)(2) CMD ["param1","param2"] (作為ENTRYPOINT的默認(rèn)參數(shù)) (3) CMD command param1 param2 (外殼形式) |
CMD 指令中只能有一條指令Dockerfile 。如果您列出多個(gè)队他,CMD 則只有最后一個(gè)CMD 才會(huì)生效卷仑。如果用戶指定的參數(shù), docker run 則它們將覆蓋中指定的默認(rèn)參數(shù)CMD 麸折。 |
4.構(gòu)建springboot的jar鏡像
1)前提條件
<font color=#999AAA >已經(jīng)有一個(gè)可以運(yùn)行的springboot的jar包
2)編寫dockerfile
# 基于jdk8環(huán)境
FROM openjdk:8
# 鏡像描述
LABEL version="1.0" \
author="binggoling" \
memo="我的構(gòu)建第一個(gè)springboot的jar,dockerfile文件"
#拷貝jar包到鏡像里
COPY springbootdemo-0.0.1-SNAPSHOT.jar app.jar
#創(chuàng)建文件
RUN bash -c "touch /app.jar"
#設(shè)置環(huán)境變量
ENV xms=128m
ENV xmx=512m
# 掛載目錄。這個(gè)是我的日志生產(chǎn)的目錄
VOLUME /testlog
# 工作目錄
WORKDIR /
#暴露端口
EXPOSE 8080
#容器啟動(dòng)時(shí)的運(yùn)行命令
CMD java -Xms$xms -Xmx$xmx -jar /app.jar --server.port=8080
3)構(gòu)建鏡像
docker build -t myjar .
<font color=#999AAA >構(gòu)建結(jié)果:
Sending build context to Docker daemon 48.31MB
Step 1/10 : FROM openjdk:8
---> 3d06e674f731
Step 2/10 : LABEL version="1.0" author="binggoling" memo="我的構(gòu)建第一個(gè)springboot的jar,dockerfile文件"
---> Using cache
---> f080ad273539
Step 3/10 : COPY springbootdemo-0.0.1-SNAPSHOT.jar app.jar
---> Using cache
---> f2e7909f5ac4
Step 4/10 : RUN bash -c "touch /app.jar"
---> Using cache
---> 6233753d2e9c
Step 5/10 : ENV xms=128m
---> Using cache
---> f0c98951d24e
Step 6/10 : ENV xmx=512m
---> Using cache
---> 00f882ae0119
Step 7/10 : VOLUME /testlog
---> Using cache
---> 895097ffbabb
Step 8/10 : WORKDIR /
---> Using cache
---> 928fad7a73a7
Step 9/10 : EXPOSE 8080
---> Using cache
---> 2f608ba6e225
Step 10/10 : CMD java -Xms$xms -Xmx$xmx -jar /app.jar --server.port=8080
---> Using cache
---> 09e6c2b3a96e
Successfully built 09e6c2b3a96e
Successfully tagged myjar:latest
<font color=#999AAA >查看鏡像:docker images
在這里插入圖片描述
4)啟動(dòng)容器
docker run --name myjar -v /usr/local/docker/make/log:/testlog -p 8085:8080 -d myjar