我們使用Docker的時候,定義Dockerfile檔案,然後使用 docker build docker run
、
等指令操作容器,對Docker不熟悉的可以前往檢視中文文檔: Docker文檔 。然而微服務架構的應用系統一般包含若幹個微服務,每個微服務一般都會部署多個執行個體,如果每個微服務都要手動啟停,那麼效率就有點低了。Compose是一個用于定義和運作多容器Docker應用程式的工具。使用Compose,您可以使用YAML檔案來配置應用程式的服務。然後,使用單個指令,您可以從配置中建立并啟動所有服務。
使用Docker compose釋出SpringBoot項目

本文将給大家介紹如何通過Compose釋出SpringBoot項目,以及Compose得一些常用知識
一、Compose概念
- Docker Compose 将所管理的容器分為三層,分别是
工程(project)
服務(service)
.容器(container)
- Docker Compose運作目錄下的所有檔案
組成一個工程,一個工程包含多個服務,每個服務中定義了容器運作的鏡像、參數、依賴,一個服務可包括多個容器執行個體docker-compose.yml
二、Compose常用指令
以下指令中出現得
[]
裡得參數都是可選的
1、ps指令
列出所有運作容器
docker-compose ps
2、logs指令
檢視容器日志輸出,
-f
表示檢視實時日志,容器名表示啟動後的容器名,不指定則檢視所有啟動的容器
docker-compose logs [-f] [容器名]
3、port指令
列印綁定的公共端口,下面指令可以輸出demo1服務8080端口所綁定的公共端口
docker-compose port demo1 8080
4、build指令
建構或者重新建構服務
docker-compose build
5、start指令
啟動指定停止的容器, 如下執行個體中
demo1
為一個容器,如果不指定,則啟動所有已存在的
docker-compose start [demo1]
6、stop指令
停止已運作的容器,不指定則停止所有的
docker-compose stop [demo1]
7、rm指令
删除指定容器,必須為已停止的,如果不指定容器名,則删除所有
docker-compose rm [demo1]
8、up指令
建構和啟動容器,
-d
為背景運作
docker-compose up [-d]
9、kill指令
通過發送
SIGKILL
信号來停止容器,不指定容器名則停止所有啟動中的容器
docker-compose kill [demo1]
三、Docker Compose配置檔案屬性
1、version
指定docker-compose.yml檔案的寫法格式
version:"3"
2、services
多個容器集合
services:
demo1:
demo2:
3、build
配置建構時,Compose會利用它自動建構鏡像,該值可以是一個路徑,也可以是一個對象,用于指定Dockerfile,
.
表示Dockerfile所在目錄的鏡像
services:
demo1:
build: .
4、command
覆寫容器啟動後預設執行的指令
command: bundle exec thin -p 3000
5、dns
配置 dns 伺服器,可以是一個值或清單
dns:
- 8.8.8.8
6、dns_search
配置DNS搜尋域,可以是一個值或清單
dns_search:
- www.example.com
7、environment
環境變量配置,可以用數組或字典兩種方式
environment:
- DEBUG=1
8、env_file
從檔案中擷取環境變量,可以指定一個檔案路徑或路徑清單,其
優先級低于environment
指定的環境變量
env_file: .env
9、expose
暴露端口,隻将端口暴露給連接配接的服務,而不暴露給主機
services:
demo1:
expose:
- 8080
10、image
指定服務所使用的鏡像
image: mysql
11、network_mode
設定網絡模式
network_mode: "bridge"
12、ports
對外暴露的端口定義,和expose對應
# 暴露端口資訊 - "主控端端口:容器暴露端口"
ports:
- "8763:8763"
- "8763:8763"
13、links
将指定容器連接配接到目前連接配接,可以設定别名,避免ip方式導緻的容器重新開機動态改變的無法連接配接情況
services:
demo1:
# 服務名:别名
links:
- demo2:test
14、volumes
卷挂載路徑
volumes:
# 主控端:容器
- /srv
更多指令或者配置屬性,可以參考DockerCompose官方文檔:
Compose command四、釋出SpringBoot項目
1、導入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>cn.gjing</groupId>
<artifactId>tools-starter-swagger</artifactId>
<version>1.0.9</version>
</dependency>
2、編寫Dockerfile
FROM hub.c.163.com/library/java:8-alpine
WORKDIR /demo
COPY target/demo1-0.0.1-SNAPSHOT.jar demo1.jar
#設定鏡像的時區,避免出現8小時的誤差
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
EXPOSE 8080
ENTRYPOINT ["java","-Xms256m","-Xmx512m","-jar","demo1.jar"]
3、編寫docker-compose.yml檔案
version: "3"
services:
demo2:
# 指定啟動後的容器名
container_name: demo2
build: ./demo2/ .
ports:
- "8081:8081"
4、編寫一個接口,用于啟動後測試
/**
* @author Gjing
**/
@RestController
public class DemoController {
@PostMapping("/test")
public String test() {
return "ok";
}
}
5、啟動類使用 @EnableSwagger注解
@EnableSwagger注解
6、配置檔案
server:
port: 8081
spring:
application:
name: demo2
swagger:
base-package: com.gj.web.api
7、将項目打包後,指令行使用 docker-compose up
進行建構并運作鏡像,最終效果如下:
docker-compose up
8、浏覽器通路swagger
使用Docker compose釋出SpringBoot項目
本文到此就結束啦,文章中隻簡單的描述了如何釋出一個SpringBoot服務,更多用法大家可以前往官網進行學習,本項目Demo代碼位址:
Docker-Demo