Docker部署SpringBoot應(yīng)用

前言

??之前已經(jīng)說過docker的安裝,也舉了一個官網(wǎng)版本的部署的列子。但是我們主要還是做java的,這次就來說一說如何用docker部署SpringBoot應(yīng)用。

開始

搭建一個SpringBoot應(yīng)用

POM文件
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

    <repositories>
        <repository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
SpringBoot的啟動類
package com.tuchen.docker;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class,args);
    }
}
controller層
package com.tuchen.docker.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/say")
@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){
        return "hello world!";
    }
}

這是一個最簡單的SpringBoot應(yīng)用,我們在本地啟動,訪問http://localhost:8080/say/hello會在瀏覽器中顯示hello world!。如下圖效果:

至此,我們SpringBoot的demo程序已經(jīng)寫好了!

開始部署

上傳jar包

??首先創(chuàng)建一個我們部署用的工作目錄,用來存放jar包和docker的一些文件,我這里創(chuàng)建了一個test目錄,并且已經(jīng)把jar包打包好上傳進來了。

關(guān)于如何上傳,mac用戶可以在本機的終端窗口用scp命令直接上傳。我本人用的windows系統(tǒng),使用的是圖形化上傳工具SecureFX。

??現(xiàn)在如果你已經(jīng)上傳好了,你的目錄下面應(yīng)該是這個樣子:

編寫Dockfile

??接下來就開始編寫Dockerfile了,首先在jar包的同級目錄創(chuàng)建名字為Dockerfile的文件(注意大小寫,并且沒有后綴),將下列內(nèi)容拷貝進去:

# 指定jdk1.8鏡像為運行環(huán)境
FROM java:8
# 將本地的jar包拷貝進容器中,并且改名為app.jar
COPY docker-springboot-1.0-SNAPSHOT.jar /app.jar
# 暴露8080端口
EXPOSE 8080
# 容器啟動后執(zhí)行java的啟動命令 啟動SpringBoot應(yīng)用
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.jar

??Dockerfile創(chuàng)建好了以后,你的目錄應(yīng)該是這個樣子,包含一個jar包,一個Dockerfile:


接下來在test目錄下使用命令構(gòu)建image(注意后面的點):

#創(chuàng)建一個名字為hello的鏡像
$ docker build -t hello .

構(gòu)建鏡像過程中,docker產(chǎn)生的日志:

執(zhí)行docker images查看已經(jīng)構(gòu)建好的鏡像:

鏡像構(gòu)建好了以后就開始啟動容器了:

$ docker run -d -p 8080:8080 hello

容器內(nèi)部啟動java應(yīng)用可能會有點慢,等15秒左右用瀏覽器打開http://你服務(wù)器的地址:8080/say/hello就可以看到那個熟悉的hello world?。?br>

結(jié)束

??到這里,一個簡易的SpringBoot已經(jīng)在Docker容器中啟動了,當然生產(chǎn)環(huán)境中的啟動沒有這么簡單,但是大致套路是差不多的。我也在慢慢學習,一步一步跟進中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容