使用Docker compose部署SpringBoot項(xiàng)目

我們使用Docker的時(shí)候,定義Dockerfile文件,然后使用docker builddocker run等命令操作容器,對(duì)Docker不熟悉的可以前往查看中文文檔:Docker文檔。然而微服務(wù)架構(gòu)的應(yīng)用系統(tǒng)一般包含若干個(gè)微服務(wù),每個(gè)微服務(wù)一般都會(huì)部署多個(gè)實(shí)例,如果每個(gè)微服務(wù)都要手動(dòng)啟停,那么效率就有點(diǎn)低了。Compose是一個(gè)用于定義和運(yùn)行多容器Docker應(yīng)用程序的工具。使用Compose,您可以使用YAML文件來配置應(yīng)用程序的服務(wù)。然后,使用單個(gè)命令,您可以從配置中創(chuàng)建并啟動(dòng)所有服務(wù)。

compose.jpg


本文將給大家介紹如何通過Compose發(fā)布SpringBoot項(xiàng)目,以及Compose得一些常用知識(shí)

一、Compose概念

  • Docker Compose 將所管理的容器分為三層,分別是工程(project)、服務(wù)(service)、容器(container).
  • Docker Compose運(yùn)行目錄下的所有文件docker-compose.yml組成一個(gè)工程,一個(gè)工程包含多個(gè)服務(wù),每個(gè)服務(wù)中定義了容器運(yùn)行的鏡像、參數(shù)、依賴,一個(gè)服務(wù)可包括多個(gè)容器實(shí)例

二、Compose常用命令

以下命令中出現(xiàn)得[]里得參數(shù)都是可選的

1、ps命令

列出所有運(yùn)行容器
docker-compose ps

2、logs命令

查看容器日志輸出,-f表示查看實(shí)時(shí)日志,容器名表示啟動(dòng)后的容器名,不指定則查看所有啟動(dòng)的容器
docker-compose logs [-f] [容器名]

3、port命令

打印綁定的公共端口,下面命令可以輸出demo1服務(wù)8080端口所綁定的公共端口
docker-compose port demo1 8080

4、build命令

構(gòu)建或者重新構(gòu)建服務(wù)
docker-compose build

5、start命令

啟動(dòng)指定停止的容器, 如下實(shí)例中demo1為一個(gè)容器,如果不指定,則啟動(dòng)所有已存在的
docker-compose start [demo1]

6、stop命令

停止已運(yùn)行的容器,不指定則停止所有的
docker-compose stop [demo1]

7、rm命令

刪除指定容器,必須為已停止的,如果不指定容器名,則刪除所有
docker-compose rm [demo1]

8、up命令

構(gòu)建和啟動(dòng)容器,-d為后臺(tái)運(yùn)行
docker-compose up [-d]

9、kill命令

通過發(fā)送SIGKILL信號(hào)來停止容器,不指定容器名則停止所有啟動(dòng)中的容器
docker-compose kill [demo1]

三、Docker Compose配置文件屬性

1、version

指定docker-compose.yml文件的寫法格式

version:"3"

2、services

多個(gè)容器集合

services:
  demo1:
  demo2:

3、build

配置構(gòu)建時(shí),Compose會(huì)利用它自動(dòng)構(gòu)建鏡像,該值可以是一個(gè)路徑,也可以是一個(gè)對(duì)象,用于指定Dockerfile, .表示Dockerfile所在目錄的鏡像

services:
  demo1:
    build: .

4、command

覆蓋容器啟動(dòng)后默認(rèn)執(zhí)行的命令

command: bundle exec thin -p 3000

5、dns

配置 dns 服務(wù)器,可以是一個(gè)值或列表

dns:
    - 8.8.8.8

6、dns_search

配置DNS搜索域,可以是一個(gè)值或列表

dns_search:
    - www.example.com

7、environment

環(huán)境變量配置,可以用數(shù)組或字典兩種方式

environment:
    - DEBUG=1

8、env_file

從文件中獲取環(huán)境變量,可以指定一個(gè)文件路徑或路徑列表,其優(yōu)先級(jí)低于environment指定的環(huán)境變量

env_file: .env

9、expose

暴露端口,只將端口暴露給連接的服務(wù),而不暴露給主機(jī)

services:
  demo1:
    expose:
      - 8080

10、image

指定服務(wù)所使用的鏡像

image: mysql

11、network_mode

設(shè)置網(wǎng)絡(luò)模式

network_mode: "bridge"

12、ports

對(duì)外暴露的端口定義,和expose對(duì)應(yīng)

# 暴露端口信息  - "宿主機(jī)端口:容器暴露端口"
ports:
  - "8763:8763"
  - "8763:8763"

13、links

將指定容器連接到當(dāng)前連接,可以設(shè)置別名,避免ip方式導(dǎo)致的容器重啟動(dòng)態(tài)改變的無法連接情況

services:
  demo1:
    # 服務(wù)名:別名
    links:
      - demo2:test

14、volumes

卷掛載路徑

volumes:
  #  宿主機(jī):容器
  - /srv

更多命令或者配置屬性,可以參考DockerCompose官方文檔:Compose command

四、發(fā)布SpringBoot項(xiàng)目

1、導(dǎo)入依賴

<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
#設(shè)置鏡像的時(shí)區(qū),避免出現(xiàn)8小時(shí)的誤差
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:
    # 指定啟動(dòng)后的容器名
    container_name: demo2
    build: ./demo2/ .
    ports:
      - "8081:8081"

4、編寫一個(gè)接口,用于啟動(dòng)后測(cè)試

/**
 * @author Gjing
 **/
@RestController
public class DemoController {

    @PostMapping("/test")
    public String test() {
        return "ok";
    }
}

5、啟動(dòng)類使用@EnableSwagger注解

6、配置文件

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

7、將項(xiàng)目打包后,命令行使用docker-compose up進(jìn)行構(gòu)建并運(yùn)行鏡像,最終效果如下:

1.jpg

8、瀏覽器訪問swagger

2.jpg

本文到此就結(jié)束啦,文章中只簡(jiǎn)單的描述了如何發(fā)布一個(gè)SpringBoot服務(wù),更多用法大家可以前往官網(wǎng)進(jìn)行學(xué)習(xí),本項(xiàng)目Demo代碼地址:Docker-Demo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容