日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

maven项目中如何直接访问某一个页面_整一个自己的docker镜像

發(fā)布時(shí)間:2025/3/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 maven项目中如何直接访问某一个页面_整一个自己的docker镜像 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

獲取鏡像的途徑有兩個(gè),一是從鏡像倉庫獲取,如官方的Docker Hub,二是自定義。上文已經(jīng)介紹如何從鏡像倉庫獲取鏡像,本文基于一個(gè)Springboot項(xiàng)目,來介紹自定義一個(gè)鏡像的基本流程。

1. 定制鏡像的本質(zhì)

我們知道鏡像是分層存儲(chǔ)的,鏡像的構(gòu)建也是一層一層進(jìn)行的,一層構(gòu)建完后,就變?yōu)橹蛔x,在其上再構(gòu)建下一層。因此定制鏡像,實(shí)際上就是定義每一層要干的事,比如執(zhí)行某個(gè)命令,設(shè)置一個(gè)環(huán)境變量,聲明一個(gè)暴露端口等等。然后在構(gòu)建時(shí),按照各層的定義,一層一層地完成構(gòu)建,最終形成一個(gè)包含這些層的鏡像。

2. Dockerfile文件

Docker中定義各層要干的事的文件叫Dockerfile,它是一個(gè)文本文件,包含了一條條的指令,每一條指令對(duì)應(yīng)一層鏡像,指令的內(nèi)容就描述了這一層該如何構(gòu)建。如下示例了一個(gè)非常簡單的Dockerfile,

FROM nginxRUN echo '

Hello jboost!

' > /usr/share/nginx/html/index.html

我們定制鏡像,必須要以某一個(gè)鏡像為基礎(chǔ),在其上構(gòu)建自己需要的層,如上示例中,我們是以nginx鏡像為基礎(chǔ),然后在第二層定制了我們自己的內(nèi)容——修改index.html的內(nèi)容為

Hello jboost!

,這樣運(yùn)行容器打開nginx主頁時(shí)就不會(huì)顯示默認(rèn)的頁面內(nèi)容了。

上面示例中接觸了Dockerfile的兩個(gè)指令

  • FROM:FROM指令指定基礎(chǔ)鏡像,每一個(gè)定制鏡像必須要有一個(gè)基礎(chǔ)鏡像,所以必須要有一條FROM指令,并且是Dockerfile的第一條指令
  • RUN:RUN指令指定需要執(zhí)行的命令,后面接的命令就像是shell腳本一樣可執(zhí)行

Dockerfile還提供了許多其它指令,后續(xù)我們?cè)偌薪榻B,本文只對(duì)接觸到的指令做簡單說明。

3. 自定義一個(gè)鏡像

這部分以一個(gè)Springboot項(xiàng)目為基礎(chǔ),介紹自定義一個(gè)鏡像涉及的基本環(huán)節(jié)。項(xiàng)目地址為:https://github.com/ronwxy/swagger-register ,該項(xiàng)目是一個(gè)Swagger API文檔注冊(cè)服務(wù),其它項(xiàng)目可將Swagger API信息注冊(cè)到該服務(wù),進(jìn)行統(tǒng)一查看與管理。

3.1 定義Dockerfile文件

首先,我們?cè)陧?xiàng)目的根目錄下創(chuàng)建一個(gè)Dockerfile文件(文件名就叫Dockerfile),其內(nèi)容為:

FROM openjdk:8-jdk-alpineENV PROFILE=devRUN mkdir /app /logsCOPY ./target/swagger-register-1.0.0-SNAPSHOT.jar /app/app.jarWORKDIR /appVOLUME /register-dataEXPOSE 11090CMD ["java", "-Dspring.profiles.active=${PROFILE}", "-jar", "app.jar"]

從上往下依次介紹如下

  • 第一行:FORM openjdk:8-jdk-alpine, 表示以openjdk:8-jdk-alpine這個(gè)鏡像為基礎(chǔ)鏡像,因?yàn)檫@是一個(gè)Springboot項(xiàng)目所以必須要有jdk支持,我們?cè)诙ㄖ歧R像時(shí),可以找一個(gè)最適合的鏡像作為基礎(chǔ)鏡像。
  • 第二行:ENV PROFILE=dev, 定義了一個(gè)環(huán)境變量,這個(gè)環(huán)境變量可以在后面被引用
  • 第三行:RUN mkdir /app /logs,通過mkdir命令創(chuàng)建了兩個(gè)目錄,用來保存jar執(zhí)行文件及日志
  • 第四行:COPY ./target/swagger-register-1.0.0-SNAPSHOT.jar /app/app.jar 將target目錄下的jar包復(fù)制到/app目錄下,并且進(jìn)行重命名
  • 第五行:WORKDIR /app, 指定工作目錄為/app,后面各層的當(dāng)前目錄就是指定的工作目錄
  • 第六行:VOLUME /register-data, 定義一個(gè)匿名數(shù)據(jù)卷,前面說過寫操作不要直接在容器內(nèi)進(jìn)行,而要改為寫掛載的數(shù)據(jù)卷目錄,這個(gè)定義可在運(yùn)行容器時(shí)通過 -v 來覆蓋。
  • 第七行:EXPOSE 11090, 聲明了運(yùn)行容器時(shí)提供的服務(wù)端口,也僅僅是個(gè)聲明而已,只是告訴使用的人要映射這個(gè)端口,通過 -p 可映射端口。
  • 第八行:CMD [“java”, “-Dspring.profiles.active=${PROFILE}”, “-jar”, “app.jar”], 指定了容器啟動(dòng)命令,因?yàn)槭且粋€(gè)Springboot項(xiàng)目,所以就是一個(gè)java -jar的執(zhí)行命令,容器啟動(dòng)的時(shí)候就會(huì)執(zhí)行該命令來運(yùn)行Springboot服務(wù),這里引用了第二行定義的環(huán)境變量PROFILE

3.2 配置maven插件

定義好Dockerfile后,為了方便構(gòu)建鏡像,我們可以借助maven的dockerfile插件dockerfile-maven-plugin,在pom.xml的build部分加入配置如下

org.springframework.boot spring-boot-maven-plugin com.spotify dockerfile-maven-plugin 1.4.10${docker.image.prefix}/${project.artifactId}target/${project.build.finalName}.jar

repository指定了鏡像的名稱,docker.image.prefix需要properties部分進(jìn)行定義,我這里是springboot。

3.3 構(gòu)建鏡像

下載源碼:https://github.com/ronwxy/swagger-register.git ,然后在項(xiàng)目的根目錄下執(zhí)行如下命令(前提是本地已經(jīng)裝好了docker與maven及jdk)

mvn clean package -Dmaven.test.skip=true dockerfile:build

該命令首先會(huì)執(zhí)行mvn clean package -Dmaven.test.skip=true對(duì)項(xiàng)目進(jìn)行打包,生成./target/swagger-register-1.0.0-SNAPSHOT.jar文件,然后基于當(dāng)前目錄下的Dockerfile文件進(jìn)行構(gòu)建,如下圖所示

由上圖可看出,該鏡像構(gòu)建分八步(對(duì)應(yīng)Dockerfile的八行指令),每一步生成一個(gè)鏡像層,每一層都有唯一的ID。由圖中也可以看出,除了COPY之類的命令外,每一層的構(gòu)建實(shí)際上是先基于上一層啟動(dòng)一個(gè)容器,然后執(zhí)行該層定義的操作,再移除這個(gè)容器來實(shí)現(xiàn)的,如第八步中

Step 8/8 : CMD ["java", "-Dspring.profiles.active=${PROFILE}", "-jar", "app.jar"][INFO] [INFO] ---> Running in f4acd0b53bca[INFO] Removing intermediate container f4acd0b53bca[INFO] ---> a9ee579f2d62

先啟動(dòng)一個(gè)ID為f4acd0b53bca的容器,在其中執(zhí)行CMD所定義的命令,然后再移除容器f4acd0b53bca,最后生成ID為a9ee579f2d62的鏡像。

構(gòu)建完后,我們就可以在本地鏡像中通過docker iamges看到我們定制的鏡像了,如圖

圖中springboot/swagger-register鏡像即為我們剛剛構(gòu)建好的定制鏡像。

3.4 啟動(dòng)容器

我們可以通過以下命令來啟動(dòng)一個(gè)剛才定制鏡像的容器

docker run -d --name swagger-register -p 11090:11090 -v /home/jenkins/swagger-register/register-data:/register-data -v /home/jenkins/swagger-register/logs:/logs --restart=always springboot/swagger-register:latest

其中:

  • -d 表示以后臺(tái)進(jìn)程方式運(yùn)行
  • –name 指定容器名稱
  • -p 指定端口映射,左邊為宿主機(jī)端口,右邊為容器服務(wù)端口
  • -v 指定數(shù)據(jù)卷掛載,左邊為宿主機(jī)目錄,右邊為容器目錄
  • –restart=always 表示在docker啟動(dòng)時(shí)自動(dòng)啟動(dòng)該容器

關(guān)于容器相關(guān)的內(nèi)容后面詳細(xì)介紹,這里不展開說明了。啟動(dòng)容器后, 我們就可以瀏覽器打開地址 http://宿主機(jī)ip:11090/doc.html 來訪問服務(wù)了(打開頁面后內(nèi)容是空的,因?yàn)闆]有任何服務(wù)注冊(cè)Swagger API, 相關(guān)內(nèi)容可參考 swagger api文檔集中化注冊(cè)管理)

4. 總結(jié)

本文介紹了一個(gè)基于Springboot項(xiàng)目的Docker鏡像定制及使用過程,對(duì)鏡像的構(gòu)建過程,及Dockerfile的基本指令以及容器的運(yùn)行做了基本介紹。后續(xù)會(huì)對(duì)Dockerfile的其它指令及Dockerfile的一些最佳實(shí)踐進(jìn)行更為詳細(xì)的介紹,歡迎關(guān)注。

總結(jié)

以上是生活随笔為你收集整理的maven项目中如何直接访问某一个页面_整一个自己的docker镜像的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。