测试开发之系统篇-Docker 常用操作
Posted 酔清风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试开发之系统篇-Docker 常用操作相关的知识,希望对你有一定的参考价值。
Docker 容器(Container)的运行基于镜像(image),您可以在Docker Hub上检索,或通过 Dockerfile 文件自己构建镜像。
首先拉取MySQL 官方镜像的最新版(latest)。
docker pull mysql
使用 docker images 显示本地的镜像。
docker images
使用 docker run 命令来运行容器,-d 设置在后台运行,并返回容器 ID。
docker run -itd --name db-server -e MYSQL_ROOT_PASSWORD=P2ssw0rd mysql
使用 docker ps 查看正在运行的镜像,-a 参数显示所有实例。
docker ps -a
使用 docker exec 命令,可进入容器内部系统的 Shell。
docker exec -it db-server /bin/bash
在容器内完成相应操作/修改后,commit 命令可提交更新到指定的镜像。
docker commit -m "update" -a "aaron" db-server registry.cn-shanghai.aliyuncs.com/aaron-share/db-server
更新本地镜像到镜像管理服务器,此处先完成了到阿里云镜像服务器的登录。
docker login --username=18626200000 registry.cn-shanghai.aliyuncs.com
docker push registry.cn-shanghai.aliyuncs.com/aaron-share/db-server:latest
以下命令分别删除容器和镜像,-f 可强制删除运行中的容器。
docker rm -f db-server
docker rmi registry.cn-shanghai.aliyuncs.com/aaron-share/db-server
下面,我们简单介绍下,如何使用 Dockerfile 来构建镜像。以下 Dockerfile 以官方 ubuntu 系统镜像为起点,完成了一个简单的示例。
FROM ubuntu:latest # 基准镜像
MAINTAINER aaron # 作者信息
ARG APT=apt-get # 临时变量,构建容器时有效
RUN $APT update \\ # 构建容器时执行的命令
&& $APT install -y curl \\
&& rm -rf /var/lib/apt/lists/*
CMD [ "curl", "-s", "http://baidu.com" ] # 运行容器时执行的命令
然后,就可以使用 docker build 命令来构建镜像。
docker build -t registry.cn-shanghai.aliyuncs.com/aaron-share/ubuntu-server:latest .
软件测试中,我们通常使用预制好的、不同环境的 Docker 镜像,来进行相应的测试。
可以使用上述的 docker exec 命令进入容器,执行测试命令;也可以直接在宿主机上执行 docker run 来执行测试。
docker run -i --rm \\
--name testng-in-docker
-v "$(pwd)":/usr/src/mymaven
-v ~/.m2:/root/.m2 -w /usr/src/mymaven
maven:latest
mvn clean test
以上使用了 Java 常见的 Maven 构建工具来执行测试,-v 表示从宿主机到容器的路径映射,它
- 通过 $(pwd) 命令获取当前项目路径,并映射到了容器内部的/usr/src/mymaven 目录;
- 将 Maven 类库的根目录~/.m2,映射到了容器内部的/usr/src/mymaven 目录;
- 拉取、运行名为 maven 的容器镜像的 latest 版本;
- 容器启动时,立即运行 mvn clean test 命令执行测试;
- 运行结束后容器直接退出,测试结果位于当前路径下。
另外,Docker Compose 是一个用于定义和运行多容器的工具,如果您的服务包括了多个相互依赖的容器,可以使用他来编排、启动所有服务。详情可以参考这篇文章。
本人在开源项目中,实现了基于 Docker 容器的按需测试环境管理,详情请参照网址GitHub - easysoft/zagent。
以上是关于测试开发之系统篇-Docker 常用操作的主要内容,如果未能解决你的问题,请参考以下文章