1 概述
本文講述了如何使用
Docker
部署
Spring Boot
應用,首先介紹了
Docker
的安裝過程,接着介紹了
Docker
的一些基礎知識,最後講述了
Dockerfile
的編寫以及部署過程。
2 環境
-
Docker 20.10.14
3 Docker
安裝
Docker
由于大部分的教程都是針對
x86
架構的伺服器的,這裡筆者的伺服器為
aarch64
架構,是以記錄一下
Docker
的安裝過程。
Docker
安裝方法主要有兩種,一種是通過官網的腳本自動安裝,一種是通過
yum
手動安裝。
3.1 自動安裝
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
或
預設安裝的是最新版本的,
x86
的一般都可以,但如果出現像筆者這樣的錯誤:
表明
containerd.io
的版本過低,使用
yum install containerd.io
安裝的話:
可以看到是
1.2.0
版本,并不符合安裝的最低要求,解決這種問題有兩個辦法:
- 手動下載下傳
包安裝rpm
- 安裝沒那麼新版本的
Docker
是以采用手動安裝的方法,這裡選擇的是第一種方法,手動下載下傳
rpm
包進行安裝。
3.2 手動安裝
3.2.1 下載下傳 rpm
包
rpm
可以戳這裡下載下傳
rpm
包:
選擇好版本即可,筆者選擇的是:
-
containerd.io-1.2.13-3.2.el7.aarch64.rpm
-
docker-ce-19.03.9-3.el7.aarch64.rpm
-
docker-ce-cli-19.03.9-3.el7.aarch64.rpm
3.2.2 安裝
上傳到伺服器後,安裝即可:
yum install \
containerd.io-1.2.13-3.2.el7.aarch64.rpm \
docker-ce-19.03.9-3.el7.aarch64.rpm \
docker-ce-cli-19.03.9-3.el7.aarch64.rpm \
-y
3.3 測試
先開啟服務:
版本檢視:
docker version
運作
Hello World
:
docker run hello-world
4 打包
建立一個
Demo
工程,增加一個
Controller
:
@RestController
public class TestController {
@GetMapping("/test")
public String test() {
return "success";
}
}
接着使用
Maven
/
Gradle
打成
JAR
包:
5 Dockerfile
Dockerfile
5.1 關于 Dockerfile
Dockerfile
Dockerfile
是一個用于組合鏡像的文本檔案,
Docker
通過讀取
Dockerfile
的内容自動生成鏡像,一般分為四部分:
- 基礎鏡像資訊
- 維護者資訊
- 鏡像操作指令
- 容器啟動指令
更多的内容請參考其他部落格或者官網,下面給出一個
Demo
。
5.2 Dockerfile
示例
Dockerfile
本
Demo
采用的
Dockerfile
如下:
FROM adoptopenjdk/openjdk11:aarch64-centos-jdk-11.0.8_10
MAINTAINER XXXXX <[email protected]>
VOLUME /tmp
EXPOSE 8080
ADD demo.jar demo.jar
ENTRYPOINT ["java","-jar","demo.jar"]
下面逐行進行詳細說明。
5.2.1 指定基礎鏡像
FROM adoptopenjdk/openjdk11:aarch64-centos-jdk-11.0.8_10
該指令指定基礎鏡像,
adopt
的
aarch64
架構的
JDK11
,注意如果伺服器架構為
x86
需要對應修改,具體可以戳這裡檢視:
5.2.2 維護者
該指令指定了維護者的資訊,可以隻寫名字或者隻寫郵箱,組合的話需要加上
<>
。
5.2.3 持久化目錄
VOLUME /tmp
該指令指定了持久化目錄,準确來說,
volume
是
卷
的意思,這是指定
卷
的位置,一般來說如果需要資料持久化則需要資料卷。
5.2.4 暴露端口
該指令暴露的是
8080
端口,因為
Spring Boot
應用預設運作在
8080
上,如果修改了
application.yaml
或者
application.properties
請對應修改端口。
5.2.5 添加指令
ADD demo.jar demo.jar
将本地檔案添加到容器中,
tar
類型檔案會自動解壓,這裡是将
demo.jar
添加
5.2.6 運作容器
該指令用于配置容器的運作指令。
6 制作鏡像
6.1 基本操作
先說一下容器的基本操作:
-
:建立一個新容器并運作docker run
-
:啟動/停止/重新開機容器docker start/stop/restart
-
:删除容器docker rm
-
:建立容器但不啟動docker create
-
:列出容器docker ps
鏡像基本操作:
-
:建立鏡像docker build
-
:删除鏡像docker rmi
-
:列出鏡像docker images
這裡簡單說一下鏡像和容器的差別:
- 鏡像相當于一個模闆,可以從一個鏡像建立出多個容器
- 用面向對象的思想比如,就是,鏡像相當于一個類,而容器相當于一個類執行個體,也就是對象
知道了一些基礎指令後就可以來制作鏡像了。
6.2 建立鏡像
上傳
Dockerfile
以及
JAR
包,建立一個目錄把
JAR
以及
Dockerfile
放在同一個檔案夾下,并進入該檔案夾,接着建立鏡像:
建立完成後可以檢視鏡像:
docker images
6.3 運作
docker run -d -p 8888:8080 demo
該指令表示從鏡像
demo
建立一個容器并運作,将
8080
端口映射到
8888
端口上,主要防火牆需要開啟
8888
端口,伺服器記得配置安全組。
6.4 測試
直接輸入
ip:端口/test
即可通路:
7 源碼
Java
版:
- Github
- 碼雲
- GitCode
Kotlin
版:
- Github
- 碼雲
- GitCode