#IT明星不是夢#【1鍵部署神功】docker-compose一鍵部署Web服務

Docker是一個開源的應用容器引擎,將應用以及依賴打包到一個可移植的鏡像中,部署到服務器並運行在container容器實例中。
java


資源編排Docker-compose定義和運行多個容器組成的應用系統,經過docker-compose.yml文件聲明各個服務,做爲一個總體來完成應用的建立和啓動。node


Swarm是Docker官方提供的集羣管理工具,將Docker節點統一管理組織,以service服務爲調度單元,支持動態擴容等特性。mysql


阿里雲容器鏡像服務提供Docker鏡像倉庫託管,配置項目代碼Git倉庫和構建規則,輕鬆實現Docker鏡像自動構建系統。git


Jext技術社區開源Web服務腳手架,從實際項目中整理昇華,針對多種業務場景擴展開發。系統部署流程和自動構建系統以下圖:github

image.png

內容目錄:web

1. 系統架構redis

2. docker-compose一鍵部署開發環境sql

3. Dockerfile配置docker

4. 阿里雲+Git+Docker鏡像自動構建系統數據庫

5. docker-comose一鍵部署Web服務

6. Swarm集羣部署Web服務

7. Docker容器編排、鏡像服務和Git代碼託管雲服務的選擇


一,系統架構

代碼下載

https://github.com/jextop/StarterDeploy

https://github.com/jextop/StarterApi/

Https://github.com/jextop/StarterAdmin

功能模塊

Web服務腳手架基於SpringBoot開發,先後端動靜分離架構,提供REST接口和WebAdmin管理後臺,分佈式異步任務調度,集成緩存、消息隊列、ELK日誌處理和服務監控系統,採用Docker容器部署,支持集羣擴展,可知足多種業務場景的擴展定製開發。

image.png

WebAdmin管理後臺

技術棧:JavaScript, Umi, React, AntDesign Pro

API接口服務

技術棧:Java, SpringBoot, Flyway, MySQL, MyBatis, Redis, ActiveMQ, Quartz

業務處理服務

從中臺接收業務請求,異步處理業務邏輯,處理結束後發送通知消息。

技術棧:Python,Django,Celery, Redis, ActiveMQ

時序圖

image.png

二,docker-compose一鍵部署開發環境

開發運行環境

image.pngimage.png

配置文件和輔助腳本:StarterApi

├── docker-compose.yml

├── pull.sh

├── up.sh

├── logs.sh

├── down.sh


docker-compose.yml配置開發環境的容器實例:數據庫、緩存、消息隊列、ELK日誌和服務監控系統

db_admin須要鏈接MySQL,logstash和kibana須要鏈接elasticsearch,因此設置了depends_on屬性。

logstash和kibana在基礎鏡像上增長配置文件,生成鏡像託管在阿里雲:

https://github.com/rickding/HelloDocker/tree/master/logstash

https://github.com/rickding/HelloDocker/tree/master/kibana

version: '3'
services:
    db:
        hostname: db
        image: mysql:5
        command: --default-authentication-plugin=mysql_native_password
        ports:
            - 3306:3306
        environment:
            MYSQL_DATABASE: starter
            MYSQL_ROOT_PASSWORD: root

    db_admin:
        image: adminer:latest
        ports:
            - 3006:8080
        depends_on:
            - db

    cache:
        hostname: cache
        image: redis:4
        command: redis-server --appendonly yes
        ports:
            - 6379:6379

    mq:
        hostname: mq
        image: webcenter/activemq:latest
        ports:
            - 61616:61616
            - 8161:8161

    elasticsearch:
        hostname: elasticsearch
        image: elasticsearch:latest
        ports:
            - 9200:9200
            - 9300:9300

    log:
        hostname: log
        image: registry.cn-shanghai.aliyuncs.com/hellodock/logstash:latest
        ports:
            - 9600:9600
            - 9601:9601
        depends_on:
            - elasticsearch

    kibana:
        image: registry.cn-shanghai.aliyuncs.com/hellodock/kibana:latest
        ports:
            - 5601:5601
        depends_on:
            - elasticsearch

運行./pull.sh拉取鏡像

可直接運行docker pull mysql:5拉取鏡像,運行docker images查看已下載鏡像:

image.png

運行./up.sh啓動容器

腳本中封裝了docker-compose up -d命令,啓動後運行docker ps查看容器實例:

image.png

運行./logs.sh查看日誌

定製命令突出顯示重要信息:

docker-compose logs -ft | grep --color -i -e error -e warn -e version -e exception

image.png

運行./down.sh中止服務

docker-compose down --remove-orphans中止並刪除容器:

image.png

查看服務

使用docker-compose一鍵部署開發環境MySQL+Redis+ActiveMQ+ELK,就是這麼簡單任性。

db_admin

image.pngimage.png

ActiveMQ

image.png

elasticsearch

image.png

logstsh

image.png

kibana

image.png


三,Dockerfile配置是構建Docker鏡像的核心

Dockerfile鏡像描述文件,包含了一條條的指令,每一條指令構建一層,所以每一條指令的內容,就是描述該層應當如何構建。Dockerfile基本結構:

- 基礎鏡像

- 維護者信息

- 鏡像構建指令

- 容器啓動時執行指令

FROM openjdk:8

LABEL maintainer="Jext Community, https://github.com/jextop"

# copy files
COPY ./deploy/ /deploy
WORKDIR /deploy

# do sth
CMD ["sh", "launch.sh"]

EXPOSE 8011


構建API服務Docker鏡像:StarterApi

├── Dockerfile

├── Dockerfile_ce

image.png

- Dockerfile_ce,稱爲社區版,依賴本地開發環境,將編譯好的項目運行文件打包進Docker鏡像,多用於本地開發測試。

- Dockerfile,從拉取源代碼開始,編譯生成項目運行文件,打包進Docker鏡像,而後發佈部署。Docker鏡像自動構建系統基於Dockerfile全量構建。


問答:

Dockerfile_ce和Dockerfile有什麼區別?

構建鏡像使用的項目運行文件來源不一樣。Dockerfile_ce多用於開發測試,打包使用本地開發環境編譯生成的運行文件。Dockerfile從源代碼編譯出項目運行文件,不依賴本地環境,每每構建速度較慢,用於發佈部署。


Dockerfile中爲何使用RUN sh mvnw package?mvnw和mvn的區別是什麼?

解決Maven版本和插件兼容性問題mvnw全名MavenWrapper,是一個第三方提供的Maven插件,爲SpringBoot項目提供一個獨立的且指定版本的Maven,不影響全局版本和其餘項目,在生成SpringBoot項目時已經自動安裝。


SpringBoot項目下有兩個文件mvnw和mvnw.cmd,還有一個.mvn目錄下面有三個文件。

Spring-boot-project

├── .mvn

│   └── wrapper

│       ├── maven-wrapper.jar

│       └── maven-wrapper.properties

│       ├── MavenWrapperDownloader.java

├── mvnw

├── mvnw.cmd


四,阿里雲+Git+Docker鏡像自動構建系統

阿里雲容器鏡像服務提供Docker鏡像倉庫託管,配置項目代碼Git倉庫和構建規則,結合Dockerfile實現雲端編譯打包,再也不須要經常使用的Jenkins構建服務器。

master分支增長一個latest構建規則,依次配置選項:

- 類型:選擇Branch

- 分支:選擇master

- Dockerfile目錄:/

- Dockerfile文件名:Dockerfile

- 鏡像版本:latest


配置完成後,當有代碼提交到Git倉庫時,將自動觸發構建。點擊規則的」當即構建「能夠手動觸發,點擊構建列表的」日誌「查看過程信息。

image.png

五,docker-comose一鍵部署Web服務

API接口服務Docker鏡像成功成功後,配置信息到docker-compose.yml中:

代碼庫StarterDeploy

├── docker-compose.yml

├── up.sh

├── logs.sh

# 省略文件中運行環境的容器配置,如下是自動構建系統生成的API服務Docker鏡像
api:
    hostname: api
    image: registry.cn-shanghai.aliyuncs.com/jext/starter_api:latest
    ports:
        - 8011:8011
    depends_on:
        - db
        - cache
        - mq
        - log


運行./up.sh部署任務,而後運行./logs.sh可看到SpringBoot開發的接口服務啓動信息:

image.png

訪問http://localhost:8011/chk看到服務自檢信息:

image.png 

六,Swarm集羣部署Web服務

代碼庫:StarterDeploy

├── docker-compose.yml

├── deploy.sh

├── rm.sh

docker-compose.yml增長deploy屬性,replicas指定副本數量,placement指定docker節點:

deploy:
    replicas: 1
     placement:
         constraints: [node.labels.group == api]

啓動Swarm加入節點構建集羣,首個節點自動成爲管理員:docker swarm init

部署Web服務:執行腳本./deploy.sh或命令:docker stack deploy -c docker-compose.yml starter

image.png

查看Stack和服務:docker stack ls && docker service ls

image.png

中止刪除服務:執行腳本./rm.sh或命令:docker stack rm starter

image.png 

七,Docker容器編排、鏡像服務和Git代碼託管雲服務的選擇

搭建系統選擇雲服務時,重點關注系統部署運維、自動構建以及代碼管理的集成效率和穩定性,比較了幾大雲服務商,信息整理出來分享,排名不分前後。信息更新日期2020年1月16日。


容器服務(資源編排)

鏡像服務

代碼託管

阿里雲

收取使用的計算資源費用

公測,免費,http://cr.console.aliyun.com/

每一個用戶可創建50個代碼庫,單庫容量2G

https://code.aliyun.com/

華爲雲

收費,購買套餐。

免費,

https://cn-east-3-console.huaweicloud.com/swr

0.11元/用戶/小時,0.000442元/GB/小時

https://console.huaweicloud.com/devcloud/?region=cn-east-3#/codehub/list

騰訊雲

收取使用的計算資源費用

內測,需申請,

https://cloud.tencent.com/product/tcr/

官網:預計20年1月開始收費,1元/人/天

https://console.cloud.tencent.com/coding

相關文章
相關標籤/搜索