還在手動部署springboot項目?不妨試試它,讓你部署項目飛起來!
目錄
docker 介紹
安裝 docker
Ubuntu 安裝 docker
CentOS 安裝 docker
通過腳本安裝
拉取 java 環(huán)境
創(chuàng)建 springboot 項目
打包 springboot 到 docker
docker 查看容器的日志
查看 log4j2 輸出問文件日志
docker 介紹
Docker 是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的鏡像中,然后發(fā)布到任何流行的 Linux 或 Windows 機器上,也可以實現(xiàn)虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。
docker 的核心思想是通過對應(yīng)用的封裝、分發(fā)、部署、運行生命周期進行管理,達到應(yīng)用組件級別的 “一次性封裝,到處運行”。這里的應(yīng)用組件,可以是一個 web 應(yīng)用,也可以是一個環(huán)境,更可以是一個數(shù)據(jù)庫等等。
安裝 docker
既然 docker 這么神奇,那我們?nèi)绾伟惭b docker 呢?我們一起來走一下吧。
Ubuntu 安裝 docker
由于本人的系統(tǒng)是 CentOS,所以這里就只展示一下 CentOS 的安裝方式,Ubuntu 以及其他系統(tǒng)請自行百度。
CentOS 安裝 docker
docker 要求 CentOS 在 7.0 以后的版本,如果你的系統(tǒng)版本還在 7.0 以前,請先升級一下版本在進行安裝,同時不支持 32 位的系統(tǒng),內(nèi)核版本至少 3.10。
請先確保沒有安裝過 docker,否則有可能會導(dǎo)致安裝失敗,如果之前安裝過,可以嘗試直接 yum isntall -y docker
更新軟件源第一個命令
yum update

遇到他輸入 y,然后回車,看到下面信息表示更新成功:

第二個命令
yum install -y yum-utils device-mapper-persistent-data lvm2

添加 docker 穩(wěn)定版本的 yum 軟件源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

再次更新 yum 源,并安裝 docker
yum update

yum install -y docker-ce

看到這個頁面,標(biāo)識 docker 已經(jīng)安裝成功了。
安裝完成之后啟動 docker
systemctl start docker
重啟
systemctl restart docker
停止
systemctl stop docker
開機自啟動
systemctl enable docker
查看 docker 的狀態(tài)
systemctl status docker
通過腳本安裝
除了上面的 yum 安裝,還可以采用 shell 腳本安裝,安裝流程如下:
curl -fsSL https://get.docker.com/ | sh
或者
wget -qO- https://get.docker.com/ | sh
拉取 java 環(huán)境
拉取 jdk 很簡單,直接執(zhí)行一行代碼即可,我這里拉取的時 java 8 的版本。
docker pull java:8
拉取完成之后執(zhí)行:
docker images
如果出現(xiàn)下面內(nèi)容,表示拉取成功

創(chuàng)建 springboot 項目
新建項目

引入 sprint-boot-web 的依賴

新建完成之后的項目結(jié)構(gòu)

引入 docker 依賴
<properties>
<docker.image.prefix>registry.aliyuncs.com/linhuatest</docker.image.prefix>
</properties>
<!-- docker插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!--docker文件所在的目錄-->
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
新建 docker 文件在 main 目錄下新建 docker 目錄,然后在 docker 目錄下創(chuàng)建 dockerfile 文件,不需要后綴名。

創(chuàng)建完成之后的工程目錄如下:

編輯 dockerfile 文件
FROM java:8
VOLUME /tmp/tomcat
ADD spring-boot-docker-0.0.1-SNAPSHOT.jar springboot-docker.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/springboot-docker.jar"]
FROM:指定存在的鏡像,java:8 是我剛剛拉取的鏡像,運行的基礎(chǔ)。VOLUME:指向的一個臨時文件,用于存儲 tomcat 工作。ADD:復(fù)制文件并且重命名文件。ENTRYPOINT:初始化配置或者自定義配置。
創(chuàng)建測試接口

TestController 內(nèi)容如下:
package com.ymy.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class TestController {
@RequestMapping(value = "/test",method = RequestMethod.GET)
public String test(){
System.out.println("這是控制臺日志!");
log.info("這是輸出到文件的日志");
return "HELLO-BUG?。。。。。。。。。?;
}
}
在 resources 目錄下創(chuàng)建 log4j2.xml 文件主要看這兩個參數(shù):

這里我使用了 log4j2 的日志,如何配置 log4j2 的日志,請參考 springboot 整合 Log4j2(將日志輸出到指定文件)。
編寫 application.yml 配置文件
server:
port: 9999
到這里 springboot 項目就創(chuàng)建完成了,我們現(xiàn)在啟動一下項目。
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.5.RELEASE)
15:29:19.386 [main] INFO com.ymy.SpringBootDockerApplication - Starting SpringBootDockerApplication on LAPTOP-3GLHJRE9 with PID 20652 (D:\springboot\spring-boot-docker\target\classes started by admin in D:\springboot)
15:29:19.395 [main] INFO com.ymy.SpringBootDockerApplication - No active profile set, falling back to default profiles: default
15:29:20.183 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9999 (http)
15:29:20.200 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9999"]
15:29:20.201 [main] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat]
15:29:20.201 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.31]
15:29:20.309 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
15:29:20.309 [main] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 881 ms
15:29:20.452 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
15:29:20.568 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9999"]
15:29:20.596 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 9999 (http) with context path ''
15:29:20.599 [main] INFO com.ymy.SpringBootDockerApplication - Started SpringBootDockerApplication in 1.664 seconds (JVM running for 4.04)
如果看到這個頁面表示 springboot 項目沒有問題,現(xiàn)在我們將項目拷貝到服務(wù)器中。
打包 springboot 到 docker

我現(xiàn)在已經(jīng)將項目拷貝到服務(wù)器中,我們現(xiàn)在需要將它打包到 docker 中,借助 maven 實現(xiàn)打包,如果還沒有安裝 maven 的,請先安裝 maven,切換到項目的根目錄

執(zhí)行
mvn clean package docker:build
執(zhí)行完之后將會看到

表示打包成功。
執(zhí)行
docker images

我們發(fā)現(xiàn) docker 的鏡像中多了一個 springboot/spring-boot-docker,沒錯,這個就是我們的 springboot 項目,既然鏡像已經(jīng)生成,那么如何使用這個鏡像呢?
執(zhí)行
docker run --name springbooot-docker -p 9999:9999 -d 4a2

run: 運行的意思–name:指定鏡像啟動的之后的名稱 - p:容器和外部的端口映射 第一個端口:外部 第二個端口:內(nèi)部 - d:后臺運行 -t: 實時運行,窗口關(guān)閉,程序結(jié)束。4a2:表示鏡像的 id(IMAGE ID)前 3 位,這里的 id 并不需要輸入全稱,只需要輸入前幾個就行,有一個前提:當(dāng)有很多鏡像的時候,前面幾個字符就有可能會相同,這個時候就需要多輸入幾位,直到不相同位置。
啟動了鏡像之后我怎么知道有沒有成功呢?這個時候我們就需要一個命令來查看已經(jīng)啟動的任務(wù)
docker ps

我們發(fā)現(xiàn)這里已經(jīng)出現(xiàn)了我們之前啟動的鏡像,所以這基本上代表啟動成功了,為了驗證是否啟動成功,我們在瀏覽器輸入測試的接口:ip:9999/test

docker 查看容器的日志
這說明我們已經(jīng) springboot 項目已經(jīng)啟動成功了,到這里 docker 部署 springboot 項目差不就結(jié)束了,但是你可能還有一個疑問,如果我想看控制臺的日志怎么辦呢?像我們一般使用 java -jar 的時候都會生成一個控制臺的日志文件,那 docker 容器中怎么查看控制臺日志呢?其實很簡單,只需要一行命令即可
docker ps
找到容器的 id

然后執(zhí)行
docker logs -f --tail=100 ca

這個時候我們就能看到控制臺的日志了,如何我們想看 log4j2 輸出的文件日志呢?
查看 log4j2 輸出問文件日志
還記得我們在 log4j2 中配置了日志的輸出目錄了嗎?

沒錯,就是這個, 我們切換到這個目下

發(fā)現(xiàn)這里生成了三個文件,我們打開 info.log
tail -100f info.log

我們發(fā)現(xiàn)并沒有輸入我們打印的:“這是輸出到文件的日志”,難道是我們配置錯了問題?不是的,是因為我們找錯了位置,真正的文件日志在容器內(nèi)部,所以我們需要先進入容器內(nèi)部
docker exec -it ca2cd59fff9b /bin/bash
ca2cd59fff9b:容器 id
然后再切換到我們?nèi)罩镜妮敵雎窂?/p>
cd work/spring-boot-docker

這里也找到了三個日志文件,我們打印 info.log
tail -100f info.log

這就是我們 log4j2 輸出到文件的日志,到這里 docker 整合 springboot 項目就差不多結(jié)束了,如果想要退出 docker 容器可以使用
exit
更多精彩文章請關(guān)注公眾號
