還在手動部署springboot項目?不妨試試它,讓你部署項目飛起來!
作者 | 流星 007
來源?|??http://suo.im/6biT68
目錄
docker 介紹
安裝 docker
Ubuntu 安裝 docker
CentOS 安裝 docker
通過腳本安裝
拉取 java 環(huán)境
創(chuàng)建 springboot 項目
打包 springboot 到 docker
docker 查看容器的日志
查看 log4j2 輸出問文件日志
docker 介紹
Docker 是一個開源的應用容器引擎,讓開發(fā)者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然后發(fā)布到任何流行的 Linux 或 Windows 機器上,也可以實現(xiàn)虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。
docker 的核心思想是通過對應用的封裝、分發(fā)、部署、運行生命周期進行管理,達到應用組件級別的 “一次性封裝,到處運行”。這里的應用組件,可以是一個 web 應用,也可以是一個環(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,否則有可能會導致安裝失敗,如果之前安裝過,可以嘗試直接 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

看到這個頁面,標識 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)境
搜索公縱號:MarkerHub,關(guān)注回復[?vue?]獲取前后端入門教程!
拉取 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 依賴
???????registry.aliyuncs.com/linhuatest
????
?
????????????
????????????????com.spotify
????????????????docker-maven-plugin
????????????????1.0.0
????????????????
????????????????????${docker.image.prefix}/${project.artifactId}
????????????????????
????????????????????src/main/docker
????????????????????
????????????????????????
????????????????????????????/
????????????????????????????${project.build.directory}
????????????????????????????${project.build.finalName}.jar
????????????????????????
????????????????????
????????????????
????????????
新建 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:復制文件并且重命名文件。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 并不需要輸入全稱,只需要輸入前幾個就行,有一個前提:當有很多鏡像的時候,前面幾個字符就有可能會相同,這個時候就需要多輸入幾位,直到不相同位置。
啟動了鏡像之后我怎么知道有沒有成功呢?這個時候我們就需要一個命令來查看已經(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
推薦閱讀
