鏡像
鏡像結(jié)構(gòu)
要想自己構(gòu)建鏡像,必須先了解鏡像的結(jié)構(gòu)。
鏡像之所以能讓我們快速跨操作系統(tǒng)部署應(yīng)用而忽略其運(yùn)行環(huán)境、配置,就是因?yàn)殓R像中包含了程序運(yùn)行需要的系統(tǒng)函數(shù)庫(kù)、環(huán)境、配置、依賴(lài)。
因此,自定義鏡像本質(zhì)就是依次準(zhǔn)備好程序運(yùn)行的基礎(chǔ)環(huán)境、依賴(lài)、應(yīng)用本身、運(yùn)行配置等文件,并且打包而成。
我們要從0部署一個(gè)Java應(yīng)用,大概流程是這樣:
-
準(zhǔn)備一個(gè)linux服務(wù)(CentOS或者Ubuntu均可)
-
安裝并配置JDK
-
上傳Jar包
-
運(yùn)行jar包
我們打包鏡像也是分成這么幾步:
-
準(zhǔn)備Linux運(yùn)行環(huán)境(java項(xiàng)目并不需要完整的操作系統(tǒng),僅僅是基礎(chǔ)運(yùn)行環(huán)境即可)
-
安裝并配置JDK
-
拷貝jar包
-
配置啟動(dòng)腳本
上述步驟中的每一次操作其實(shí)都是在生產(chǎn)一些文件(系統(tǒng)運(yùn)行環(huán)境、函數(shù)庫(kù)、配置最終都是磁盤(pán)文件),所以鏡像就是一堆文件的集合。
但需要注意的是,鏡像文件不是隨意堆放的,而是按照操作的步驟分層疊加而成,每一層形成的文件都會(huì)單獨(dú)打包并標(biāo)記一個(gè)唯一id,稱(chēng)為Layer(層)。這樣,如果我們構(gòu)建時(shí)用到的某些層其他人已經(jīng)制作過(guò),就可以直接拷貝使用這些層,而不用重復(fù)制作。
Dockerfile
由于制作鏡像的過(guò)程中,需要逐層處理和打包,比較復(fù)雜,所以Docker就提供了自動(dòng)打包鏡像的功能。我們只需要將打包的過(guò)程,每一層要做的事情用固定的語(yǔ)法寫(xiě)下來(lái),交給Docker去執(zhí)行即可。
而這種記錄鏡像結(jié)構(gòu)的文件就稱(chēng)為Dockerfile。
指令 | 說(shuō)明 | 示例 |
---|---|---|
FROM | 指定基礎(chǔ)鏡像 | FROM centos:6 |
ENV | 設(shè)置環(huán)境變量,可在后面指令使用 | ENV key value |
COPY | 拷貝本地文件到鏡像的指定目錄 | COPY ./xx.jar /tmp/app.jar |
RUN | 執(zhí)行Linux的shell命令,一般是安裝過(guò)程的命令 | RUN yum install gcc |
EXPOSE | 指定容器運(yùn)行時(shí)監(jiān)聽(tīng)的端口,是給鏡像使用者看的 | EXPOSE 8080 |
ENTRYPOINT | 鏡像中應(yīng)用的啟動(dòng)命令,容器運(yùn)行時(shí)調(diào)用 | ENTRYPOINT java -jar xx.jar |
例如,要基于Ubuntu鏡像來(lái)構(gòu)建一個(gè)Java應(yīng)用,其Dockerfile內(nèi)容如下:
# 指定基礎(chǔ)鏡像
FROM ubuntu:16.04
# 配置環(huán)境變量,JDK的安裝目錄、容器內(nèi)時(shí)區(qū)
ENV JAVA_DIR=/usr/local
ENV TZ=Asia/Shanghai
# 拷貝jdk和java項(xiàng)目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 設(shè)定時(shí)區(qū)
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 安裝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
# 指定項(xiàng)目監(jiān)聽(tīng)的端口
EXPOSE 8080
# 入口,java項(xiàng)目的啟動(dòng)命令
ENTRYPOINT ["java", "-jar", "/app.jar"]
我們?cè)诖嘶A(chǔ)上制作java鏡像,就可以省去JDK的配置了:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-829608.html
# 基礎(chǔ)鏡像
FROM openjdk:11.0-jre-buster
# 設(shè)定時(shí)區(qū)
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷貝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-829608.html
到了這里,關(guān)于Docker基礎(chǔ)(鏡像的結(jié)構(gòu),Dockerfile語(yǔ)法介紹,基于Ubuntu鏡像來(lái)構(gòu)建一個(gè)Java應(yīng)用)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!