SpringBoot第二十四篇: springboot整合docker

2021-12-31 方志朋

這篇文篇介紹,怎麼為 springboot程序構建一個docker鏡像。docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。

準備工作

環境:

linux環境或mac,不要用windowsjdk 8maven 3.0docker

對docker一無所知的看docker教程。

創建一個springboot工程

引入web的起步依賴,創建一個 Controler:

@SpringBootApplication@RestControllerpublic class SpringbootWithDockerApplication {    @RequestMapping("/")    public String home() {        return "Hello Docker World";    }    public static void main(String[] args) {        SpringApplication.run(SpringbootWithDockerApplication.class, args);    }}

將springboot工程容器化

Docker有一個簡單的dockerfile文件作為指定鏡像的圖層。讓我們先創建一個 dockerFile文件:

src/main/docker/Dockerfile:

FROM frolvlad/alpine-oraclejdk8:slimVOLUME /tmpADD springboot-with-docker-0.0.1-SNAPSHOT.jar app.jarRUN sh -c 'touch /app.jar'ENV JAVA_OPTS=""ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

我們通過maven 構建docker鏡像。

在maven的pom目錄,加上docker鏡像構建的插件

<properties>   <docker.image.prefix>springio</docker.image.prefix></properties><build>    <plugins>        <plugin>            <groupId>com.spotify</groupId>            <artifactId>docker-maven-plugin</artifactId>            <version>0.4.11</version>            <configuration>                <imageName>${docker.image.prefix}/${project.artifactId}</imageName>                <dockerDirectory>src/main/docker</dockerDirectory>                <resources>                    <resource>                        <targetPath>/</targetPath>                        <directory>${project.build.directory}</directory>                        <include>${project.build.finalName}.jar</include>                    </resource>                </resources>            </configuration>        </plugin>    </plugins></build>

注意:${docker.image.prefix} 為你在 docker官方倉庫的用戶名,如果你不需要上傳鏡像,隨便填。

通過maven 命令:

第一步:mvn clean

第二步: mvn package docker:bulid ,如下:

Step 2/6 : VOLUME /tmp
-→ Running in a98be3878053
-→ 8286e98b54c5
Removing intermediate container a98be3878053
Step 3/6 : ADD springboot-with-docker-0.0.1-SNAPSHOT.jar app.jar
-→ c6ce13e50bbd
Removing intermediate container a303a3058869
Step 4/6 : RUN sh -c 『touch /app.jar』
-→ Running in cf231afe700e
-→ 9a0ec8936c00
Removing intermediate container cf231afe700e
Step 5/6 : ENV JAVA_OPTS 「」
-→ Running in e192597fc881
-→ 2cb0d73bbdb0
Removing intermediate container e192597fc881
Step 6/6 : ENTRYPOINT sh -c java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar
-→ Running in ab85f53fcdd8
-→ 60fdb5c61692
Removing intermediate container ab85f53fcdd8
Successfully built 60fdb5c61692
[INFO] Built forezp/springboot-with-docker
[INFO] ————————————————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————————————————
[INFO] Total time: 01:45 min
[INFO] Finished at: 2017-04-19T05:37:44-07:00
[INFO] Final Memory: 19M/48M
[INFO] ————————————————————————————————————

鏡像構建成功。查看鏡像:

docker images

顯示:

forezp/springboot-with-docker   latest              60fdb5c61692        About a minute ago   195 MB

啟動鏡像:

$ docker run -p 8080:8080 -t forezp/springboot-with-docker

打開瀏覽器訪問  localhost:8080;瀏覽器顯示:Hello Docker World。
說明docker 的springboot工程已部署。

停止鏡像:

docker stop 60fdb5c61692

刪除鏡像:

docker rm 60fdb5c61692

參考資料

https://docs.docker.com/engine/reference/builder/))

http://www.runoob.com/docker/docker-tutorial.html

源碼下載

https://github.com/forezp/SpringBootLearning

相關焦點

  • 不要手動部署SpringBoot項目了,使用Docker真香!
    這裡我使用了log4j2的日誌,如何配置log4j2的日誌,請參考 springboot整合Log4j2(將日誌輸出到指定文件)。我們發現docker的鏡像中多了一個springboot/spring-boot-docker,沒錯,這個就是我們的springboot項目,既然鏡像已經生成,那麼如何使用這個鏡像呢
  • 還在手動啟動SpringBoot項目?Docker部署不香嗎?
    整合Log4j2(將日誌輸出到指定文件)。我們發現docker的鏡像中多了一個springboot/spring-boot-docker,沒錯,這個就是我們的springboot項目,既然鏡像已經生成,那麼如何使用這個鏡像呢?
  • SpringBoot 項目構建 Docker 鏡像調優實踐
    time:此參數會顯示執行過程經過的時間$ time docker build -t registry.cn-beijing.aliyuncs.com/mydlq/springboot:0.0.1 .$ time docker pull registry.cn-beijing.aliyuncs.com/mydlq/springboot:0.0.1拉取過程0.0.1: Pulling from mydlq/springboot743f2d6c1f65: Already exists b83e581826a6: Pull
  • 使用Gradle構建SpringBoot項目Docker鏡像
    本文使用到的素材:Gradle構建的SpringBoot項目,Docker環境,docker-compose(非必需)。本文項目源碼地址GitHub:https://github.com/lovemianhuatang/l-gradle-springboot-dockerSpringBoot項目基礎項目
  • 【超全教程】SpringBoot 2.3.x 分層構建 Docker 鏡像實踐
    Docker 鏡像$ time docker build -t hub.mydlq.club/library/springboot-normal:0.0.2 . Docker 鏡像$ time docker build -t hub.mydlq.club/library/springboot-layer:0.0.2 .
  • 還在手動部署springboot項目?不妨試試它,讓你部署項目飛起來!
    Ubuntu安裝dockerCentOS安裝docker通過腳本安裝拉取java環境創建springboot項目打包springboot到dockerdocker查看容器的日誌查看log4j2輸出問文件日誌docker介紹Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中
  • Springboot項目使用docker部署
    yum remove docker docker-common docker-selinux docker-engine安裝需要的軟體包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的yum install -y yum-utils
  • 最新官方版的SpringBoot 整合 Dubbo.md
    上次的那個springboot和dubbo的整合版本中,dubbo的版本是2.5.3,它的Service註解和事務不能同時使用,會造成掃描失效,
  • SpringBoot整合Netty(附源碼)
    多線程內容聚合前言本篇文章主要介紹的是SpringBoot整合Netty以及使用Protobuf進行數據傳輸的相關內容。Protobuf會簡單的介紹下用法,至於Netty在之前的文章中已經簡單的介紹過了,這裡就不再過多細說了。Protobuf介紹protocolbuffer(以下簡稱PB)是google 的一種數據交換的格式,它獨立於語言,獨立於平臺。
  • 初級-手動部署springboot工程到Docker
    #配置yum為阿里雲鏡像yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#安裝docker-cednf install https://mirrors.aliyun.com/docker-ce/linux
  • 推薦幾個SpringBoot學習教程和實戰項目!
    今天給大家推薦幾個springboot項目供大家學習,springboot基本上已經成為了Java開發的標配了,不會springboot都不好出去見人,目前市場上開源的項目並不多,今天特此推薦供大家學習。
  • SpringBoot入門
    SpringBoot 就是通過整合spring的整個系列技術棧,來簡化企業級開發。也正是因為如此,我們只要導入springboot-starts-web,在不需要配置tomcat的前提下就可以將一個JavaWeb程序跑起來。其實在springboot中,還有很多的starts,具體可以去官方文檔看,部分截圖如下:
  • Springboot+Minio的使用
    使用 docker 搭建 Minio 作為對象存儲伺服器,通過 Springboot
  • 不容錯過 | 好程式設計師Java-SpringBoot整合Shiro(全套教程免費領取~)
    隨著SpringBoot的動態語言的流行,SpringBoot整合Shiro就成為目前企業級架構中用的最多的一套解決方案。這套視頻是由我們Java主管級講師親自錄製的精品視頻—SpringBoot整合Shiro(全套視頻教程+筆記+代碼),全部免費分享給大家!希望大家可以不斷收穫知識,提升自己,每天都有一點小進步!
  • Springboot整合Google開發的gRPC
    創建 springboot 父工程 springboot_grpc-- lookup parent from repository -->    </parent>   <groupId>com.lw.grpc</groupId>    <artifactId>springboot_grpc</artifactId>    <version>0.0.1-SNAPSHOT
  • springboot整合Shiro
    作者 |  Zzzkis來源 |  urlify.cn/EBfuy276套java從入門到精通實戰課程分享1.創建一個springbootmodel){        model.addAttribute("msg","hello,Shiro");        return "index";    }}一定要記住shiro的三大對象1.subject:用戶2.SecurityManager:管理所有用戶3.Realm:連接數據1.3導入整合用的依賴包
  • 一個網站的微服務架構實戰docker和 docker-compose
    -t bees-springboot .cd /bees/conf/docker-compose downecho "關閉容器"docker rmi -f $(docker images |  grep "bees-springboot"  | awk '{print $1}')docker rmi -f $(docker images |  grep "bees-nginx-angular
  • SpringBoot實現RESTful
    DeleteMapping接收 delete 方式的請求,可以使用 GetMapping 代替2.4@PutMapping接收 put 方式的請求,可以用 PostMapping 代替2.5 @GetMapping接收 get 方式的請求三、案例創建11-springboot-restful
  • Spring Boot 分層構建 Docker 鏡像實戰
    (2) 第二次構建(修改依賴 pom.xml 文件)$ mvn clean install$ time docker build -t hub.mydlq.club/library/springboot-normal:0.0.2 .Docker 鏡像構建總共花費 1.27s 時間。
  • Springboot @EnableWebMvc 註解
    }並且如果容器中存在  WebMvcConfigurationSupport 這個類,那麼 springboot 對於 springmvc 的自動配置將會失效可以看到這個類中都是一些空方法,只是保留了最基本的 MVC 的功能,並不具備其它的擴展功能如下:springboot 對於 mvc 模塊的配置就在 WebMvcAutoConfiguration