执行系统docker化部署
1. 前言
时间进行到2023年的今天,服务端应用的docker化部署已经为服务运维带来了诸多好处。(docker化部署,也成为平台推荐的最佳部署方式)
· 更快的启动时间
在docker环境下,V平台VAppserver业务构件的发布环节可以在镜像制作过程完成。后续在容器启动环节可以省去服务首次启动漫长的构件发布过程、数据初始化过程,极大提高服务启动速度。
· 强大的沙箱环境
在测试环境里进行了诸多操作后,想要恢复到完全一致的初始运行环境,在docker下是轻而易举的事情。
· 简单、一致的运维、配置方式
执行系统服务端涉及到多种中间件的运行维护,通过docker-compose,将提供一致的维护方式。
· 一致的运行环境
传统方式下,测试环境需要维持和生产环境一致的软硬件配置,目的是尽量减少环境迁移时,系统的一致性。但仍然会由于系统安装的各种其他软件、共享库、环境的差异、端口冲突等而导致迁移过程问题众多。
而docker提供了良好的容器隔离性,这样,无论是将测试环境测试完成的系统上线到生产环境、或者将生产环境的故障,在测试环境模拟出来。都是更加简单的事情。所有的一切只要基于相同的镜像即可。
为了方便执行系统的docker化部署,前提需要:
1、使用VTEAM管理项目以及执行系统构件清单;
2、使用VSTORE-Service服务制作项目服务镜像;
3、运行环境安装 docker 、以及docker-compose支持。
2. Docker环境准备
选择任意Linux 64位环境。推荐使用CentOS7 + 版本、或者ubuntu版本。 下面以CentOS为例说明Docker的安装。
1) 官方安装脚本命令:
curl -sSL https://get.daocloud.io/docker | sh
2) 检查docker安装情况和版本
docker version
3) 安装完成后,使用以下命令启动docker服务,并设置为开机启动
systemctl enable docker.service
systemctl start docker.service
4) 添加私有仓库地址
进入
/etc/docker
目录,修改daemon.json
文件,添加以下内容"insecure-registries":["http://vstore-registry.yindangu.com"]
1) 下载最新版的docker-compose文件
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
注意上述URL中docker-compose的版本号,可以通过
https://github.com/docker/compose/
查询得到。2) 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
3) 测试安装结果,查看安装的docker-compose版本信息
docker-compose –version
这一步是可选的
,但安装命令自动补全功能后,将为运维管理提供更高的便捷性。1.安装 bash-completion
sudo yum install -y bash-completion
2.安装完成之后重启系统或者重新登录 shell。如果安装成功,键入
docker p
后,再Tab
键2次,系统显示如下,方便查找目录。
3.根据Docker官网文档进一步设置
curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
source /etc/bash_completion.d/docker-compose至此,所有补全功能相关的准备工作完成,执行 docker run 类似的命令时,镜像名称及 tag 均可自动补全。
3. 执行系统镜像准备
执行系统的docker镜像制作包含如下步骤:
· 使用VTEAM进行项目管理
通过这一步,我们将项目环境依赖的基础构件、以及二次开发构件纳入集中管理。
· 制作项目清单快照
这一步的目的是产生当前项目包含的所有构件的版本、时间戳,以便于在任何时刻,都能恢复出和当前一致的的构件状态。
· 制作执行系统镜像
可依据上一步产生的清单快照,在vstore-service服务中制作执行系统运行时镜像。
vstore服务地址:
http://vstore-service.yindangu.com
镜像包含全量镜像和增量镜像两种类型。这两类在运行效果上完全一致,差别只是对于已经下载过基础镜像的环境来说,增量镜像可以节约下载时间、减少磁盘空间占用。
清单快照在VSTORE中制作;
访问方式:在vstore中选择
基础平台
->清单管理
->清单快照管理
制作清单快照;
注意一个清单只可存在一条定义信息,无法重复新增。
如何找到已定义的清单位置?可以展开“清单快照管理”页面的条件查询,通过清单或者仓库的部分文字进行模糊搜索来找出已建立的清单。找到对应的快照清单后,就可以针对该清单创建新的快照了。
· 全量镜像:即基础镜像,新增镜像定义信息后首个构建的镜像必须为全量镜像
· 增量镜像:以选中的镜像为基础,生成一个用于升级的新镜像。
制作过程如下:
1)进入vstore -> “镜像管理 - 业务镜像管理”制作镜像;
注意镜像编码必须由大小写字母、数字和下划线组成;建议同一个清单使用同一个镜像定义信息,之后针对不同版本,在同一个镜像上进行维护,同一个清单如果创建多个不同的镜像定义信息,容易导致后期维护混乱。
2)镜像制作完成,生成镜像地址。
4. 执行系统服务编排
服务编排采用docker-compose来管理。
1、在linux主机上选择一个目录作为执行系统容器主目录,例如:
/opt/v3app
,后续所有操作,都需要先cd /opt/v3app
目录,然后执行相应操作;2、拷贝平台提供的服务编排
docker-compose.yml
文件模版到/opt/v3app
目录下;3、按需修改
docker-compose.yml
文件中的配置项,文件结构如下:
· 基础配置:
注:在vstore ->“业务镜像管理”中获取,如:vstore-registry.yindangu.com/bu15/butest_image:20221019150905897Image:更改为目标镜像地址
注:冒号后面的容器内路径不能修改,只能修改前面的数据卷名称。Volumes:按需修改数据卷名称以及映射目录,数据卷名称不能重复
注:容器内的端口不能修改。Ports:更改对外端口,避免端口冲突
· JVM 参数配置:
JAVA_OPT_Xms: "1024"
JAVA_OPT_Xmx: "3072" # 最大堆内存,3072为最小内存需求,根据实际情况调整。
JAVA_OPT_MetaspaceSize: "256" # 依据所需jvm大小进行调整· 登录用户配置:
必填
,填写对应的 VTEAM帐号密码,与执行系统启动时填入登录界面的帐号密码作用相同。
平台镜像内已内置mysql5.7,如需使用外部独立数据库服务,则放开注释,修改对应的参数。如无特殊需求,在非集群环境下,建议使用缺省的内置mysql,可以获得最快的启动速度(镜像内置的mysql数据库已经初始化,换外部数据源需要在启动时重新初始化外部数据源)。
db_start: "false" # 此参数缺省值为”true”,意即:启用镜像内置mysql数据库,如需使用外部数据库,则放开此项注释,更改参数值为“false”。
db_ip: "x.x.x.x" # 数据库地址,后续参数都仅当 db_start为false时才生效
db_port: "3306" # 端口
db_name: v3_db # 数据库名称
db_user: root # 用户
db_pwd: toone # 密码
db_type: mysql # 平台支持的数据库类型:"mysql" 、"oracle" 、"mssqlserver" 、"dm" 、"gbase" 、"db2" 、"postgresql"
平台镜像内已包含mongo4.4版本,如需更改,则放开注释,修改入参。
mongo_start: "false" # 使用镜像内置的mongo服务时改为true,其他均为false
mongo_ip: "x.x.x.x" # mongo地址
mongo_port: "27018" # 端口
mongo_version: "4.4" # 版本
mongo_user: "" # 用户
mongo_pwd: "" # 密码
redis_start: "false" # 使用镜像自带的redis服务时改为true,其他均为false
redis_ip: "" # redis地址
redis_port: "" # 端口
redis_pwd: "" # 密码
neo4j_start: "false" # 使用镜像自带的neo4j服务时改为true,其他均为false
neo4j_url: "bolt://x.x.x.x:20087" # neo4j地址
neo4j_user: "neo4j" # 用户
neo4j_pwd: "neo4j" # 密码
注意
docker-compose
配置应在系统初始化前确定,一旦初始化完成,系统将根据对应配置产生运行期数据,则不再支持后续对配置的随意修改。其中,以下配置可调整:
- 端口映射ports内容;
- 环境变量environment下的JVM参数部分;调整后,使用
docker-compose down
命令删除容器,然后再使用docker-compose up -d
重新启动。
5. 服务运行管理
启动
注:启动容器&&持续显示日志,可使用CTRL+C退出日志浏览模式cd 到docker-compose文件所在目录执行命令
docker-compose up -d && docker-compose logs -f停止
cd 到docker-compose文件所在目录执行命令
docker-compose stop # 只停掉容器不删除
docker-compose down # 停掉容器然后删除服务状态查看
cd 到docker-compose文件所在目录执行命令
docker-compose ls # 列出所有服务容器
docker-compose ps # 列出项目中运行的所有容器数据卷查看
docker volume ls
docker inspect 数据卷名称 # 可获取该数据卷存放路径
服务停止状态下,可使用备份数据卷的方式。
注:若有使用外部数据库、mongo还需使用相应的工具单独进行备份.1、通过命令:
docker inspect 数据卷名称
可获取到本地存放目录,如图
2、
cd
进入目录,打包_data
目录下的文件,存放到自定义文件夹如:tar -zcvf /home/ydg/vstore_service_test/backup/v3app-20230331.bak _data.tar.gz
注意若连接
外部数据库
、mongodb
,建议在系统升级前做好备份1、制作升级用增量镜像
进入vstore制作新清单快照,过程参考 3 执行系统镜像准备
2、进入
镜像管理
->业务镜像管理
制作升级用增量镜像;选中当前运行中的镜像,点击构建增量镜像
,再选中目标快照,开始构建,等待构建完成获取镜像地址;
3、可新开容器检测镜像是否正常;
4、停止服务,备份数据库和文件服务数据,可使用备份数据卷方式,参考 5.2 数据备份;
5、
docker-compose
文件中镜像地址
修改为新地址,重新开启服务;6、服务启动完成,检测是否运行正常。
注意回滚构件不能涉及数据库相关构件,数据不支持降版本;若有连接
外部数据库
、mongodb
,需单独进行数据还原操作
。1、关闭服务;;
2、修改
docker-compose.yml
文件,其中image
改回原执行系统镜像地址;3、删除映射出来的数据;;
4、恢复数据,将先前备份的数据卷数据解压还原到对应的本地目录;
如:进入数据卷数据所在目录,删除原数据后,执行
tar xf /home/ydg/vstore_service_test/backup/v3app-20230331.bak.tar.gz
5、启动执行系统镜像。