自定义镜像-Dockerfile
Dockerfile語法
構(gòu)建自定義的鏡像時(shí),并不需要一個(gè)個(gè)文件去拷貝,打包。
我們只需要告訴Docker,我們的鏡像的組成,需要哪些BaseImage、需要拷貝什么文件、需要安裝什么依賴、啟動(dòng)腳本是什么,將來Docker會(huì)幫助我們構(gòu)建鏡像。
而描述上述信息的文件就是Dockerfile文件。
Dockerfile就是一個(gè)文本文件,其中包含一個(gè)個(gè)的指令(Instruction),用指令來說明要執(zhí)行什么操作來構(gòu)建鏡像。每一個(gè)指令都會(huì)形成一層Layer。
更新詳細(xì)語法說明,請(qǐng)參考官網(wǎng)文檔: Dockerfile reference | Docker Documentation
基于Ubuntu構(gòu)建Java項(xiàng)目
需求:基于Ubuntu鏡像構(gòu)建一個(gè)新鏡像,運(yùn)行一個(gè)java項(xiàng)目
-
步驟1:新建一個(gè)空文件夾docker-demo
- 步驟2:拷貝課前資料中的docker-demo.jar文件到docker-demo這個(gè)目錄
?
- ?步驟3:拷貝課前資料中的jdk8.tar.gz文件到docker-demo這個(gè)目錄
- 步驟4:拷貝課前資料提供的Dockerfile到docker-demo這個(gè)目錄 ?
?其中的內(nèi)容如下:
# 指定基礎(chǔ)鏡像 FROM ubuntu:16.04 # 配置環(huán)境變量,JDK的安裝目錄 ENV JAVA_DIR=/usr/local# 拷貝jdk和java項(xiàng)目的包 COPY ./jdk8.tar.gz $JAVA_DIR/ COPY ./docker-demo.jar /tmp/app.jar# 安裝JDK RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8# 配置環(huán)境變量 ENV JAVA_HOME=$JAVA_DIR/java8 ENV PATH=$PATH:$JAVA_HOME/bin# 暴露端口 EXPOSE 8090 # 入口,java項(xiàng)目的啟動(dòng)命令 ENTRYPOINT java -jar /tmp/app.jar-
步驟5:進(jìn)入docker-demo
將準(zhǔn)備好的docker-demo上傳到虛擬機(jī)任意目錄,然后進(jìn)入docker-demo目錄下
-
步驟6:運(yùn)行命令:
最后訪問 http://192.168.150.101:8090/hello/count,其中的ip改成你的虛擬機(jī)ip
基于java8構(gòu)建Java項(xiàng)目
雖然我們可以基于Ubuntu基礎(chǔ)鏡像,添加任意自己需要的安裝包,構(gòu)建鏡像,但是卻比較麻煩。所以大多數(shù)情況下,我們都可以在一些安裝了部分軟件的基礎(chǔ)鏡像上做改造。
例如,構(gòu)建java項(xiàng)目的鏡像,可以在已經(jīng)準(zhǔn)備了JDK的基礎(chǔ)鏡像基礎(chǔ)上構(gòu)建。
需求:基于java:8-alpine鏡像,將一個(gè)Java項(xiàng)目構(gòu)建為鏡像
實(shí)現(xiàn)思路如下:
-
① 新建一個(gè)空的目錄,然后在目錄中新建一個(gè)文件,命名為Dockerfile
-
② 拷貝課前資料提供的docker-demo.jar到這個(gè)目錄中
-
③ 編寫Dockerfile文件:
-
a )基于java:8-alpine作為基礎(chǔ)鏡像
-
b )將app.jar拷貝到鏡像中
-
c )暴露端口
-
d )編寫入口ENTRYPOINT
內(nèi)容如下:
-
-
④ 使用docker build命令構(gòu)建鏡像
-
⑤ 使用docker run創(chuàng)建容器并運(yùn)行
小結(jié)
小結(jié):
Dockerfile的本質(zhì)是一個(gè)文件,通過指令描述鏡像的構(gòu)建過程
Dockerfile的第一行必須是FROM,從一個(gè)基礎(chǔ)鏡像來構(gòu)建
基礎(chǔ)鏡像可以是基本操作系統(tǒng),如Ubuntu。也可以是其他人制作好的鏡像,例如:java:8-alpine
總結(jié)
以上是生活随笔為你收集整理的自定义镜像-Dockerfile的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自定义镜像-镜像结构
- 下一篇: DockerCompose-初始Comp