芯盾时代_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
docker-client-latest docker-common docker-latest docker-latest-logrotate
docker-logrotate docker-selinux docker-engine-selinux docker-engine

# 安装一些必要的系统工具

yum install -y yum-utils
device-mapper-persistent-data lvm2

# 添加软件源信息

yum-config-manager --add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.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":
["192.168.1.190"]

}

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
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH    #指定环境变量

ADD init.sh /init.sh    # 在镜像中添加文件

RUN chmod 755 /init.sh    #修改文件中镜像中的权限

EXPOSE 9200    #指定暴露端口  *

CMD ["/bin/bash"]   # 启动脚本指定

l  Dockerfile build基础镜像命名规范,镜像内服务名称_版本号:构建版本,示例

[xindun@svr197
~/workspace/docker/dockerfile/es_2.3.5]# ll

-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
~/workspace/docker/dockerfile/es_2.3.5]# pwd

/home/xindun/workspace/docker/dockerfile/es_2.3.5

[xindun@svr197 ~/workspace/docker/dockerfile/es_2.3.5]# docker
build -t es_2.3.5:v0.3 .

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
datafile '/u01/app/oracle/oradata/XE/mfa_zybank.dbf' size 128m autoextend on;

# 创建用户并制定表空间

create user mfa_zybank
identified by 123456 default tablespace 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:
192.168.1.190/common/redis_4.0.6:v0.2  #启动的依赖镜像,注意冒号后要一个空格

tty: true  #容器在后台运行

ports:

- "6379"  #对外映射端口,规范默认即可

 deploy:

                    replicas: 1  #在swarm中启动几组redis服务,当前版本规范写1

es:   #自定义名称,规范为服务名称

image:
192.168.1.190/common/es_235:v3

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:

-
./backup/stable/xdid/:/home/xindun/tomcat-7.0.92/webapps/xdid/  #映射本地程序目录到容器中,适用于主线版本

-
./backup/stable/websdk/:/home/xindun/tomcat-7.0.92/webapps/ROOT/

 deploy:

                   replicas: 1

resources:

                           limits:

                                   cpus: "0.1" #限制CPU使用百分比,0.1表示40核*0.1=4.

                                   memory:
"8g"
#限制内存使用8G

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流程规范的更多相关文章

  1. Git 结合Git使用Bitbucket进行代码版本管理流程规范与实践

    结合Git使用Bitbucket进行代码版本管理流程规范与实践   By:授客 QQ:1033553122   目录 目录 1 一. 测试环境 2 二. 新建项目 2 三. 新建公有版本库 3 四. ...

  2. 大揭秘| 我司项目组Gitlab Flow && DevOps流程

    长话短说,本文全景呈现我司项目组gitlab flow && devops Git Flow定义了一个项目发布的分支模型,为管理具有预定发布周期的大型项目提供了一个健壮的框架. Dev ...

  3. 测试流程规范--测试准入、准出、停止标准、bug优先级定义

    一.背景 最近在推进组内流程规范专项建设,从"研发测试流程"."提测规范"."测试准入标准"."bug优先级标准".&q ...

  4. 基于 Jenkins + Kubernetes + Argo CD 的完整 DevOps 流程记录(1) - 环境部署

    一.环境准备 1.1 镜像仓库 整套 DevOps 流程使用 Harbor 作为内部镜像仓库,所有构建产物(镜像)都会推送到 Harbor,以备后续进行项目部署.Harbor 从 2.x 版本开始支持 ...

  5. 项目管理---git----快速使用git笔记(七)------coding.net项目管理多人操作的流程规范--合并代码审核

    我们在前面已经介绍了coding.net和本地git的基本用法. 但是多人协作开发时情况会复杂得多,所以我们最好有一些规范来保证项目多人开发顺利进行. 比如说 规范一 master代码分支  需要开启 ...

  6. 转载 Struts2之------Action类中的get,set方法和execute方法的使用规范和使用流程(规范是没有理由的,必须遵守!!!)

    1,Action中get,set方法的使用流程? 前台form中有一个<input type="text" name="username"/> 如果 ...

  7. 微信小程序 登录流程规范解读

    一. 官方登录时序图 二. 简单理解 这里仅按照官方推荐的规范来 0. 前置条件 一共有三端: - 微信小程序客户端 - 第三方服务器端(自己搭建) - 微信服务器端 1. 客户端获得code,并将c ...

  8. PHP 代码规范、流程规范、git规范

    1. 命名规范 (1).变量命名规范 1.变量使用驼峰命名法 禁止使用拼音或者拼音加数字 2.变量也应具有描述性,杜绝一切拼音.或拼音英文混杂的命名方式 3.变量包数字.字母和下划线字符,不允许使用其 ...

  9. 项目:开发->测试->上线:流程规范

    1) 项目分析 2) 项目经理分工协作 程序就具体流程: 1: 按项目名称: 建git, 数据库, 线上测试虚拟机 2: 按项目经理分配的大的模块. 自行划分工作阶段 a: 划分为小的模块 b: 预估 ...

随机推荐

  1. 深拷贝 浅拷贝 python

    1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝对象及其子对象 一个很好的例子: # -*-coding:utf-8 -*- ...

  2. 微信小程序记账本进度二

    二.1,下载微信web开发者工具 2,使用新注册的账号登录,并创建工程

  3. [leetcode]6. ZigZag Conversion字符串Z形排列

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...

  4. maven发布jar包到私服

    1.setting.xml配置 <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi=&quo ...

  5. android app主程序启动前加载图片

    android app加载启动图片需要新创建一个activity,在主activity先加载图片activity,展示过程结束后,显示主activity.具体流程如下: 一.创建图片activity的 ...

  6. springboot restful接口服务异常处理

    一.spring boot中默认的错误处理机制 二.自定义的异常处理

  7. ipv6 docker

    DOCKER, IPV6 BASIC CONFIGURATION OF DOCKER ENGINE WITH IPV6 SEPTEMBER 21, 2015 EYEPV6(AT)GMAIL(DOT)C ...

  8. BZOJ4386[POI2015]Wycieczki / Luogu3597[POI2015]WYC - 矩乘

    Solution 想到边权为$1$的情况直接矩乘就可以得出长度$<=t$ 的路径条数, 然后二分check一下即可 但是拓展到边权为$2$,$3$ 时, 需要新建节点 $i+n$ 和 $i+2n ...

  9. 批量屏蔽符合条件的IP地址《目前仅测Centos 6 版本》

    使用办法:可以将下面的sh保存到一个单独的文件中,比如ipad.sh,然后再编辑获取IP地址列表中的那段.最终的结果是需要直接获取到IP地址,一行一个,可以有多个文件,一行一个,进行重定向到指定的IP ...

  10. rabbitmq shovel插件

    官网说明https://www.rabbitmq.com/shovel.html#management-status 启用shovel插件命令: rabbitmq-plugins enable rab ...