Devops流程规范
芯盾时代_Devops_Docker操作说明及使用规范
北京芯盾时代科技有限公司
2019年1月
修订记录
版本号 |
修订人 |
修订日期 |
修订描述 |
v0.1 |
芯盾 |
2019/1/15 |
初次创建 |
v0.2 |
芯盾 |
2019/1/16 |
5.4增加compose文件限制内存CPU,启动顺序限定,取消links |
v0.3 |
芯盾 |
2019/1/17 |
增加1.3docker基础知识,更新5.5stack启动命令 |
v0.4 |
芯盾 |
2019/1/17 |
增加7章端口规划 |
v0.5 |
芯盾 |
2019/1/19 |
补充数据库提交规范及操作,完善整体流程描述,调整章节顺序 |
V0.6 |
芯盾 |
2019/1/20 |
增加章节9与Jenkins集成 |
V0.7 |
芯盾 |
2019/2/19 |
增加章节4.6镜像要求 |
目录
一. 文档摘要... 2
1.1 文档目的... 2
1.2 阅读对象... 2
1.3 Docker基础命令... 2
二. 整体规划... 3
2.1 整体流程描述... 3
2.2 端口规划... 3
三. Docker环境配置... 4
3.1 Docker安装... 4
3.2 Docker私有仓库配置... 4
3.3 修改docker默认存储路径... 5
四. Images用法及规范... 7
4.1 构建基础镜像... 7
4.2 构建客户镜像... 7
4.3 构建主线镜像... 8
4.4 构建数据库镜像... 8
4.5 镜像提交Harbor 9
五. Swarm基础用法及规范... 10
5.1 Swarm安装部署... 10
5.2 Swarm增加节点... 10
5.3 Swarm移除节点... 10
5.4 Swarm节点更新... 11
六. Stack基础用法及规范... 12
6.1 Stack常用命令... 12
6.2 Stack目录规范... 12
6.3 Stack命名规范... 13
6.4 Stack yml文件说明... 13
6.5 Stack启动停止... 14
七. 与Jenkins集成... 15
一. 文档摘要
1.1 文档目的
l 详细说明Docker的基础用法及操作,按照文档即可实现测试环境一键式部署,并学习了解其中知识点。
l 规范Docker在使用过程中的规范,如DockerFile文件层级及命名规范、Docker镜像容器的使用方法命名规范事项。
1.2 阅读对象
l 测试人员
l 实施人员
l 研发人员
l 运维人员
l 相关领导
1.3 Docker基础命令
l 查看docker 镜像:docker images
l 查看docker所有容器,docker ps –a
l 查看docker已经启动的容器,docker ps
l 给镜像打标签,docker tag od:od ne:ne
l 镜像上传,docker push
l 镜像下载,docker pull
l 容器打包成images,docker commit –m “a” –a “a”
container images:version
l 删除镜像,docker rmi,删除已使用镜像 –f。
l 删除容器,docker rm,删除已启动容器 –f。
二. 整体规划
本章节中的斜体部分为超级链接,方便查找对应章节。
2.1 整体流程描述
l 编写stack指定目录下的yml文件,参考Stack yml文件说明章节,注意使用common镜像,参考《Devops_Docker基础镜像列表.xlsx》,需要指定中间件端口,参见端口规划章节。
l 启动stack环境,验证环境可用性,参见stack启动停止章节。
l 查看中间件容器所在的服务器及目录,进入部署服务,查看日志等,参见stack基础常用章节。
l 执行功能测试。
l 测试完成,删除容器内的日志等垃圾信息,提交中间件容器为镜像;构建基础sql到common数据库镜像中,参见构建主线镜像章节。
l 上传镜像到harbor。
l 删除stack环境。
l 更新stack yml文件中镜像成harbor测试通过版本,确保下次启动为测试通过版本。
2.2 端口规划
l 客户环境启动无需指定端口,启动后用 docker service ls查看即可
l 主线版本端口固定(只固定中间键对外端口),方便jenkins自动化部署。
l 每个项目固定分配10个端口,每个项目功能测试使用前8个端口(优先使用最小的,其余7个备用),jenkins与自动化测试固定端口,具体规划如下:
序号 |
项目 |
中间键 |
功能测试端口区间 |
Jenkins |
AutoTest |
|
1 |
DFS |
Tomcat |
8101 |
8108 |
8109 |
8110 |
2 |
|
Weblogic |
8111 |
8118 |
8119 |
8120 |
3 |
|
Webspher |
8121 |
8128 |
8129 |
8130 |
4 |
MFA |
Tomcat |
8131 |
8138 |
8139 |
8140 |
5 |
|
Weblogic |
8141 |
8148 |
8149 |
8150 |
6 |
|
Webspher |
8151 |
8158 |
8159 |
8160 |
7 |
IPA |
Tomcat |
8161 |
8168 |
8169 |
8170 |
8 |
|
Weblogic |
8171 |
8178 |
8179 |
8180 |
9 |
|
Webspher |
8181 |
8188 |
8189 |
8190 |
三. Docker环境配置
本章节为了解内容,无需操作!!!
3.1 Docker安装
l 以CentOS Linux release 7.5.1804
(Core)版本为例,查看自己系统版本命令:[xindun@svr197 ~]# cat /etc/redhat-release
l 安装前确保系统是干净的,删除残留确保一次安装成功,执行如下命令
# 卸载docker yum remove docker docker-client # 安装一些必要的系统工具 yum install -y yum-utils # 添加软件源信息 yum-config-manager --add-repo # 更新 yum 缓存 yum makecache fast # 安装 Docker-ce yum -y install docker-ce # 启动 Docker 后台服务 systemctl restart docker # 起不来的话 rm /etc/docker/key.json rm -rf /var/lib/docker/ # 再执行 systemctl restart docker |
3.2 Docker私有仓库配置
l 配置Harbor到docker环境中
vim /etc/docker/daemon.json 添加如下内容,192.168.1.190是harbor地址默认80端口省略 { "insecure-registries": } |
l 重启docker ,命令:systemcrl restart docker
l 测试配置是否成功,执行docker info,看到如下图表示配置成功
l 登录harbor,执行docker login 192.168.1.190,如下:
3.3 修改docker默认存储路径
l 修改docker储存路径方法1
执行 vi /usr/lib/systemd/system/docker.service # 修改前 ExecStart=/usr/bin/dockerd -H unix:// # 修改后 ExecStart=/usr/bin/dockerd --graph /hdd/docker/base # reload配置文件 systemctl daemon-reload # 重启 docker systemctl restart docker.service |
l 修改docker储存路径方法2
mv /var/lib/docker /tmp/ ln –s /hdd/docker/base docker # 重启 docker systemctl restart docker |
验证修改是否成功,执行docker info
四. Images用法及规范
4.1 构建基础镜像
l 目录统一在/home/xindun/workspace/docker/dockerfile下根据不同的镜像创建不同的目录,保留Dockerfile文件,如下
l Dockerfile文件内容规范如下:*表示必填
FROM elasticsearch_2.3.5:v0.2 # 基础镜像 * MAINTAINER addinitdata # 维护信息 * ENV PATH ADD init.sh /init.sh # 在镜像中添加文件 RUN chmod 755 /init.sh #修改文件中镜像中的权限 EXPOSE 9200 #指定暴露端口 * CMD ["/bin/bash"] # 启动脚本指定 |
l Dockerfile build基础镜像命名规范,镜像内服务名称_版本号:构建版本,示例
[xindun@svr197 -rwxr-xr-x 1 xindun xindun 198 Jan 7 17:10 Dockerfile -rwxr-xr-x 1 xindun xindun 904 Jan 7 16:48 init.sh [xindun@svr197 /home/xindun/workspace/docker/dockerfile/es_2.3.5 [xindun@svr197 ~/workspace/docker/dockerfile/es_2.3.5]# docker |
4.2 构建客户镜像
l 在功能测试完成的基础上,找到测试完成的容器(docker ps -a)
l 使用docker commit –m “备注信息” –a “作者” 容器名称
镜像:镜像标签
l 镜像命名规范:项目_项目版本号_客户简称_中间件名称:提交日期(注意日期8位),如:兰州银行的设备指纹1.6.5版本项目weblogic版本,dfs_1.6.5_lzbank_weblogic:20190115
l 每个项目的客户版本需要一个公用的数据库镜像,整理完现有的客户环境,需要把客户环境依赖的基础sql达到项目的客户公用镜像中。
4.3 构建主线镜像
l 在功能测试完成的基础上,找到测试完成的容器(docker ps -a)
l 使用docker commit –m “备注信息” –a “作者” 容器名称
镜像:镜像标签
l 镜像命名规范:项目_项目版本号_配置模式_中间件名称:提交日期(注意日期8位),如:主线设备指纹1.6.5版本项目redis集群tomcat版本,dfs_1.6.5_cluster_tomcat:20190115
l 每个项目的主线版本需要一个公用的数据库镜像,每次发布版本的基础sql,合并到项目主线公用的数据库镜像中,参见构建数据库镜像章节。
4.4 构建数据库镜像
l 数据库初始镜像,来源common下。
l 构建mysql项目主线镜像,每次主线版本发版需要把sql做到项目的主线镜像中,mysql放在root用户下(密码123456),通过库开区分不同发布版本,镜像命名规范:项目_数据库名_master:提交日期,如dfs_mysql_master:20190115。
l 构建mysql项目客户镜像,把测试完成的客户版本依赖的sql做到项目客户镜像中,mysql放在root用户下(密码123456),通过库开区分不同客户版本,镜像命名规范:项目_数据库名_customers:提交日期,如dfs_mysql_customers:20190115。
l 构建Oracle项目客户镜像,把测试完成的客户版本依赖的sql做到项目客户镜像中,Oracle通过用户和数据库表空间区分不同的客户,每个客户创建一个账号及表空间,详细操作如下:
# 注意只需要替换红色部分即可,红色部分命名规则,项目_客户,如mfa中原,写成mfa_zybank # 进入Oracle容器,切换到Oracle用户 su – oracle # 连接Oracle数据库 sqlplus /nolog # 以dba用户进入 connect /as sysdba # 创建表空间 create bigfile tablespace mfa_zybank # 创建用户并制定表空间 create user mfa_zybank # 给创建的用户授权 grant dba, connect to mfa_zybank; # 查询表空间列表 select file_name from dba_data_files; |
4.5 镜像提交Harbor
l 登录对应服务器,到/home/xindun/workspace/docker/push目录。
l 查询要提交的images输出到images.txt,参考:docker images|grep
dfs_1.6.5_lzbank_weblogic > images.txt
l 编辑push.py中的第23行,把IP地址后面的common改成提交的项目dfs,保存。
l 执行 python push.py
l 执行 sh docker_tag.sh
l 执行 sh docker_push.sh
l 执行sh docker_rmi.sh
l 登录harbor(http://192.168.1.190/harbor/sign-in?signout=true)查看是否上传成功
4.6 镜像要求
l 启动容器后,即可启动需要的服务,无需进入容器手动启动各种服务。
l 系统需支持中文
l 系统的时区设置为Asia/Shanghai (CST, +0800)
l Dockerfile中通过EXPOSE暴露默认的端口
l 命名规范:镜像内服务名称_版本号:构建版本
l 提供启动命令
五. Swarm基础用法及规范
5.1 Swarm安装部署
l 准备3台(197 198 199)linux(CentOS Linux
release 7.5.1804 (Core))机器。
l 确保3台机器安装docker版本一样,docker –v查看。
l 在197执行:docker swarm init --advertise-addr 192.168.1.197
l 在197执行:docker swarm join-token manager,复制生成的内容到198 199执行
l 在197执行,docker node ls,显示如下即部署成功
5.2 Swarm增加节点
l 准备一台新机器(209)系统及docker版本同197.
l 增加manage节点,在197执行docker swarm join-token manager,复制生成的内容到209执行
l 增加work节点,在197执行docker swarm
join-token worker,复制生成的内容到209执行(不建议使用work节点)
l 在197执行,docker node ls,显示如下即增加节点成功
5.3 Swarm移除节点
l 移除manage节点,在想移除的机器上执行 docker swarm leave
--force
l 移除worker节点,在想移除的机器上执行 docker swarm leave
l 在197执行,docker node ls,显示如下即移除节点成功
5.4 Swarm节点更新
l 如果出现了这个情况,需要更新节点
l 执行docker swarm update mtg199
l 在执行docker node ls,显示如下即更新节点成功
六. Stack基础用法及规范
6.1 Stack常用命令
l 查看已经启动的Stack服务名称,docker stack ls
l 查看stack启动的service 对外映射的端口,docker service ls
l 查看stack的服务都启动在哪些机器上,docker stack ps
dfs_165_devops
l 进入对应的机器,执行:docker ps –a|grep
dfs_165_devops,得到容器的ID,再通过 docker exec –it 容器ID /bin/bash进入即可。
6.2 Stack目录规范
l 目录统一在/home/xindun/workspace/docker/stack
下根据不同的项目创建不同的目录,保留docker-compose.yml文件,结构如下:
6.3 Stack命名规范
l Yml文件内服务命名:启动的服务名称为yml文件中的服务名,如redis就写redis,如图
l 客户版本启动stack命名规范:项目_版本_客户名称,如:dfs_165_lzbank,注意165不能写成1.6.5
l 主线版本启动stack命名规范:项目_版本_主线部署方式,如:dfs_165_cluster,注意165不能写成1.6.5
6.4 Stack yml文件说明
l Stack 兼容compose 的 yml文件,区别不大,下面粗体是stack部分,斜体为注释
version: '3' #默认 services: redis: #自定义名称,规范为服务名称 image: tty: true #容器在后台运行 ports: - "6379" #对外映射端口,规范默认即可 deploy: replicas: 1 #在swarm中启动几组redis服务,当前版本规范写1 es: #自定义名称,规范为服务名称 image: tty: true ports: - "9200" deploy: replicas: 1 tomcat: #自定义名称,规范为服务名称 image: 192.168.1.190/common/tomcat_7092:v3 tty: true ports: - "8080" links: - redis:redis #容器内部通信使用,类似于hostname,作用替换配置文件中的IP地址 - es:es volumes: - - deploy: replicas: 1 resources: limits: cpus: "0.1" #限制CPU使用百分比,0.1表示40核*0.1=4. memory: |
6.5 Stack启动停止
l Stack启动 :启动dfs主线1.6.5版本redis单机环境,命令: docker stack deploy –c docker-compose.yml
dfs_165_alone –with-registry-auth
l Stack停止:docker
stack rm dfs_165_alone
七. 与Jenkins集成
注:只有主线版本需要在Jenkins中创建任务,客户版本手动构建。
1.在uat选项卡下点击【新建任务】
2.输入任务名称,选择“创建一个自由风格的软件项目”,点击【OK】。
任务名称命名规范:stack名称_uat,如:dfs_165_alone_uat,注意165不能写成1.6.5
3.进入创建的任务,点击左侧【配置】菜单进行配置。
4.如任务构建后有可访问的测试界面,在描述中写明访问地址。端口参照【4.2端口规划】中的设置。
勾选“丢弃旧的构建”,“保持构建的最大个数”设置为5。
5.如果代码版本管理工具用的是git,需勾选参数化构建过程,选择Git
Parameter。
输入名字,选择参数类型。
输入地址,选择已有的用户,Branch
Specifier (blank for 'any')中输入$+上图中的Name。
如代码版本管理工具用的是svn,如下图输入svn路径,选择账号。
6.点击【增加构建步骤】,选择执行shell。
7.在命令框中写入脚本命令,以下为dfs的配置示例,红色注释部分为需遵守的规范:
scp
$WORKSPACE/scripts/release.sh $WORKSPACE
cd
$WORKSPACE
export
M2_HOME=/opt/maven
export
PATH=$PATH:$M2_HOME/bin
./release.sh
# 将war包复制到197对应产品目录的testing下
scp -rp
$WORKSPACE/target/xdid.war xindun@192.168.1.197:/ home/xindun/workspace/docker/stack/dfs/master/redis-alone/backup/testing
scp -rp
$WORKSPACE/../dfs_websdk_uat/release_v1.0 xindun@192.168.1.197:/ home/xindun/workspace/docker/stack/dfs/websdk
scp -rp
$WORKSPACE/../dfs_websdk_uat/release_v2.0 xindun@192.168.1.197:/
home/xindun/workspace/docker/stack/dfs/websdk
# 脚本目录为deploy,名字与Jenkins Job名一致。
ssh xindun@192.168.1.197
"sh / home/xindun/workspace/docker/stack/dfs/master/redis-alone/backup/deploy/
dfs_165_alone_uat.sh"
dfs_165_alone_uat.sh脚本内容为:
# 重新部署前删除正在运行的旧容器
docker
stack rm dfs_165_alone
sleep 10
rm -rf /home/xindun/workspace/docker/stack/dfs/master/redis-alone/backup/testing/xdid
sleep 5
unzip /home/xindun/workspace/docker/stack/dfs/master/redis-alone/backup/testing/xdid.war
-d / home/xindun/workspace/docker/stack/dfs/master/redis-alone/backup/testing/xdid
sleep 3
rm /home/xindun/workspace/docker/stack/dfs/master/redis-alone/backup/testing/xdid.war
\cp -f /home/xindun/workspace/docker/stack/dfs/master/redis-alone/backup/conf/xindun.properties
/home/xindun/workspace/docker/stack/dfs/master/redis-alone/backup/testing/xdid/WEB-INF/conf
\cp -f /home/xindun/workspace/docker/stack/dfs/master/redis-alone/backup/conf/index.html
/home/xindun/workspace/docker/stack/dfs/websdk/release_v1.0/demo
cd /home/xindun/workspace/docker/stack/dfs/master/redis-alone
docker
stack deploy -c docker-compose.yml --with-registry-auth dfs_165_alone
sleep 10
8. 如设置了参数化构建,点击Build with Parameters,选择要构建的tag。
如没设置参数化构建,可直接点击立即构建。
Devops流程规范的更多相关文章
- Git 结合Git使用Bitbucket进行代码版本管理流程规范与实践
结合Git使用Bitbucket进行代码版本管理流程规范与实践 By:授客 QQ:1033553122 目录 目录 1 一. 测试环境 2 二. 新建项目 2 三. 新建公有版本库 3 四. ...
- 大揭秘| 我司项目组Gitlab Flow && DevOps流程
长话短说,本文全景呈现我司项目组gitlab flow && devops Git Flow定义了一个项目发布的分支模型,为管理具有预定发布周期的大型项目提供了一个健壮的框架. Dev ...
- 测试流程规范--测试准入、准出、停止标准、bug优先级定义
一.背景 最近在推进组内流程规范专项建设,从"研发测试流程"."提测规范"."测试准入标准"."bug优先级标准".&q ...
- 基于 Jenkins + Kubernetes + Argo CD 的完整 DevOps 流程记录(1) - 环境部署
一.环境准备 1.1 镜像仓库 整套 DevOps 流程使用 Harbor 作为内部镜像仓库,所有构建产物(镜像)都会推送到 Harbor,以备后续进行项目部署.Harbor 从 2.x 版本开始支持 ...
- 项目管理---git----快速使用git笔记(七)------coding.net项目管理多人操作的流程规范--合并代码审核
我们在前面已经介绍了coding.net和本地git的基本用法. 但是多人协作开发时情况会复杂得多,所以我们最好有一些规范来保证项目多人开发顺利进行. 比如说 规范一 master代码分支 需要开启 ...
- 转载 Struts2之------Action类中的get,set方法和execute方法的使用规范和使用流程(规范是没有理由的,必须遵守!!!)
1,Action中get,set方法的使用流程? 前台form中有一个<input type="text" name="username"/> 如果 ...
- 微信小程序 登录流程规范解读
一. 官方登录时序图 二. 简单理解 这里仅按照官方推荐的规范来 0. 前置条件 一共有三端: - 微信小程序客户端 - 第三方服务器端(自己搭建) - 微信服务器端 1. 客户端获得code,并将c ...
- PHP 代码规范、流程规范、git规范
1. 命名规范 (1).变量命名规范 1.变量使用驼峰命名法 禁止使用拼音或者拼音加数字 2.变量也应具有描述性,杜绝一切拼音.或拼音英文混杂的命名方式 3.变量包数字.字母和下划线字符,不允许使用其 ...
- 项目:开发->测试->上线:流程规范
1) 项目分析 2) 项目经理分工协作 程序就具体流程: 1: 按项目名称: 建git, 数据库, 线上测试虚拟机 2: 按项目经理分配的大的模块. 自行划分工作阶段 a: 划分为小的模块 b: 预估 ...
随机推荐
- 深拷贝 浅拷贝 python
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝对象及其子对象 一个很好的例子: # -*-coding:utf-8 -*- ...
- 微信小程序记账本进度二
二.1,下载微信web开发者工具 2,使用新注册的账号登录,并创建工程
- [leetcode]6. ZigZag Conversion字符串Z形排列
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...
- maven发布jar包到私服
1.setting.xml配置 <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi=&quo ...
- android app主程序启动前加载图片
android app加载启动图片需要新创建一个activity,在主activity先加载图片activity,展示过程结束后,显示主activity.具体流程如下: 一.创建图片activity的 ...
- springboot restful接口服务异常处理
一.spring boot中默认的错误处理机制 二.自定义的异常处理
- ipv6 docker
DOCKER, IPV6 BASIC CONFIGURATION OF DOCKER ENGINE WITH IPV6 SEPTEMBER 21, 2015 EYEPV6(AT)GMAIL(DOT)C ...
- BZOJ4386[POI2015]Wycieczki / Luogu3597[POI2015]WYC - 矩乘
Solution 想到边权为$1$的情况直接矩乘就可以得出长度$<=t$ 的路径条数, 然后二分check一下即可 但是拓展到边权为$2$,$3$ 时, 需要新建节点 $i+n$ 和 $i+2n ...
- 批量屏蔽符合条件的IP地址《目前仅测Centos 6 版本》
使用办法:可以将下面的sh保存到一个单独的文件中,比如ipad.sh,然后再编辑获取IP地址列表中的那段.最终的结果是需要直接获取到IP地址,一行一个,可以有多个文件,一行一个,进行重定向到指定的IP ...
- rabbitmq shovel插件
官网说明https://www.rabbitmq.com/shovel.html#management-status 启用shovel插件命令: rabbitmq-plugins enable rab ...