將springboot服務打包成docker鏡像

創(chuàng)建spring boot 服務項目

使用idea創(chuàng)建名稱為docker-project听怕,并創(chuàng)建一個TestController用于測試饰迹,如下圖所示


image.png

TestController內容為:

package com.zl.dk.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.util.UUID;

/**
 * @author: zhanglin574@xdf.cn
 * @date: 2022/2/17
 * @description:
 */
@RestController
public class TestController {

    @GetMapping("/docker/test/{port}")
    public String test(@PathVariable Integer port){
        return "docker use port " + port + ", uuid:" + UUID.randomUUID() ;
    }
}

application.yml內容為:

server:
  port: 8081

pom文件內容為:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.3.5.RELEASE</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.zl.dk</groupId>
  <artifactId>docker-project</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>docker-project</name>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

項目打包

在maven插件中先執(zhí)行clean 然后再執(zhí)行package


image.png

此時target目錄下生成了docker-project-1.0-SNAPSHOT.jar


image.png

創(chuàng)建Dockerfile文件

在pom.xml文件同級目錄下創(chuàng)建Dockerfile文件瘸味,文件內容為:

#基礎鏡像
FROM java:8
#作者
MAINTAINER zhanglin574@xdf.cn
#聲稱容器卷目錄
VOLUME /tmp
#將宿主機jar包拷貝到容器中,此命令會將jar包拷貝到容器的根路徑/下
ADD target/docker-project-1.0-SNAPSHOT.jar docker-project.jar
#暴露端口8081
EXPOSE 8081
#容器啟動時執(zhí)行的命令
ENTRYPOINT ["java",  "-jar" ,"/docker-project.jar"]

打包鏡像

在idea的Terminal命令行窗口中執(zhí)行命令

docker build -t myboot:1.0 .

執(zhí)行命令docker images查看已經打好的了鏡像


image.png

啟動容器

執(zhí)行命令

docker run -d -p 8081:8081   myboot:1.0

執(zhí)行docker ps查看是否已啟動成功


image.png

測試

打開瀏覽器輸入路徑:http://localhost:8081/docker/test/8081,發(fā)現(xiàn)正常訪問梦重,至此打包springboot鏡像以及啟動容器成功

image.png

擴展

如果想往springboot服務中傳遞參數(shù)怎么辦呢赏壹?
首先改造一下TestController內容如下

package com.zl.dk.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.util.UUID;

/**
 * @author: zhanglin574@xdf.cn
 * @date: 2022/2/17
 * @description:
 */
@RestController
public class TestController {
    @Value("${env.addr}")
    private String addr;
    @GetMapping("/docker/test/{port}")
    public String test(@PathVariable Integer port){
        return "docker use port " + port + ", uuid:" + UUID.randomUUID() + ", env.addr=" + addr ;
    }
}

在application.yml中添加變量env.addr

server:
  port: 8081
env:
  addr: ${env.addr}

修改Dockerfile文件,只修改了最后一行命令:

#基礎鏡像
FROM java:8
#作者
MAINTAINER zhanglin574@xdf.cn
#聲稱容器卷目錄
VOLUME /tmp
#將宿主機jar包拷貝到容器中泥彤,此命令會將jar包拷貝到容器的根路徑/下
ADD target/docker-project-1.0-SNAPSHOT.jar docker-project.jar
#暴露端口8081
EXPOSE 8081
#容器啟動時執(zhí)行的命令
#ENTRYPOINT ["java",  "-jar" ,"/docker-project.jar"]
ENTRYPOINT ["bash", "-c" ,"java -jar /docker-project.jar ${OPTS_1}"]

重新打包

先執(zhí)行maven的clean再執(zhí)行package
執(zhí)行打包命令

docker build -t myboot:1.1 .

執(zhí)行docker ps 查看是否有之前啟動的容器欲芹,有的話執(zhí)行docker stop 870d4d00b8d4停掉容器


image.png

執(zhí)行docker images查看是否打包鏡像成功


image.png

啟動容器

執(zhí)行命令

docker run -d -p 8081:8081 -e "OPTS_1=--env.addr=127.0.0.10"  myboot:1.1

查看容器是否啟動:docker ps


image.png

測試

打開瀏覽器,輸入http://localhost:8081/docker/test/8081,發(fā)現(xiàn)啟動命令中的env.addr已經正常顯示

image.png

至此向容器中的服務傳遞參數(shù)工作正常

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末吟吝,一起剝皮案震驚了整個濱河市菱父,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剑逃,老刑警劉巖浙宜,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蛹磺,居然都是意外死亡粟瞬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門萤捆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來裙品,“玉大人俗批,你說我怎么就攤上這事∈性酰” “怎么了岁忘?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長区匠。 經常有香客問我臭觉,道長,這世上最難降的妖魔是什么辱志? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任蝠筑,我火速辦了婚禮,結果婚禮上揩懒,老公的妹妹穿的比我還像新娘什乙。我一直安慰自己,他們只是感情好已球,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布臣镣。 她就那樣靜靜地躺著,像睡著了一般智亮。 火紅的嫁衣襯著肌膚如雪忆某。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天阔蛉,我揣著相機與錄音弃舒,去河邊找鬼。 笑死状原,一個胖子當著我的面吹牛聋呢,可吹牛的內容都是我干的。 我是一名探鬼主播颠区,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼削锰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了毕莱?” 一聲冷哼從身側響起器贩,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朋截,沒想到半個月后蛹稍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡质和,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年稳摄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饲宿。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡厦酬,死狀恐怖胆描,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情仗阅,我是刑警寧澤昌讲,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站减噪,受9級特大地震影響短绸,放射性物質發(fā)生泄漏。R本人自食惡果不足惜筹裕,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一醋闭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朝卒,春花似錦证逻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瑞眼,卻和暖如春龙宏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伤疙。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工银酗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掩浙。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓花吟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親厨姚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內容