東莞手機(jī)網(wǎng)站制作公司鄭州網(wǎng)站顧問
什么是Dockerfile
Dockerfile可以認(rèn)為是Docker鏡像的描述文件,是由一系列命令和參數(shù)構(gòu)成的教程,主要作用是用來構(gòu)建docker鏡像的構(gòu)建文件。
Dockerfile解析過程
Dockerfile的保留命令
保留字 | 作用 |
---|---|
FROM | 當(dāng)前鏡像是基于哪個鏡像的 第一個指令必須是FROM |
MAINTAINER | 鏡像維護(hù)者的姓名和郵箱地址 |
RUN | 構(gòu)建鏡像時需要運行的指令 |
EXPOSE | 當(dāng)前容器對外暴露出的端口號 |
WORKDIR | 指定在創(chuàng)建容器后,終端默認(rèn)登錄進(jìn)來的工作目錄,一個落腳點 |
ENV | 用來在構(gòu)建鏡像過程中設(shè)置環(huán)境變量 |
ADD | 將宿主機(jī)目錄下的文件拷貝進(jìn)鏡像且ADD命令會自動處理URL和解壓tar包 |
COPY | 類似于ADD,拷貝文件和目錄到鏡像中 將從構(gòu)建上下文目錄中<原路徑>的文件/目錄復(fù)制到新的一層的鏡像內(nèi)的<目標(biāo)路徑>位置 |
VOLUME | 容器數(shù)據(jù)卷,用于數(shù)據(jù)保存和持久化工作 |
CMD | 指定一個容器啟動時要運行的命令 Dockerfile中可以有多個CMD指令,但只有最后一個生效,CMD會被dockerrun之后的參數(shù)替換 |
ENTRYPOINT | 指定一個容器啟動時要運行的命令 ENTRYPOINT的目的和CMD一樣,都是在指定容器啟動程序及其參數(shù) |
FROM
- 基于哪個鏡像進(jìn)行構(gòu)建新的鏡像,在構(gòu)建時會自動從docker hub拉取base鏡像,必須作為Dockerfile的第一個指令出現(xiàn)
- 語法
FROM <image>
FROM <iamge>[:tag]
使用版本不寫為latest
FROM <iamge>[@<digest>]
使用摘要
MAINTAINER
- 鏡像維護(hù)者的姓名和郵箱地址[不推薦使用了]
- 語法:
MAINTAINER <name>
RUN
- RUN指令將在當(dāng)前映像之上的新層中執(zhí)行任何命令并提交結(jié)果。生成的提交映像將用于Dockerfile中的下一步
- 語法:
RUN <command>
(shell form, thecommand is run in a shell, which by default is /bin/sh -c on Linux or cmd /S /C on Windows)RUN echo helloRUN ["executable","param1""param2"] (exec form)
RUN [" /bin/bash","-c""echo hello"]
EXPOSE
- 用來指定構(gòu)建的鏡像在運行為容器時對外暴露的端口
- 語法:
EXPOSE 80/tcp 如果沒有顯示指定則默認(rèn)暴露都是tcp
EXPOSE 80/udp
WORKDIR
- 用來為Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令設(shè)置工作目錄。如果WORKDIR不存在,即使它沒有在任何后續(xù)Dockerfile指令中使用,它也將被創(chuàng)建。
- 語法:
WORKDIR /path/to/workdirWORKDIR /a
WORKDIR b
WORKDIR C
注意:WORKDIR指令可以在Dockerfile中多次使用。如果提供了相對路徑,則該路徑將與先前WORKDIR指令的路徑相對
ENV
- 用來為構(gòu)建鏡像設(shè)置環(huán)境變量。這個值將出現(xiàn)在構(gòu)建階段中所有后續(xù)指令的環(huán)境中。
- 語法:
ENV <key> <value>
ENV <key>=<value>
ADD
- 用來從context上下文復(fù)制新文件、目錄或遠(yuǎn)程文件url,并將它們添加到位于指定路徑的映像文件系統(tǒng)中。
- 語法:
ADD hom* /mydir/ 通配符添加多個文件
ADD hom?.txt /mydir/ 通配符添加
ADD test.txt relativeDir/ 可以指定相對路徑
ADD test.txt /absoluteDir/ 也可以指定絕對路徑
ADD url
COPY
- 用來將context目錄中指定文件復(fù)制到鏡像的指定目錄中
- 語法:
COPY src dest
COPY ["<src>",.... "<dest>"]
VOLUME
- 用來定義容器運行時可以掛載在宿主機(jī)的目錄。如果不指定,則任何目錄都不能掛載成功。
- 語法:
VOLUME
CMD
- 用來為啟動的容器指定執(zhí)行的命令,在Dockerfile中只能有一條CMD指令。如果列出多個命令,則只有最后一個命令才會生效。
- 注意:Dockerfile中只能有一條CMD指令。如果列出多個命令,則只有最后一個命令才會生效。
- 語法:
CMD ["executable","param1", "param2"] (exec form, this is the preferred form)
CMD [ "param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)
- 在啟動容器的時候,可以在啟動命令的后面追加指令,這樣就可以覆蓋CMD指令
例如:
docker run xxxx ls /
ENTRYPOINT
- 用來指定容器啟動時執(zhí)行命令,和CMD類似
- 語法:
ENTRYPOINT ["executable""param1"" param2" ]
ENTRYPOINT command param1 param2
- ENTRYPOINT指令,往往用于設(shè)置容器啟動后的第一個命令,這對一個容器來說往往是固定的。CMD指令,往往用于設(shè)置容器啟動的第一個命令的默認(rèn)參數(shù),這對一個容器來說可以是變化的
基于Dockerfile構(gòu)建SpringBoot項目
1、準(zhǔn)備好SpringBoot項目的jar包
2、把jar包上傳到服務(wù)器
3、編寫Dockerfile
FROM openjdk:8
WORKDIR /[目錄名]
ADD xxx.jar /[目錄名]
EXPOSE [項目端口號]
ENTRYPOINT ["java","-jar"]
CMD ["xxx.jar"]
4、構(gòu)建鏡像
docker buile -t xxx .
5、運行鏡像
docker run -p [端口號]:[端口號] xxx