Skip to main content

执行系统docker化部署

1. 前言

时间进行到2023年的今天,服务端应用的docker化部署已经为服务运维带来了诸多好处。(docker化部署,也成为平台推荐的最佳部署方式)

1.1 Docker化部署优势

· 更快的启动时间

在docker环境下,V平台VAppserver业务构件的发布环节可以在镜像制作过程完成。后续在容器启动环节可以省去服务首次启动漫长的构件发布过程、数据初始化过程,极大提高服务启动速度。

· 强大的沙箱环境

在测试环境里进行了诸多操作后,想要恢复到完全一致的初始运行环境,在docker下是轻而易举的事情。

· 简单、一致的运维、配置方式

执行系统服务端涉及到多种中间件的运行维护,通过docker-compose,将提供一致的维护方式。

· 一致的运行环境

传统方式下,测试环境需要维持和生产环境一致的软硬件配置,目的是尽量减少环境迁移时,系统的一致性。但仍然会由于系统安装的各种其他软件、共享库、环境的差异、端口冲突等而导致迁移过程问题众多。

而docker提供了良好的容器隔离性,这样,无论是将测试环境测试完成的系统上线到生产环境、或者将生产环境的故障,在测试环境模拟出来。都是更加简单的事情。所有的一切只要基于相同的镜像即可。

1.2 前提条件

为了方便执行系统的docker化部署,前提需要:

1、使用VTEAM管理项目以及执行系统构件清单;

2、使用VSTORE-Service服务制作项目服务镜像;

3、运行环境安装 docker 、以及docker-compose支持。

2. Docker环境准备

2.1 docker安装

选择任意Linux 64位环境。推荐使用CentOS7 + 版本、或者ubuntu版本。 下面以CentOS为例说明Docker的安装。

1) 官方安装脚本命令:

curl -sSL https://get.daocloud.io/docker | sh

img

img

2) 检查docker安装情况和版本

docker version 

img

3) 安装完成后,使用以下命令启动docker服务,并设置为开机启动

systemctl enable docker.service

systemctl start docker.service

img

4) 添加私有仓库地址

进入/etc/docker目录,修改daemon.json文件,添加以下内容

"insecure-registries":["http://vstore-registry.yindangu.com"]

img

2.2 docker-compose安装

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

2.3 docker命令自动补全

这一步是可选的,但安装命令自动补全功能后,将为运维管理提供更高的便捷性。

1.安装 bash-completion

sudo yum install -y bash-completion

2.安装完成之后重启系统或者重新登录 shell。如果安装成功,键入docker p 后,再Tab键2次,系统显示如下,方便查找目录。

img

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. 执行系统镜像准备

3.1 概述

执行系统的docker镜像制作包含如下步骤:

· 使用VTEAM进行项目管理

通过这一步,我们将项目环境依赖的基础构件、以及二次开发构件纳入集中管理。

· 制作项目清单快照

这一步的目的是产生当前项目包含的所有构件的版本、时间戳,以便于在任何时刻,都能恢复出和当前一致的的构件状态。

· 制作执行系统镜像

可依据上一步产生的清单快照,在vstore-service服务中制作执行系统运行时镜像。

vstore服务地址:http://vstore-service.yindangu.com

镜像包含全量镜像和增量镜像两种类型。这两类在运行效果上完全一致,差别只是对于已经下载过基础镜像的环境来说,增量镜像可以节约下载时间、减少磁盘空间占用。

3.2 使用VTEAM进行项目管理

通过这一步,我们将项目环境依赖的基础构件、以及二次开发构件纳入集中管理。 具体参考http://team.yindangu.com,此文档略。

3.3 制作清单快照

清单快照在VSTORE中制作;

访问方式:在vstore中选择 基础平台 -> 清单管理 -> 清单快照管理 制作清单快照;

img

img

img

注意

一个清单只可存在一条定义信息,无法重复新增。

如何找到已定义的清单位置?

可以展开“清单快照管理”页面的条件查询,通过清单或者仓库的部分文字进行模糊搜索来找出已建立的清单。找到对应的快照清单后,就可以针对该清单创建新的快照了。

3.4 制作执行系统镜像

· 全量镜像:即基础镜像,新增镜像定义信息后首个构建的镜像必须为全量镜像

· 增量镜像:以选中的镜像为基础,生成一个用于升级的新镜像。

制作过程如下:

1)进入vstore -> “镜像管理 - 业务镜像管理”制作镜像;

注意

镜像编码必须由大小写字母、数字和下划线组成;建议同一个清单使用同一个镜像定义信息,之后针对不同版本,在同一个镜像上进行维护,同一个清单如果创建多个不同的镜像定义信息,容易导致后期维护混乱。

img

img

img

img

2)镜像制作完成,生成镜像地址。

img

4. 执行系统服务编排

4.1 概述

服务编排采用docker-compose来管理。

1、在linux主机上选择一个目录作为执行系统容器主目录,例如:/opt/v3app,后续所有操作,都需要先cd /opt/v3app目录,然后执行相应操作;

2、拷贝平台提供的服务编排docker-compose.yml文件模版到/opt/v3app目录下;

3、按需修改docker-compose.yml文件中的配置项,文件结构如下:

img

img

img

4.2 基础配置

· 基础配置:

Image:更改为目标镜像地址
注:在vstore ->“业务镜像管理”中获取,如:vstore-registry.yindangu.com/bu15/butest_image:20221019150905897
Volumes:按需修改数据卷名称以及映射目录,数据卷名称不能重复
注:冒号后面的容器内路径不能修改,只能修改前面的数据卷名称。
Ports:更改对外端口,避免端口冲突
注:容器内的端口不能修改。

· JVM 参数配置:

JAVA_OPT_Xms: "1024"

JAVA_OPT_Xmx: "3072" # 最大堆内存,3072为最小内存需求,根据实际情况调整。

JAVA_OPT_MetaspaceSize: "256" # 依据所需jvm大小进行调整

· 登录用户配置:

必填,填写对应的 VTEAM帐号密码,与执行系统启动时填入登录界面的帐号密码作用相同。

4.3 数据库配置

平台镜像内已内置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"

4.4 文件服务配置

平台镜像内已包含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: "" # 密码

4.5 redis配置

redis_start: "false"   # 使用镜像自带的redis服务时改为true,其他均为false
redis_ip: "" # redis地址
redis_port: "" # 端口
redis_pwd: "" # 密码

4.6 neo4j配置

neo4j_start: "false"     # 使用镜像自带的neo4j服务时改为true,其他均为false
neo4j_url: "bolt://x.x.x.x:20087" # neo4j地址
neo4j_user: "neo4j" # 用户
neo4j_pwd: "neo4j" # 密码

4.7 注意事项

注意

docker-compose配置应在系统初始化前确定,一旦初始化完成,系统将根据对应配置产生运行期数据,则不再支持后续对配置的随意修改。

其中,以下配置可调整:

- 端口映射ports内容;
- 环境变量environment下的JVM参数部分;

调整后,使用 docker-compose down 命令删除容器,然后再使用docker-compose up -d重新启动。

5. 服务运行管理

5.1 基础运维命令

启动

cd 到docker-compose文件所在目录执行命令
docker-compose up -d && docker-compose logs -f
注:启动容器&&持续显示日志,可使用CTRL+C退出日志浏览模式

停止

cd 到docker-compose文件所在目录执行命令 
docker-compose stop # 只停掉容器不删除 
docker-compose down   # 停掉容器然后删除

服务状态查看

cd 到docker-compose文件所在目录执行命令
docker-compose ls # 列出所有服务容器
docker-compose ps # 列出项目中运行的所有容器

数据卷查看

docker volume ls      
docker inspect 数据卷名称 # 可获取该数据卷存放路径

5.2 数据备份

服务停止状态下,可使用备份数据卷的方式。

注:若有使用外部数据库、mongo还需使用相应的工具单独进行备份.

1、通过命令:docker inspect 数据卷名称 可获取到本地存放目录,如图

img

2、cd进入目录,打包 _data目录下的文件,存放到自定义文件夹

如:tar -zcvf /home/ydg/vstore_service_test/backup/v3app-20230331.bak _data.tar.gz

img

5.服务升级

注意

若连接外部数据库mongodb,建议在系统升级前做好备份

1、制作升级用增量镜像

进入vstore制作新清单快照,过程参考 3 执行系统镜像准备

img

2、进入镜像管理 -> 业务镜像管理 制作升级用增量镜像;选中当前运行中的镜像,点击构建增量镜像,再选中目标快照,开始构建,等待构建完成获取镜像地址;

img

3、可新开容器检测镜像是否正常;

4、停止服务,备份数据库和文件服务数据,可使用备份数据卷方式,参考 5.2 数据备份

5、docker-compose文件中镜像地址修改为新地址,重新开启服务;

6、服务启动完成,检测是否运行正常。

5.服务降级

注意

回滚构件不能涉及数据库相关构件,数据不支持降版本;若有连接外部数据库mongodb,需单独进行数据还原操作

1、关闭服务;;

2、修改docker-compose.yml文件,其中image改回原执行系统镜像地址;

3、删除映射出来的数据;;

4、恢复数据,将先前备份的数据卷数据解压还原到对应的本地目录;

如:进入数据卷数据所在目录,删除原数据后,执行

 tar xf /home/ydg/vstore_service_test/backup/v3app-20230331.bak.tar.gz

5、启动执行系统镜像。

6. 附件

【docker-compose.yml 下载】