【软件测试基础知识】Docker容器化技术在测试平台部署中的应用

发布 : 软件测试培训      来源:软件测试干货资料

2021-08-25 10:48:24

当前,虚拟化技术在互联网后端应用非常广泛,它可以优化资源利用、方便跨域共享、实现资源隔离。对于企业中的测试人员来说,也不可避免地会接触到,所以有必要加深对它的了解和熟悉。当测试人员职业技能发展到自动化测试、测试开发层次,相应的工作也很可能会从写脚本、搭建框架,升级到开发测试平台,如何高效地实现测试平台的部署、维护,也成为测试人员需要面对的一个问题。本文就从Docker的原理开始,介绍一下Docker容器化技术在测试平台部署中的应用。

虚拟化常用的技术形式,有主机级虚拟化和容器级虚拟化两种形式。

我们通常使用的虚拟机(如VMWare WorkStation),就是典型的主机级虚拟化的形式。在宿主机硬件平台上,先安装宿主机操作系统,然后在操作系统中安装虚拟机管理器。在这个虚拟机管理器的基础之上,可以虚拟出多个硬件平台(如果你的电脑资源足够),然后每个硬件平台上再安装自己的操作系统内核,构造自己的用户空间。这种情况下,不同虚拟机之间的隔离性是非常好的,但过于重量级,消耗大量软硬件资源。

Linux内核的不断演进,使容器级虚拟化成为现实。容器级虚拟化,在宿主机硬件平台的Linux操作系统中,增加一个隔离环境管理器,借助这个隔离环境管理器,直接分出若干个用户空间。这些用户空间中部分资源共享,其他资源则实现彻底的隔离。

容器级虚拟化,是借助于Linux内核的三大技术来实现的。这三大技术就是Chroot、名称空间和CGroups。

Chroot是操作系统级的虚拟机,它可以将指定位置作为/根目录,将程序运行限制在指定根目录中,从而实现操作系统中虚拟出多个根目录,实现了可视化的隔离。

名称空间总共有Mount(文件系统)、UTS(主机名、域名)、IPC(信号量、消息队列、共享内存)、PID(进程编号)、NetWork(网络设备、网络栈、端口等)、User(用户、用户组)六个。从Linux2.4.19开始,直到3.8版本,依次实现了对这六个名称空间的隔离。

CGroups,用来为隔离的用户空间按比例分配CPU、内存等资源。

在以上技术的支撑下,通过系统调用,即可实现容器级虚拟化。但对普通用户来说,系统调用难度太大,于是在Sourceforge上产生了一个叫做LXC的项目。LXC是LinuX Container的简称,它通过二次开发,把系统调用和操作封装成了一组工具。它最早把完整的容器技术用一组工具和模板实现。但它也存在一些问题,如模板需要高度定制,文件和数据迁移困难,对容器批量创建的支持有限,隔离性不够好。于是,在2013年初,在LXC基础上,dotCloud公司推出了开源项目Docker,让用户不用关心容器内部的管理,操作更加简捷。

Docker不是容器,容器是Linux内核支持的功能,而Docker是容器化的简化工具。Docker通过镜像技术 ,把用户空间所需文件整体编排好,打包成镜像文件,放在一个集中的仓库。生成用户空间时,连到服务器上,找到镜像,拖到本地,基于镜像启动容器。这极大地降低了容器的使用难度。在一个容器中只运行一个主进程,进程终止,容器终止。分发部署容易,真正实现了“一次编写到处运行”。

Docker架构如下:

(1)Docker 守护进程(Daemon)

Docker守护进程(dockerd)监听Docker API请求,并管理Docker对象,如镜像(Images)、容器(Containers)、网络(Networks)和卷(Volumes)。守护进程还可以与其他守护进程通信来管理Docker服务。

(2)Docker 客户端(Client)

Docker客户端(Docker)是Docker用户与Docker交互的主要方式。当你使用像docker run这样的命令时,客户端将这些命令发送给dockerd,由dockerd执行它们。docker命令会使用到docker API。Docker客户端可以与多个守护进程通信。

(3)Docker 仓库(registry)

Docker Registry存储Docker镜像。在这些Registry中,Docker Hub是一个任何人都可以使用的公共注册中心,默认情况下,Docker被配置为在Docker Hub上查找镜像。您甚至可以运行自己的私有Registry。当你使用docker pull或docker run命令时,所需的镜像会从你配置的Registry中提取出来。当你使用docker push命令时,你的镜像会被推送到你配置的Registry中。Registry包含很多个Repository,例如,我们可以在Docker hub上查看其下的Repository,它们通常按用户、镜像中的程序划分。

Docker安装步骤如下:

(1)如果已经安装旧版,可以卸载:

yum remove docker docker-common docker-selinux docker-engine

(2)安装基础依赖

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

(3)增加docker yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

(4)如果连接不上,可以使用以下中国科学技术大学的yum源

yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

(5)如果报错,删除对应文件

cd /etc/yum.repos.d/

删除mirrors.ustc.edu.cn相关文件后再增加yum源。

(6)查看docker版本

yum list docker-ce --showduplicates

(7)安装docker

yum install -y docker-ce

(8)如果需要安装指定版本,如下

yum install -y docker-ce-18.06.3.ce

(9)启动docker

systemctl start docker

(10)设置开机启动docker

systemctl enable docker

(11)验证安装

docker run hello-world

公共Registry如Dockerhub上的镜像,不能满足各种不同生产环境的需要,需要以它们为基础镜像,制作符合应用场景的新镜像。基础镜像由专门的开发人员开发,如Docker开发人员,或各种应用程序官方制作,使用者基于基础镜像制作新镜像。

镜像制作,就是基于已有基础镜像,运行容器,修改镜像运行为容器时的可写层,再将可写层也制作进镜像。可以使用Dockerfile制作镜像。

例如,我们使用Django开发了一个测试项目,就可以使用Dockerfile来制作一个镜像,方便在不同环境下部署。

Docker File内容如下:

FROM centos:7.5.1804

LABEL maintainer="ericzx "

RUN yum -y install epel-release && \

yum makecache && \

yum -y groupinstall "Development tools" && \

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel gcc automake autoconf libtool make wget && \

yum clean all && \

rm -rf /var/cache/yum/*

RUN cd /usr/local/src/ && \

wget https://npm.taobao.org/mirrors/python/3.7.0/Python-3.7.0.tar.xz && \

tar -xvJf Python-3.7.0.tar.xz && \

cd Python-3.7.0 && \

./configure --prefix=/usr/local/bin/python3 && \

make && make install && \

ln -s /usr/local/bin/python3/bin/python3 /usr/bin/python3 && \

ln -s /usr/local/bin/python3/bin/pip3 /usr/bin/pip3

RUN yum -y install python-pip && \

yum clean all && \

rm -rf /var/cache/yum/*

RUN pip3 install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/ && \

pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple/ && \

pip3 install pipenv && \

pip3 install django==2.1.8 && \

pip3 install xlrd && \

pip3 install jsonpath && \

pip3 install requests && \

pip3 install pymysql && \

pip3 install djangorestframework

ARG proj_name=""

ENV proj_home="/data/web/projects/"

ENV p_name=${proj_name}

ADD ${proj_name}.tar.gz ${proj_home}

WORKDIR ${proj_home}${p_name}

VOLUME ${proj_home}

RUN /usr/bin/python3 ${proj_home}${p_name}/manage.py makemigrations && \

/usr/bin/python3 ${proj_home}${p_name}/manage.py migrate && \

mkdir -p /usr/zx/${p_name}/index/upload

CMD /usr/bin/python3 ${proj_home}${p_name}/manage.py runserver 0.0.0.0:9000

写好Docker File后,可以使用如下命令生成镜像:

docker commit容器名 Repository名称:标签名

我们可以把生成好的镜像推送到镜像Registry,可以选择Docker Hub,或者阿里云Registry,或者私有Registry。推送命令如下(以阿里云镜像服务为例):

docker login --username=xxxx \

registry.cn-beijing.aliyuncs.com

docker tag \

ericzx/xxxx:v0.5 \

registry.cn-beijing.aliyuncs.com/ericzx/xxxx:v0.5 xxxx为标签名

docker push \

registry.cn-beijing.aliyuncs.com/ericzx/xxxx:v0.5

如果要将该镜像拉取到本地,应执行

docker image pull registry.cn-beijing.aliyuncs.com/ericzx/xxxx:v0.5

还可以使用docker run命令直接运行该镜像:

docker run -it --name xx --rm registry.cn-beijing.aliyuncs.com/ericzx/xxxx:v0.5

xx 为容器名称。

THE END  

声明:本站稿件版权均属中公教育优就业所有,未经许可不得擅自转载。

领取零基础自学IT资源

涉及方向有Java、Web前端、UI设计、软件测试、python等科目,内容包含学习路线、视频、源码等

点击申请领取资料

点击查看资料详情 

收起 


 相关推荐

问题解答专区
返回顶部