Docker 部署不香嗎?

目錄

  • docker介紹
  • 安裝docker
    • Ubuntu安裝docker
    • CentOS安裝docker
    • 通過腳本安裝
  • 拉取java環境
  • 創建springboot項目
  • 打包springboot到docker
  • docker查看容器的日誌
  • 查看log4j2輸出問文件日誌

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發佈到任何流行的 Linux或Windows 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。

docker的核心思想是通過對應用的封裝、分發、部署、運行生命週期進行管理,達到應用組件級別的“一次性封裝,到處運行”。這裡的應用組件,可以是一個web應用,也可以是一個環境,更可以是一個數據庫等等。

既然docker這麼神奇,那我們如何安裝docker呢?我們一起來走一下吧。

PS:我把 Dorcker 相關的文章整理好了,關注微信公眾號 Java後端,回覆 666 下載就可以了。

Ubuntu安裝docker

由於本人的系統是CentOS,所以這裡就只展示一下CentOS的安裝方式,Ubuntu以及其他系統請自行百度。

CentOS安裝docker

docker要求CentOS在7.0以後的版本,如果你的系統版本還在7.0以前,請先升級一下版本在進行安裝,同時不支持32位的系統,內核版本至少3.10。

請先確保沒有安裝過docker,否則有可能會導致安裝失敗,如果之前安裝過,可以嘗試直接yum isntall -y docker

1.更新軟件源第一個命令

<code>yum update/<code>
Docker 部署不香嗎?

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

Docker 部署不香嗎?

第二個命令

<code>yum install -y yum-utils device-mapper-persistent-data lvm2/<code>
Docker 部署不香嗎?

2.添加docker穩定版本的yum軟件源

<code>yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo/<code>
Docker 部署不香嗎?

3.再次更新yum源,並安裝docker

<code>yum update/<code>
Docker 部署不香嗎?

<code>yum install -y docker-ce/<code>
Docker 部署不香嗎?

看到這個頁面,標識docker已經安裝成功了。

4.安裝完成之後啟動docker

<code>systemctl start docker/<code>

5.重啟

<code>systemctl restart docker/<code>

6.停止

<code>systemctl stop docker/<code>

7.開機自啟動

<code>systemctl enable docker/<code>

8.查看docker的狀態

<code>systemctl status docker/<code>

通過腳本安裝

除了上面的yum安裝,還可以採用shell腳本安裝,安裝流程如下:

<code>curl -fsSL https://get.docker.com/ | sh/<code>

或者

<code>wget -qO- https://get.docker.com/ | sh/<code> 

拉取jdk很簡單,直接執行一行代碼即可,我這裡拉取的時java 8的版本。

<code>docker pull java:8/<code>

拉取完成之後執行:

<code>docker images/<code>

如果出現下面內容,表示拉取成功

Docker 部署不香嗎?

1.新建項目

Docker 部署不香嗎?

引入sprint-boot-web的依賴

Docker 部署不香嗎?

新建完成之後的項目結構

Docker 部署不香嗎?

2.引入docker依賴

<code>
       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
                        
                    
                
            /<code>

3.新建docker文件在main目錄下新建docker目錄,然後在docker目錄下創建dockerfile文件,不需要後綴名。

Docker 部署不香嗎?

創建完成之後的工程目錄如下:

Docker 部署不香嗎?

4.編輯dockerfile文件

<code>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"]/<code>

FROM:指定存在的鏡像,java:8是我剛剛拉取的鏡像,運行的基礎。VOLUME:指向的一個臨時文件,用於存儲tomcat工作。ADD:複製文件並且重命名文件。ENTRYPOINT:初始化配置或者自定義配置。

5.創建測試接口

Docker 部署不香嗎?

TestController內容如下:

<code>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!!!!!!!!!!";
    }
}/<code>

在resources目錄下創建log4j2.xml文件主要看這兩個參數:

Docker 部署不香嗎?

這裡我使用了log4j2的日誌,如何配置log4j2的日誌,請參考 springboot整合Log4j2(將日誌輸出到指定文件)。

6.編寫application.yml配置文件

<code>server:
  port: 9999/<code>

到這裡springboot項目就創建完成了,我們現在啟動一下項目。

<code>. ____ _ __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
  ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: 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)/<code>

如果看到這個頁面表示springboot項目沒有問題,現在我們將項目拷貝到服務器中。

Docker 部署不香嗎?

我現在已經將項目拷貝到服務器中,我們現在需要將它打包到docker中,藉助maven實現打包,如果還沒有安裝maven的,請先安裝maven,切換到項目的根目錄

Docker 部署不香嗎?

執行

<code>mvn clean package docker:build/<code>

執行完之後將會看到

Docker 部署不香嗎?

表示打包成功。

執行

<code>docker images/<code>
Docker 部署不香嗎?

我們發現docker的鏡像中多了一個
springboot/spring-boot-docker,沒錯,這個就是我們的springboot項目,既然鏡像已經生成,那麼如何使用這個鏡像呢?

執行

<code>docker run --name springbooot-docker -p 9999:9999 -d 4a2/<code>
Docker 部署不香嗎?

run:運行的意思–name:指定鏡像啟動的之後的名稱-p:容器和外部的端口映射 第一個端口:外部 第二個端口:內部-d:後臺運行 -t:實時運行,窗口關閉,程序結束。4a2:表示鏡像的id(IMAGE ID)前3位,這裡的id並不需要輸入全稱,只需要輸入前幾個就行,有一個前提:當有很多鏡像的時候,前面幾個字符就有可能會相同,這個時候就需要多輸入幾位,直到不相同位置。

啟動了鏡像之後我怎麼知道有沒有成功呢?這個時候我們就需要一個命令來查看已經啟動的任務

<code>docker ps/<code>
Docker 部署不香嗎?

我們發現這裡已經出現了我們之前啟動的鏡像,所以這基本上代表啟動成功了,為了驗證是否啟動成功,我們在瀏覽器輸入測試的接口:ip:9999/test

Docker 部署不香嗎?

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

<code>docker ps/<code>

找到容器的id

Docker 部署不香嗎?

然後執行

<code>docker logs -f/<code>
Docker 部署不香嗎?

這個時候我們就能看到控制檯的日誌了,如何我們想看log4j2輸出的文件日誌呢?

還記得我們在log4j2中配置了日誌的輸出目錄了嗎?

Docker 部署不香嗎?

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

Docker 部署不香嗎?

發現這裡生成了三個文件,我們打開info.log

<code>tail -100f info.log/<code>
Docker 部署不香嗎?

我們發現並沒有輸入我們打印的:“這是輸出到文件的日誌”,難道是我們配置錯了問題?不是的,是因為我們找錯了位置,真正的文件日誌在容器內部,所以我們需要先進入容器內部

<code>docker exec -it ca2cd59fff9b /bin/bash/<code>

ca2cd59fff9b:容器id

然後再切換到我們日誌的輸出路徑

<code>cd work/spring-boot-docker/<code>
Docker 部署不香嗎?

這裡也找到了三個日誌文件,我們打印info.log

<code>tail -100f info.log/<code>
Docker 部署不香嗎?

這就是我們log4j2輸出到文件的日誌,到這裡docker整合springboot項目就差不多結束了,如果想要退出docker容器可以使用

<code>exit/<code>


分享到:


相關文章: