溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

#IT明星不是夢#【1鍵部署神功】docker-compos

發(fā)布時間:2020-03-04 03:34:15 來源:網(wǎng)絡 閱讀:2642 作者:wx5b3c0a4298f7b 欄目:云計算

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


資源編排Docker-compose定義和運行多個容器組成的應用系統(tǒng),通過docker-compose.yml文件聲明各個服務,作為一個整體來完成應用的創(chuàng)建和啟動。


Swarm是Docker官方提供的集群管理工具,將Docker節(jié)點統(tǒng)一管理組織,以service服務為調(diào)度單元,支持動態(tài)擴容等特性。


阿里云容器鏡像服務提供Docker鏡像倉庫托管,配置項目代碼Git倉庫和構(gòu)建規(guī)則,輕松實現(xiàn)Docker鏡像自動構(gòu)建系統(tǒng)。


Jext技術(shù)社區(qū)開源Web服務腳手架,從實際項目中整理升華,針對多種業(yè)務場景擴展開發(fā)。系統(tǒng)部署流程和自動構(gòu)建系統(tǒng)如下圖:

#IT明星不是夢#【1鍵部署神功】docker-compos

內(nèi)容目錄:

1.?系統(tǒng)架構(gòu)

2.?docker-compose一鍵部署開發(fā)環(huán)境

3.?Dockerfile配置

4.?阿里云+Git+Docker鏡像自動構(gòu)建系統(tǒng)

5.?docker-compose一鍵部署Web服務

6.?Swarm集群部署Web服務

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


一,系統(tǒng)架構(gòu)

l?代碼下載

https://github.com/jextop/StarterDeploy

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

Https://github.com/jextop/StarterAdmin

l?功能模塊

Web服務腳手架基于SpringBoot開發(fā),前后端動靜分離架構(gòu),提供REST接口和WebAdmin管理后臺,分布式異步任務調(diào)度,集成緩存、消息隊列、ELK日志處理和服務監(jiān)控系統(tǒng),采用Docker容器部署,支持集群擴展,可滿足多種業(yè)務場景的擴展定制開發(fā)。

#IT明星不是夢#【1鍵部署神功】docker-compos

n?WebAdmin管理后臺

技術(shù)棧:JavaScript, Umi, React, AntDesign Pro

n?API接口服務

技術(shù)棧:Java, SpringBoot, Flyway, MySQL, MyBatis, Redis, ActiveMQ, Quartz

n?業(yè)務處理服務

從中臺接收業(yè)務請求,異步處理業(yè)務邏輯,處理結(jié)束后發(fā)送通知消息。

技術(shù)棧:Python,Django,Celery, Redis, ActiveMQ

l?時序圖

#IT明星不是夢#【1鍵部署神功】docker-compos

二,docker-compose一鍵部署開發(fā)環(huán)境

l?開發(fā)運行環(huán)境

#IT明星不是夢#【1鍵部署神功】docker-compos#IT明星不是夢#【1鍵部署神功】docker-compos

l?配置文件和輔助腳本:StarterApi

├── docker-compose.yml

├── pull.sh

├── up.sh

├── logs.sh

├── down.sh


l?docker-compose.yml配置開發(fā)環(huán)境的容器實例:數(shù)據(jù)庫、緩存、消息隊列、ELK日志和服務監(jiān)控系統(tǒng)。

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

l?運行./pull.sh拉取鏡像

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

#IT明星不是夢#【1鍵部署神功】docker-compos

l?運行./up.sh啟動容器

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

#IT明星不是夢#【1鍵部署神功】docker-compos

l?運行./logs.sh查看日志

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

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

#IT明星不是夢#【1鍵部署神功】docker-compos

l?運行./down.sh停止服務

docker-compose down --remove-orphans停止并刪除容器:

#IT明星不是夢#【1鍵部署神功】docker-compos

l?查看服務

使用docker-compose一鍵部署開發(fā)環(huán)境MySQL+Redis+ActiveMQ+ELK,就是這么簡單任性。

db_admin

#IT明星不是夢#【1鍵部署神功】docker-compos#IT明星不是夢#【1鍵部署神功】docker-compos

ActiveMQ

#IT明星不是夢#【1鍵部署神功】docker-compos

elasticsearch

#IT明星不是夢#【1鍵部署神功】docker-compos

logstsh

#IT明星不是夢#【1鍵部署神功】docker-compos

kibana

#IT明星不是夢#【1鍵部署神功】docker-compos


三,Dockerfile配置是構(gòu)建Docker鏡像的核心

Dockerfile鏡像描述文件,包含了一條條的指令,每一條指令構(gòu)建一層,因此每一條指令的內(nèi)容,就是描述該層應當如何構(gòu)建。Dockerfile基本結(jié)構(gòu):

- 基礎鏡像

- 維護者信息

- 鏡像構(gòu)建指令

- 容器啟動時執(zhí)行指令

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


構(gòu)建API服務Docker鏡像:StarterApi

├── Dockerfile

├── Dockerfile_ce

#IT明星不是夢#【1鍵部署神功】docker-compos

- Dockerfile_ce,稱為社區(qū)版,依賴本地開發(fā)環(huán)境,將編譯好的項目運行文件打包進Docker鏡像,多用于本地開發(fā)測試。

- Dockerfile,從拉取源代碼開始,編譯生成項目運行文件,打包進Docker鏡像,然后發(fā)布部署。Docker鏡像自動構(gòu)建系統(tǒng)基于Dockerfile全量構(gòu)建。


問答:

l?Dockerfile_ce和Dockerfile有什么區(qū)別?

構(gòu)建鏡像使用的項目運行文件來源不同。Dockerfile_ce多用于開發(fā)測試,打包使用本地開發(fā)環(huán)境編譯生成的運行文件。Dockerfile從源代碼編譯出項目運行文件,不依賴本地環(huán)境,往往構(gòu)建速度較慢,用于發(fā)布部署。


l?Dockerfile中為什么使用RUN sh mvnw package?mvnw和mvn的區(qū)別是什么?

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


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

Spring-boot-project

├── .mvn

│ ??└── wrapper

│ ??????├── maven-wrapper.jar

│ ??????└── maven-wrapper.properties

│ ??????├── MavenWrapperDownloader.java

├── mvnw

├── mvnw.cmd


四,阿里云+Git+Docker鏡像自動構(gòu)建系統(tǒng)

阿里云容器鏡像服務提供Docker鏡像倉庫托管,配置項目代碼Git倉庫和構(gòu)建規(guī)則,結(jié)合Dockerfile實現(xiàn)云端編譯打包,不再需要常用的Jenkins構(gòu)建服務器。

master分支增加一個latest構(gòu)建規(guī)則,依次配置選項:

- 類型:選擇Branch

- 分支:選擇master

- Dockerfile目錄:/

- Dockerfile文件名:Dockerfile

- 鏡像版本:latest


配置完成后,當有代碼提交到Git倉庫時,將自動觸發(fā)構(gòu)建。點擊規(guī)則的”立即構(gòu)建“可以手動觸發(fā),點擊構(gòu)建列表的”日志“查看過程信息。

#IT明星不是夢#【1鍵部署神功】docker-compos

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

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

代碼庫StarterDeploy

├── docker-compose.yml

├── up.sh

├── logs.sh

# 省略文件中運行環(huán)境的容器配置,以下是自動構(gòu)建系統(tǒng)生成的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開發(fā)的接口服務啟動信息:

#IT明星不是夢#【1鍵部署神功】docker-compos

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

#IT明星不是夢#【1鍵部署神功】docker-compos?

六,Swarm集群部署Web服務

代碼庫:StarterDeploy

├── docker-compose.yml

├── deploy.sh

├── rm.sh

l?docker-compose.yml增加deploy屬性,replicas指定副本數(shù)量,placement指定docker節(jié)點:

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

l?啟動Swarm加入節(jié)點構(gòu)建集群,首個節(jié)點自動成為管理員:docker swarm init

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

#IT明星不是夢#【1鍵部署神功】docker-compos

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

#IT明星不是夢#【1鍵部署神功】docker-compos

l?停止刪除服務:執(zhí)行腳本./rm.sh或命令:docker stack rm starter

#IT明星不是夢#【1鍵部署神功】docker-compos?

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

搭建系統(tǒng)選擇云服務時,重點關(guān)注系統(tǒng)部署運維、自動構(gòu)建以及代碼管理的集成效率和穩(wěn)定性,比較了幾大云服務商,信息整理出來分享,排名不分先后。信息更新日期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

騰訊云

收取使用的計算資源費用

內(nèi)測,需申請,

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

官網(wǎng):預計20年1月開始收費,1元/人/天

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


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI