Docker部署SpringBoot應(yīng)用

前言

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

開(kāi)始

搭建一個(gè)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的啟動(dòng)類(lèi)
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!";
    }
}

這是一個(gè)最簡(jiǎn)單的SpringBoot應(yīng)用,我們?cè)诒镜貑?dòng),訪問(wèn)http://localhost:8080/say/hello會(huì)在瀏覽器中顯示hello world!。如下圖效果:

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

開(kāi)始部署

上傳jar包

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

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

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

編寫(xiě)Dockfile

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

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

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


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

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

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

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

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

$ docker run -d -p 8080:8080 hello

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

結(jié)束

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

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

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

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