本文使用Docker部署Spring Boot專案。部署之前需要環境中已經安裝Docker和Maven(用於打包),所以本文先進行安裝Docker和Maven;接著搭建一個Spring Boot專案,使其支援Docker部署;最後進行部署和測試。
環境搭建
安裝Docker
檢查系統核心版本
Docker執行在CentOS 7上,要求作業系統為64位,核心版本為3.10及以上。
確認本機已經安裝了滿足要求的Linux核心。使用命令uname -r
來檢查核心版本資訊。
[root@localhost ~]# uname -r
3.10.0-957.el7.x86_64
在CentOS 7中安裝Docker
使用命令yum install -y docker
安裝Docker,“-y”表示不詢問,使用預設配置進行安裝。
啟動Docker服務,並設定為開機自啟動
使用下列命令:
systemctl start docker.service
systemctl enable docker.service
檢視版本資訊
輸入docker version
,返回版本資訊表明Docker安裝成功。
[root@localhost ~]# docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
Go version: go1.10.3
Git commit: b2f74b2/1.13.1
Built: Wed May 1 14:55:20 2019
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
Go version: go1.10.3
Git commit: b2f74b2/1.13.1
Built: Wed May 1 14:55:20 2019
OS/Arch: linux/amd64
Experimental: false
安裝Maven和配置阿里雲映象
下載Maven
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
解壓和移動
tar vxf apache-maven-3.5.4-bin.tar.gz
mv apache-maven-3.5.4 /usr/local/maven3
配置環境變數
開啟環境變數vim /etc/profile
,新增如下內容:
MAVEN_HOME=/usr/local/maven3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
儲存並退出::wq
重新整理環境變數的配置使其生效:source /etc/profile
檢視版本資訊
使用命令mvn -v
進行檢視
[root@localhost ~]# mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /usr/local/maven3
Java version: 1.8.0_211, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8.0_211/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
使用mvn package
命令進行打包,卻報錯,提示連線被拒絕。
解決辦法:給Maven配置阿里雲映象
切換到maven安裝目錄下面,開啟settings.xml檔案,在<mirrors>
標籤裡面新增:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
Spring Boot專案新增Docker支援
新建Spring Boot工程
新建一個Spring Boot專案,新增一個簡單的DockerController,方便進行測試。
@RestController
@SpringBootApplication
@RequestMapping("/docker")
public class DockerController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "Hello Docker";
}
}
新增Docker支援
在 pom.xml中新增Docker映象名稱
<properties>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
新增 Docker外掛:
<!-- docker外掛 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
編寫Dockerfile檔案
在目錄src/main/docker下建立Dockerfile 檔案,Dockerfile 檔案用來說明如何來構建映象。
FROM java:8
VOLUME /tmp
ADD docker-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
FROM指令指定一個已經存在的映象,告訴Docker後續的指令都是在這個基礎上進行的。例如:FROM java:8
表示使用 Jdk1.8 環境為基礎映象進行構建映象。
VOLUME ,VOLUME 指向了一個/tmp的目錄,由於Spring Boot使用內建的Tomcat容器,Tomcat 預設使用/tmp作為工作目錄。這個命令的效果是:在宿主機的/var/lib/docker目錄下建立一個臨時檔案並把它連結到容器中的/tmp目錄
ADD ,拷貝檔案並且重新命名
ENTRYPOINT,為了縮短Tomcat 的啟動時間,新增java.security.egd的系統屬性指向/dev/urandom作為ENTRYPOINT。
部署Spring Boot工程
將工程程式碼 docker 拷貝伺服器中,進入專案路徑下進行打包測試。
打包:mvn package
執行:java -jar target/spring-boot-docker-1.0.jar
專案啟動成功,說明環境配置沒有問題,接下來可以使用Dockerfile構建映象。
構建Docker映象mvn package docker:build
。可以看到docker映象構建成功,仔細看日誌,會發現四個步驟和Dockerfile中的指令是一一對應的。
使用docker images
命令檢視構建好的映象:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
springboot/docker latest 39aabeebb971 5 days ago 660 MB
執行docker映象:docker run -p 8080:8080 -t springboot/docker
在本機瀏覽器進行訪問,可以看到返回結果,說明部署成功。
完整程式碼:GitHub地址