Docker使用Dockerfile自定義鏡像方式
什么是Dockerfile
Dockerfile就是一個(gè)文本文件,其中包含一個(gè)個(gè)的指令(Instruction),用指令來說明要執(zhí)行什么操作來構(gòu)建鏡像。
每一個(gè)指令都會形成一層Layer。
常見指令
注意:第一行必須是 FROM 指令才行
看實(shí)例
需求:
基于Ubuntu鏡像構(gòu)建一個(gè)新鏡像,運(yùn)行一個(gè)java項(xiàng)目
1.下載資料
將本文最上面的資源下載到本地
2.查看Dockerfile
等會我們直接使用這個(gè)文件就可以依次執(zhí)行這些指令幫助我們構(gòu)建好自己的鏡像(每個(gè)指令都會分一層)
# 指定基礎(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
3.新建目錄
mkdir docker-demo cd docker-demo
4.上傳資料
直接借助 FinalShell 拖動(dòng)上傳即可:
5.構(gòu)建鏡像
docker build -t javaweb:1.0 .
最后空格后面要加一個(gè)點(diǎn),代表的是Dockerfile所在的目錄(也就是我們現(xiàn)在所在的 docker-demo 目錄)
可以看到鏡像構(gòu)建完成了
6.啟動(dòng)容器
docker run --name my-javaweb -p 8090:8090 -d javaweb:1.0
啟動(dòng)成功
7.瀏覽器訪問
http://自己的服務(wù)器地址:8090/hello/count
四、實(shí)例升級
1.為什么升級
其實(shí)之前的實(shí)例中我們的 Dockerfile 還可以簡化一些不需要我們寫的東西,當(dāng)然并不是不用寫了,而是別人幫我們寫好了
2.如何升級
Ⅰ.更改 Dockerfile
我們可以直接基于已經(jīng)安裝好 jdk 的鏡像 openjdk:8-alpine
來構(gòu)建我們的鏡像,只需要將 Dockerfile 更改為如下:
# 指定基礎(chǔ)鏡像 FROM openjdk:8-alpine COPY ./docker-demo.jar /tmp/app.jar # 暴露端口 EXPOSE 8090 # 入口,java項(xiàng)目的啟動(dòng)命令 ENTRYPOINT java -jar /tmp/app.jar
Ⅱ.構(gòu)建鏡像并運(yùn)行容器
docker build -t javaweb:2.0 . # 構(gòu)建鏡像 docker run --name my-javaweb-2.0 -p 8091:8090 -d javaweb:2.0 # 啟動(dòng)容器
3.再次測試
http://自己的服務(wù)器地址:8091/hello/count
總結(jié)
1.Dockerfile的本質(zhì)是一個(gè)文件,通過指令描述鏡像的構(gòu)建過程
2.Dockerfile的第一行必須是FROM,從一個(gè)基礎(chǔ)鏡像來構(gòu)建
3.基礎(chǔ)鏡像可以是基本操作系統(tǒng),如Ubuntu。也可以是其他人制作好的鏡像,例如:java:8-alpine
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于SpringBoot+vue實(shí)現(xiàn)前后端數(shù)據(jù)加解密
這篇文章主要給大家介紹了基于SpringBoot+vue實(shí)現(xiàn)前后端數(shù)據(jù)加解密,文中有詳細(xì)的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴可以自己動(dòng)手試一試2023-08-08Java中的lambda和stream實(shí)現(xiàn)排序
這篇文章主要介紹了Java中的lambda和stream實(shí)現(xiàn)排序,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09在mybatis 中使用if else 進(jìn)行判斷的操作
這篇文章主要介紹了在mybatis 中使用if else 進(jìn)行判斷的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02JSON反序列化Long變Integer或Double的問題及解決
這篇文章主要介紹了JSON反序列化Long變Integer或Double的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Java開發(fā)學(xué)習(xí) Java數(shù)組操作工具
這篇文章主要為大家詳細(xì)介紹了自己編寫的Java數(shù)組操作工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04Java設(shè)計(jì)模式之迭代模式(Iterator模式)介紹
這篇文章主要介紹了Java設(shè)計(jì)模式之迭代模式(Iterator模式)介紹,本文用一個(gè)老師點(diǎn)名的現(xiàn)象描述了迭代模式的使用,需要的朋友可以參考下2015-03-03