天天看點

使用Docker compose釋出SpringBoot項目

我們使用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注解

6、配置檔案

server:
  port: 8081
spring:
  application:
    name: demo2
swagger:
  base-package: com.gj.web.api           

7、将項目打包後,指令行使用

docker-compose up

進行建構并運作鏡像,最終效果如下:

使用Docker compose釋出SpringBoot項目

8、浏覽器通路swagger

使用Docker compose釋出SpringBoot項目

本文到此就結束啦,文章中隻簡單的描述了如何釋出一個SpringBoot服務,更多用法大家可以前往官網進行學習,本項目Demo代碼位址:

Docker-Demo