Docker 部署服務開發環境
2.1 創建 docker 虛擬網絡
爲了方便虛擬機、Mac、Linux 主機等各種環境下的 docker 部署,在本示例中先創建虛擬網絡,模擬現實中的局域網內網環境(注意docker都還是在同一臺機器, 只是docker的虛擬ip不同, 模擬多機)
# 創建一個名爲tars的橋接(bridge)虛擬網絡,網關172.25.0.1,網段爲172.25.0.0
docker network create -d bridge --subnet=172.25.0.0/16 --gateway=172.25.0.1 tars
2.2 啓動 MySQL
- 爲框架運行提供 MySQL 服務,若使用宿主機或現有的 MySQL 可以跳過此步驟,建議框架和應用使用不同的 MySQL 服務。
- 注意 MySQL 的 IP 和 root 密碼,後續構建中需要使用
docker run -d -p 3306:3306 \
--net=tars \
-e MYSQL_ROOT_PASSWORD="123456" \
--ip="172.25.0.2" \
-v /data/framework-mysql:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
--name=tars-mysql \
mysql:5.6
2.3 使用 tarscloud/framework 部署框架
- 拉取鏡像
最新版本
docker pull tarscloud/framework:latest
指定版本:
docker pull tarscloud/framework:v{x.y.z}
使用指定版本,如:v2.4.0
,便於開發和生產環境的部署,後期需要升級時可選擇更新的版本tag,升級之前請先查看GitHub的changelog,避免升級到不兼容的版本造成損失。
- 啓動鏡像(目前只考慮了 linux 上, 時間和本機同步)
# 掛載的/etc/localtime是用來設置容器時區的,若沒有可以去掉
# 3000端口爲web程序端口
# 3001端口爲web授權相關服務端口(docker>=v2.4.7可以不暴露該端口)
docker run -d \
--name=tars-framework \
--net=tars \
-e MYSQL_HOST="172.25.0.2" \
-e MYSQL_ROOT_PASSWORD="123456" \
-e MYSQL_USER=root \
-e MYSQL_PORT=3306 \
-e REBUILD=false \
-e INET=eth0 \
-e SLAVE=false \
--ip="172.25.0.3" \
-v /data/framework:/data/tars \
-v /etc/localtime:/etc/localtime \
-p 3000:3000 \
-p 3001:3001 \
tarscloud/framework:v2.4.0
安裝完畢後, 訪問 http://${your_machine_ip}:3000
打開 web 管理平臺
- 目錄說明
創建時, 會將 docker 的目錄/data/tars 映射到宿主機目錄/data/framework, 啓動 docker 後, 請檢查宿主機目錄: /data/tars, 正常情況下會有創建以下幾個目錄:
- app_log: tars 服務的日誌目錄
- tarsnode-data: tarsnode/data 目錄(存放發佈到 docker 的業務服務), 保證 docker 重啓, 數據不丟失
- web_log: web 中 tars-node-web 模塊的日誌(主機纔有)
- demo_log: web 中 tars-user-system 模塊的日誌(主機纔有), (docker>=v2.4.7這個目錄下無內容了)
- patchs: 上傳的發佈包(主機纔有)
如果這幾個目錄沒有創建, 你可以手工創建, 再重啓 docker.
- 參數解釋
MYSQL_IP: mysql 數據庫的 ip 地址
MYSQL_ROOT_PASSWORD: mysql 數據庫的 root 密碼
INET: 網卡的名稱(ifconfig 可以看到, 比如 eth0), 表示框架綁定本機 IP, 注意不能是 127.0.0.1
REBUILD: 是否重建數據庫,通常爲 false, 如果中間裝出錯, 希望重置數據庫, 可以設置爲 true
SLAVE: 是否是從節點, 可以部署多臺機器, 通常一主多從即可.
MYSQL_USER: mysql 用戶, 默認是 root
MYSQL_PORT: mysql 端口
- 啓動框架從節點
如果希望多節點部署, 則在不同機器上執行 docker run …即可, 注意參數設置!
docker run -d \
--name=tars-framework-slave \
--net=tars \
-e MYSQL_HOST="172.25.0.2" \
-e MYSQL_ROOT_PASSWORD="123456" \
-e MYSQL_USER=root \
-e MYSQL_PORT=3306 \
-e REBUILD=false \
-e INET=eth0 \
-e SLAVE=true \
--ip="172.25.0.4" \
-v /data/framework-slave:/data/tars \
-v /etc/localtime:/etc/localtime \
docker.tarsyun.com/tarscloud/framework:v2.4.0
注意:SLAVE 參數不同
2.4 Docker 部署 Tars 應用節點
Tars 應用節點鏡像默認爲集合環境(Java+GoLang+NodeJs+PHP)的鏡像,如果需要可登陸 Docker Hub 查看各語言相關 tag
- 拉取鏡像
最新版本:
docker pull tarscloud/tars-node:latest
- 啓動 Node(目前只考慮了 linux 上, 時間和本機同步)
最新版本:
docker run -d \
--name=tars-node \
--net=tars \
-e INET=eth0 \
-e WEB_HOST="http://172.25.0.3:3000" \
--ip="172.25.0.5" \
-v /data/node:/data/app \
-v /etc/localtime:/etc/localtime \
-p 9000-9010:9000-9010 \
tarscloud/tars-node:latest
- 初始開放了 9000~9010 端口供應用使用,若不夠可自行添加
- Node 啓動之後會自動向框架 172.25.0.3 進行註冊,部署完成之後在框架的 運維管理-》節點管理 中可以看到 IP 爲
172.25.0.5
的節點啓動
注意, 如果在同一臺機器上採用–net=host, 同時啓動framework和tars-node鏡像, 是不行的, 因爲framework中也包含了一個tars-node, 會導致端口衝突, 啓動不了
3 Docker 部署服務生產環境
概要說明:
- tarscloud/framework:v{x.y.y} 部署一主, 多從
- tarscloud/framework:v{x.y.y} 以–net=host的方式啓動, 即和宿主機相同網絡
- 節點應用服務器使用 tarscloud/tars-node:latest, 也以–net=host方式啓動
- tarscloud/tars-node 有多個不同的標籤如下:
- tarscloud/tars-node:stable, tarscloud/tars-node:latest, tarscloud/tars-node:full, 全環境, 即jdk, php, nodejs的運行時環境都已經安裝
- tarscloud/tars-node:cpp, 跑cpp/go服務
- tarscloud/tars-node:java, 安裝了jdk
- tarscloud/tars-node:nodejs, 安裝了nodejs
- tarscloud/tars-node:php, 安裝了php
如果想自己構建鏡像, 請參考: https://github.com/TarsCloud/TarsDocker
3.1 Docker 部署 Tars 框架服務
# 掛載的/etc/localtime是用來設置容器時區的,若沒有可以去掉
# --net=host 代表docker使用宿主機網絡
# INET=eth0 eth0爲網卡名稱,tars腳本會根據網卡名稱獲取IP並將服務綁定到獲取到的IP上
docker run -d \
--name=tars-framework \
--net=host \
-e MYSQL_HOST="Host IP For MySQL Service" \
-e MYSQL_ROOT_PASSWORD="Your Root Password" \
-e MYSQL_USER=root \
-e MYSQL_PORT=3306 \
-e REBUILD=false \
-e SLAVE=false \
-e INET=eth0 \
-v /etc/localtime:/etc/localtime \
-v /tmp/test/data:/data/tars \
tarscloud/framework:v2.4.0
3.2 Docker 部署 Tars 應用節點
# 掛載的/etc/localtime是用來設置容器時區的,若沒有可以去掉
# --net=host 代表docker使用宿主機網絡
# INET=eth0 eth0爲網卡名稱,tars腳本會根據網卡名稱獲取IP並將服務綁定到獲取到的IP上
docker run -d \
--name=tars-node \
--net=host \
-e INET=eth0 \
-e WEB_HOST="The Accessible Http Address and Port Of Your Tars Framework" \
-v /data/tars:/data/app \
-v /etc/localtime:/etc/localtime \
tarscloud/tars-node:latest
4 問題檢查
如果 docker 運行後, 仍然無法打開管理平臺, 可以如下檢查:
- 關閉 docker, 注意需要用 docker stop …. 來關閉(docker 的使用請自行搜索)
- 啓動鏡像, 注意不要 -d 參數
docker --name=tars-framework \
--net=tars \
-e MYSQL_HOST="172.25.0.2" \
-e MYSQL_ROOT_PASSWORD="123456" \
-e MYSQL_USER=root \
-e MYSQL_PORT=3306 \
-e REBUILD=false \
-e INET=eth0 \
-e SLAVE=false \
--ip="172.25.0.3" \
-v /data/framework:/data/tars \
-v /etc/localtime:/etc/localtime \
-p 3000:3000 \
-p 3001:3001 \
tarscloud/framework:v2.4.0
- 查看 docker 輸出是否有明顯問題
- node 的問題檢查與框架一致
如果 web 平臺打開, 但是顯示錯誤, 就需要檢查 web 的問題, 可以進入 docker, 請參考檢查 web 的問題中的檢查 web 問題
5 鏡像加速
- 目前已搭建了
docker.tarsyun.com/tarscloud/framework
和docker.tarsyun.com/tarscloud/tars-node
的鏡像加速
此方法僅適用於 linux 環境
curl -sSL https://doc.tarsdoc.com/docker_set_mirror.sh | sh -s https://w1mnep2c.mirror.aliyuncs.com
systemctl restart docker
6 開發環境 docker-compose
- 下面是使用 docker-compose 直接拉起開發環境的示例,僅供學習參考
- ./source/Shanghai 是 linux 時區設置文件,需要自行獲取
version: "3"
services:
mysql:
image: mysql:5.6
container_name: tars-mysql
ports:
- "3307:3306"
restart: always
environment:
MYSQL_ROOT_PASSWORD: "123456"
volumes:
- ./mysql/data:/var/lib/mysql:rw
- ./source/Shanghai:/etc/localtime
networks:
internal:
ipv4_address: 172.25.1.2
framework:
image: tarscloud/framework:v2.4.0
container_name: tars-framework
ports:
- "3000:3000"
- "3001:3001"
restart: always
networks:
internal:
ipv4_address: 172.25.1.3
environment:
MYSQL_HOST: "172.25.1.2"
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_USER: "root"
MYSQL_PORT: 3306
REBUILD: "false"
INET: eth0
SLAVE: "false"
volumes:
- ./framework/data:/data/tars:rw
- ./source/Shanghai:/etc/localtime
depends_on:
- mysql
node:
image: tarscloud/tars-node:latest
container_name: tars-node
restart: always
networks:
internal:
ipv4_address: 172.25.1.5
volumes:
- ./node/data:/data/app:rw
- ./source/Shanghai:/etc/localtime
environment:
INET: eth0
WEB_HOST: http://172.25.1.3:3000
ports:
- "9000-9010:9000-9010"
depends_on:
- framework
networks:
internal:
driver: bridge
ipam:
config:
- subnet: 172.25.1.0/16
7 docker版本說明
說明:
- docker內部主要包含了: https://github.com/TarsCloud/TarsFramework 和 https://github.com/TarsCloud/TarsWeb 的服務.
- TarsFramework 和 TarsWeb都作爲submodule掛在了 https://github.com/TarsCloud/Tars 下面.
- 因此爲了更好的管理docker版本, docker的版本標籤對應: https://github.com/TarsCloud/Tars 的Tag
- https://github.com/TarsCloud/Tars 打tag時會自動編譯並推送docker到docker hub上
以上執行方式, 從tarscloud/framework:v2.4.0以後才執行
轉載-----------------------------------------------------------------------------------------------------------------------------------------------------