Docker 部署不香吗?
點擊上方“朱小廝的博客”,選擇“設為星標”
后臺回復"書",獲取
來源:22j.co/ef5f
目錄
docker介紹
安裝docker
Ubuntu安裝docker
CentOS安裝docker
通過腳本安裝
拉取java環境
創建springboot項目
打包springboot到docker
docker查看容器的日志
查看log4j2輸出問文件日志
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然后發布到任何流行的 Linux或Windows 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。
docker的核心思想是通過對應用的封裝、分發、部署、運行生命周期進行管理,達到應用組件級別的“一次性封裝,到處運行”。這里的應用組件,可以是一個web應用,也可以是一個環境,更可以是一個數據庫等等。
既然docker這么神奇,那我們如何安裝docker呢?我們一起來走一下吧。
Ubuntu安裝docker
由于本人的系統是CentOS,所以這里就只展示一下CentOS的安裝方式,Ubuntu以及其他系統請自行百度。
CentOS安裝docker
docker要求CentOS在7.0以后的版本,如果你的系統版本還在7.0以前,請先升級一下版本在進行安裝,同時不支持32位的系統,內核版本至少3.10。
請先確保沒有安裝過docker,否則有可能會導致安裝失敗,如果之前安裝過,可以嘗試直接yum isntall -y docker
1.更新軟件源第一個命令
yum update遇到他輸入y,然后回車,看到下面信息表示更新成功:
第二個命令
yum install?-y yum-utils device-mapper-persistent-data?lvm22.添加docker穩定版本的yum軟件源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo3.再次更新yum源,并安裝docker
yum update yum install?-y docker-ce看到這個頁面,標識docker已經安裝成功了。
4.安裝完成之后啟動docker
systemctl start?docker5.重啟
systemctl?restart docker6.停止
systemctl stop?docker7.開機自啟動
systemctl enable?docker8.查看docker的狀態
systemctl?status docker通過腳本安裝
除了上面的yum安裝,還可以采用shell腳本安裝,安裝流程如下:
curl -fsSL https://get.docker.com/ | sh或者
wget -qO- https://get.docker.com/ | sh拉取jdk很簡單,直接執行一行代碼即可,我這里拉取的時java 8的版本。
docker pull java:8拉取完成之后執行:
docker?images如果出現下面內容,表示拉取成功
1.新建項目
引入sprint-boot-web的依賴
新建完成之后的項目結構
2.引入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>3.新建docker文件在main目錄下新建docker目錄,然后在docker目錄下創建dockerfile文件,不需要后綴名。
創建完成之后的工程目錄如下:
4.編輯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是我剛剛拉取的鏡像,運行的基礎。VOLUME:指向的一個臨時文件,用于存儲tomcat工作。ADD:復制文件并且重命名文件。ENTRYPOINT:初始化配置或者自定義配置。
5.創建測試接口
TestController內容如下:
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目錄下創建log4j2.xml文件主要看這兩個參數:
這里我使用了log4j2的日志,如何配置log4j2的日志,請參考 springboot整合Log4j2(將日志輸出到指定文件)。
6.編寫application.yml配置文件
server:port: 9999到這里springboot項目就創建完成了,我們現在啟動一下項目。
. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: 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項目沒有問題,現在我們將項目拷貝到服務器中。
我現在已經將項目拷貝到服務器中,我們現在需要將它打包到docker中,借助maven實現打包,如果還沒有安裝maven的,請先安裝maven,切換到項目的根目錄
執行
mvn clean package?docker:build執行完之后將會看到
表示打包成功。
執行
docker?images我們發現docker的鏡像中多了一個springboot/spring-boot-docker,沒錯,這個就是我們的springboot項目,既然鏡像已經生成,那么如何使用這個鏡像呢?
執行
docker run --name springbooot-docker -p 9999:9999 -d 4a2run:運行的意思–name:指定鏡像啟動的之后的名稱-p:容器和外部的端口映射 第一個端口:外部 第二個端口:內部-d:后臺運行 -t:實時運行,窗口關閉,程序結束。4a2:表示鏡像的id(IMAGE ID)前3位,這里的id并不需要輸入全稱,只需要輸入前幾個就行,有一個前提:當有很多鏡像的時候,前面幾個字符就有可能會相同,這個時候就需要多輸入幾位,直到不相同位置。
啟動了鏡像之后我怎么知道有沒有成功呢?這個時候我們就需要一個命令來查看已經啟動的任務
docker ps我們發現這里已經出現了我們之前啟動的鏡像,所以這基本上代表啟動成功了,為了驗證是否啟動成功,我們在瀏覽器輸入測試的接口:ip:9999/test
這說明我們已經springboot項目已經啟動成功了,到這里docker部署springboot項目差不就結束了,但是你可能還有一個疑問,如果我想看控制臺的日志怎么辦呢?像我們一般使用java -jar的時候都會生成一個控制臺的日志文件,那docker容器中怎么查看控制臺日志呢?其實很簡單,只需要一行命令即可
docker ps找到容器的id
然后執行
docker logs -f這個時候我們就能看到控制臺的日志了,如何我們想看log4j2輸出的文件日志呢?
還記得我們在log4j2中配置了日志的輸出目錄了嗎?
沒錯,就是這個, 我們切換到這個目下
發現這里生成了三個文件,我們打開info.log
tail?-100f info.log我們發現并沒有輸入我們打印的:“這是輸出到文件的日志”,難道是我們配置錯了問題?不是的,是因為我們找錯了位置,真正的文件日志在容器內部,所以我們需要先進入容器內部
docker exec?-it ca2cd59fff9b /bin/bashca2cd59fff9b:容器id
然后再切換到我們日志的輸出路徑
cd?work/spring-boot-docker這里也找到了三個日志文件,我們打印info.log
tail?-100f info.log這就是我們log4j2輸出到文件的日志,到這里docker整合springboot項目就差不多結束了,如果想要退出docker容器可以使用
exit想知道更多?掃描下面的二維碼關注我
后臺回復"技術",加入技術群
【精彩推薦】
超清晰的DNS入門指南
深入理解Java Stream流水線
如何用ELK搭建TB級的日志系統
深度好文:Linux系統內存知識
日志系統新貴Loki,確實比笨重的ELK輕
日志采集系統都用到哪些技術?
面試官:為什么HashMap的加載因子是0.75?
原創|OpenAPI標準規范
Linux系統內存知識總結
深度好文|奈飛微服務架構解析
耗時3天,上億數據如何做到秒級查詢
點個贊+在看,少個 bug?????
總結
以上是生活随笔為你收集整理的Docker 部署不香吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度好文:Netflix奈飞微服务架构设
- 下一篇: 一文讲懂什么是三层交换机、网关、DNS、