docker-compose部署
1.docker安装
切换账号(输入密码)
sudo -i
安装 Docker
mkdir /home/anosi/software && cd /home/anosi/software
curl -fsSL https://get.docker.com -o get-docker.sh
给其他人执行权限
chmod o+x get-docker.sh
执行脚本
sh get-docker.sh
启动 Docker 后台服务,并设值开机启动
systemctl enable docker
service docker start
1.1 Windows 和 Mac 的用户可以下载 Docker Desktop 来完成 Docker 安装。
下载地址: https://www.docker.com/products/docker-desktop
点击下图的按钮,按照官网步骤,完成下载安装。
1.2 对于 Linux 用户,请参照以下表格的链接来安装 Docker
1.3 Docker 常用命令
参考:
https://blog.csdn.net/u013378306/article/details/86668313
2.docker-compose安装
docker-compose是一个集群管理方式,可以利用名为docker-compose.yml的yaml文件来定义需要启动的容器,可以是单个,也可以(通常)是多个的。
sudo curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
授权可执行权限
sudo chmod +x /usr/local/bin/docker-compose
创建软链
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
安装好 docker-compose 后,请运行 docker-compose -v 来测试是否安装正常。正常的应该是显示如下内容。
docker-compose version 1.24.1, build 4667896b
3.安装环境依赖git、maven、java、npm
yum -y install git maven java npm
4.打包部署
4.1 在/home/anosi拉取git项目(需要输入gitlab账号密码)
cd /home/anosi
git clone http://10.1.1.160/device/back/device-manage.git
git clone http://10.1.1.160/device/front/device-manage-client.git
git clone http://10.1.1.160/device/front/device-manage-server.git
4.2 修改yml配置
编辑docker-compose.yml, 全局搜索并修改gsk-host和gsk—rabbitmq。
- gsk-host:流媒体服务器地址,先本机内网ip,后可以通过nacos修改为正式的地址
- gsk—rabbitmq:数据中心rabbitmq地址
4.3 方式一:一键打包部署
vi device-manage-start.sh
把下面编辑到sh脚本里
# 定义工作目录
WORK=$(pwd)
# 后端打包
cd $WORK/device-manage && mvn clean install
# 服务端打包
cd $WORK/device-manage-server && npm install && npm run build && cp -r dist ../device-manage/gsk-nginx/html/server
# 客户端打包
cd $WORK/device-manage-client && npm install && npm run build && cp -r dist ../device-manage/gsk-nginx/html/client
# 启动服务
cd $WORK/device-manage && docker-compose build && docker-compose up -d && docker-compose logs -f
执行脚本
sh device-manage-start.sh
4.4 方式二:手动打包部署:
- 4.4.1 后端项目打包
cd /home/anosi/device-manage
mvn clean install -Dmaven.test.skip=true
- 4.4.2 客户端打包
npm config -g set unsafe-perm
cd /home/anosi/device-manage-client
npm install
npm run build
cp -r dist ../device-manage/gsk-nginx/html/server
- 4.4.3 服务端打包
cd /home/anosi/device-manage-server
npm install
cp -r dist ../device-manage/gsk-nginx/html/client
- 4.4.4 docker-compose创建服务镜像、部署
构建镜像、启动服务、依次执行以下命令:
cd /home/anosi/device-manage
docker-compose build
docker-compose up -d
4.5 部署成功
- 访问http://10.1.1.124:18848/nacos
(账号/密码:nacos/nacos)等待大概三分钟服务即可全部启动,一共有九个服务:
gsk-maintain-biz、gsk-alarm-biz、gsk-monitor、gsk-device-biz、gsk-upms-biz、gsk-auth、gsk-energy-biz、gsk-report-biz、gsk-gateway - 访问http://10.1.1.124:10081
- 访问http://10.1.1.124:10082
以上,代表部署成功!
5.更新/重启
cd /home/anosi/device-manage
git pull
cd /home/anosi/device-manage-server
git pull
cd /home/anosi/device-manage-client
git pull
- 然后执行步骤4.4,进行手动打包
- 重启服务容器
停止服务容器
cd /home/anosi/device-manage
docker-compose stop
构建镜像
docker-compose build
构建容器启动服务
docker-compose up -d && docker-compose logs -f
6.issue
- 若npm install报错(含有node-sass字样),执行npm uninstall node-sass,再执行npm install
7.日志查看
访问http://10.1.1.124:15001(pig/pig),选择模块,选择【日志】-【日志文件】即可查看日志
8.扩展
- 停止容器,id代表容器id,去掉id即代表停止所有容器
docker-compose stop [id]
- 删除所有容器(会删除docker内所有服务,以及mysql、redis等数据)。场景:适用于想重新初始化,重新创建容器
docker-compose down
- 启动某个服务
docker-compose restart [id]
- 单发某个微服务,可把本地编译好的jar包放到device-manage对应的target下面,后执行构建镜像和启动镜像操作即可
- 修改Nacos配置,需要重启对应的服务才能生效
9.docker-compose.yml
version: '3'
services:
device-manage-mysql:
build:
context: ./db
environment:
MYSQL_ROOT_PASSWORD: anosi.cn
restart: always
container_name: device-manage-mysql
image: device-manage-mysql
hostname: gsk-mysql
ports:
- 3306:3306
command: [
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_general_ci'
]
volumes:
#mysql数据库挂载到host物理机目录
- "./mysql/data/db:/var/lib/mysql"
#容器的配置目录挂载到host物理机目录
- "./mysql/data/conf:/etc/mysql/conf.d"
# docker安全验证
security_opt:
- seccomp:unconfined
device-manage-redis:
image: redis:6.0
ports:
- 6379:6379
restart: always
container_name: device-manage-redis
hostname: gsk-redis
volumes:
- "./redis/data/db:/data/db" # make data persistent 持久化
- "./redis/logs:/logs"
command: redis-server --requirepass anosi.cn
device-manage-mongodb:
restart: always
container_name: device-manage-mongodb
image: mongo
hostname: gsk-mongodb
ports:
- '27017-27019:27017-27019'
volumes:
- "./mongo/data/db:/data/db" # make data persistent 持久化
- "./mongo/logs:/logs"
device-manage-register:
build:
context: ./gsk-register
restart: always
ports:
- 18848:18848
container_name: device-manage-register
hostname: gsk-register
image: device-manage-register
volumes:
- "./gsk-register/logs:/logs"
device-manage-gateway:
build:
context: ./gsk-gateway
restart: always
ports:
- 19999:19999
container_name: device-manage-gateway
hostname: gsk-gateway
image: device-manage-gateway
volumes:
- "./gsk-gateway/logs:/logs"
device-manage-auth:
build:
context: ./gsk-auth
restart: always
container_name: device-manage-auth
hostname: gsk-auth
image: device-manage-auth
volumes:
- "./gsk-auth/logs:/logs"
device-manage-upms:
build:
context: ./gsk-upms/gsk-upms-biz
restart: always
container_name: device-manage-upms
hostname: gsk-upms
image: device-manage-upms
volumes:
- "./gsk-upms/logs:/logs"
device-manage-device:
build:
context: ./gsk-device/gsk-device-biz
restart: always
container_name: device-manage-device
hostname: gsk-device
image: device-manage-device
extra_hosts:
gsk-host: 10.0.1.175
gsk-rabbitmq: 10.1.1.123
volumes:
- "./gsk-device/logs:/logs"
device-manage-maintain:
build:
context: ./gsk-maintain/gsk-maintain-biz
restart: always
container_name: device-manage-maintain
hostname: gsk-maintain
image: device-manage-maintain
volumes:
- "./gsk-maintain/logs:/logs"
device-manage-report:
build:
context: ./gsk-report/gsk-report-biz
restart: always
container_name: device-manage-report
hostname: gsk-report
image: device-manage-report
volumes:
- "./gsk-report/logs:/logs"
device-manage-energy:
build:
context: ./gsk-energy/gsk-energy-biz
restart: always
container_name: device-manage-energy
hostname: gsk-energy
image: device-manage-energy
extra_hosts:
gsk-rabbitmq: 10.1.1.123
volumes:
- "./gsk-energy/logs:/logs"
device-manage-monitor:
build:
context: ./gsk-visual/gsk-monitor
restart: always
ports:
- 15001:15001
container_name: device-manage-monitor
hostname: gsk-monitor
image: device-manage-monitor
volumes:
- "./gsk-monitor/logs:/logs"
device-manage-alarm:
build:
context: ./gsk-alarm/gsk-alarm-biz
restart: always
ports:
- 17008:17008
container_name: device-manage-alarm
hostname: gsk-alarm
image: device-manage-alarm
extra_hosts:
gsk-host: 10.0.1.175
gsk-rabbitmq: 10.1.1.123
volumes:
- "./gsk-alarm/logs:/logs"
#客户端
device-manage-front:
build:
context: ./gsk-nginx
restart: always
container_name: device-manage-front
image: device-manage-front
external_links:
- gsk-gateway
ports:
- 10082:10082
- 10081:10081
10.页面及账号
10-1 页面地址:
- Nacos配置注册中心:
http://10.1.1.31:18848/nacos
账号/密码:nacos/nacos - Spring Boot Admin监控中心:
http://10.1.1.31:15001/
账号/密码:pig/pig - 服务端:
http://10.1.1.31:10081/#/login
账号/密码:admin/123456 - 客户端:
http://10.1.1.31:10082/#/login
11.参考资料
12.运行环境
- 操作系统:CentOS Linux(Red Hat 4.8.5-44)
- CPU:Intel(R) Xeon(R) CPU L5630 @2.13GHz
- 内存:4GB
- 硬盘:32Gb