美文网首页测试开发实践软件测试程序员
Docker - 通过搭建 XTest 测试系统学习 Docke

Docker - 通过搭建 XTest 测试系统学习 Docke

作者: 严北 | 来源:发表于2018-03-27 15:01 被阅读136次

本文为记录并讲解 通过参考 xtest 测试系统环境搭建教程,构建 Dockerfile 的过程。

xtest 环境搭建参照官方文档:http://xtest.readthedocs.io/zh/latest/src/local_install.html


正文

以下是完整的 Dockerfile 及注释,Dockerfile 完整项目可在 GitHub xtest-docker 查看。

FROM

根据基本环境部分可知,Docker 的基本镜像应选择 Ubuntu 14.04/16.04 版本。此处我选择 Ubuntu 16.04,用语法 FROM 来指定 Docker hub 上已有的镜像。

FROM ubuntu:16.04

RUN

安装 Python3 的操作

  • 在安装前先执行 apt-get update 是好习惯,该命令能保证当前使用的源是你修改后的,避免找不到安装包的情况。
  • 语法 RUN 表示执行其后的 SHELL 代码。由于每个 RUN 都是独立运行的,因此 apt-get update 和后面安装的命令需要在一个 RUN 中,避免 Docker 在构建过程中使用原有的缓存作为 RUN apt-get update 的结果。
  • 关于每个 RUN 独立运行,你可以这样理解: 假设你在第一个 RUN 中执行 cd xxx , 第二个 RUN 中执行 ls , 此时 ls 输出的是 xxx 上级目录的内容。
RUN apt-get update && \
    apt-get install python3 python3-dev python3-pip -y

创建软链接,将 python 命令指向 python3

RUN ln -s /usr/bin/python3 /usr/bin/python

安装一些额外的必须的工具

RUN apt-get install -y wget xz-utils git

ENV

安装 NodeJS

使用 ENV 语法设置环境变量

格式有两种:ENV <key> <value>ENV <key1>=<value1> <key2>=<value2>...,选其一即可

ENV NODE_VERSION 8.10.0

参照官方文档[1],下载 nodejs 源码,解压并安装

RUN wget https://npm.taobao.org/mirrors/node/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz
RUN mkdir /usr/local/lib/nodejs
RUN tar -xJvf node-v$NODE_VERSION-linux-x64.tar.xz -C /usr/local/lib/nodejs && rm -rf /node-v$NODE_VERSION*
RUN mv /usr/local/lib/nodejs/node-v$NODE_VERSION-linux-x64 /usr/local/lib/nodejs/node-v$NODE_VERSION

nodejs 的安装路径添加到 PATH 中,方便后面执行 npm 命令

ENV PATH=/usr/local/lib/nodejs/node-v$NODE_VERSION/bin:$PATH

下载 xtest 前端源码到 /www 目录中

RUN mkdir /www && cd /www && git clone https://github.com/x-utest/xtest-web.git

COPY

COPY 操作将宿主机上的文件拷贝至容器中,用于编译。

还有个与 COPY 类似的命令 ADD,推荐阅读博文[2]

COPY config.js /www/xtest-web/src/config.js

安装前端项目需要的工具,并编译

RUN cd /www/xtest-web && npm install && npm run build

后端依赖包的安装,不做赘述

RUN git clone https://github.com/our-dev/dtlib.git && \
    cd dtlib && ./install.sh && rm -rf /dtlib
RUN git clone https://github.com/x-utest/xtest-server-base.git && \
    cd xtest-server-base && ./install.sh && rm -rf /xtest-server-base

通过 pip install -f 安装依赖包

在此步,通过 pip3 install -r requirements.txt, 在编写一个 Python 项目时都可以通过将依赖包写入 requirements.txt 中,方便其他人安装。

RUN git clone https://github.com/x-utest/xtest-server.git && \
    cd xtest-server && pip3 install -r requirements.txt

Nginx 的安装

直接通过 apt 安装即可,方便之后用命令行启动 nginx 服务。
通过软链接,将 xtest-server 中提供的 nginx 配置文件添加到 /etc/nginx/conf.d/ 目录中,此后重启 nginx 服务便自动监听请求并转发到 xtest 后端。

RUN apt-get install nginx -y
RUN cd /etc/nginx/conf.d/ && ln -s /xtest-server/nginx_config/* .

安装 MongoDB

  • 安装过程参考官方教程[3]
  • 原先是采用下载源码方式安装,但是在安装完成后发现 mongo 目录未添加到环境变量 PATH 中,因此每次启动时会报 Command not found,尝试解决未果后换成通过 apt 安装。希望有朋友知道解决方法的可以留言告知,感谢!
ENV MONGO_VERSION 3.2.7
RUN \
  apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 && \
  echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-3.2.list && \
  apt-get update && \
  apt-get install -y mongodb-org=$MONGO_VERSION \
  mongodb-org-server=$MONGO_VERSION \
  mongodb-org-shell=$MONGO_VERSION \
  mongodb-org-mongos=$MONGO_VERSION \
  mongodb-org-tools=$MONGO_VERSION && \
  rm -rf /var/lib/apt/lists/*

mongodb.conf 文件拷贝至容器中,该文件写好后台运行等配置,启动 mongo 时需要指定该文件。

COPY mongodb.conf /data/mongodb.conf

将启动文件拷贝至容器,其中 init_mongo.sh 是初始化数据库脚本, start.sh 则是在初始化后的启动脚本,包括启动 mongo 和 启动 xtest-server 等操作。

COPY start.sh /data/start.sh
COPY init_mongo.sh /data/init_mongo.sh

VOLUME

通过 VOLUME 指令创建挂载点。这种方式创建的挂载点可以与其他容器共享数据,具体可参考博文[4]

VOLUME ["/data/db"]

WORKDIR

通过 WORKDIR 指令设置默认工作目录为 /data, 每次进入容器可以发现默认路径已经是 /data

WORKDIR /data

CMD

通过 CMD 指令设置启动容器时默认执行的命令。
推荐阅读[5] RUN vs CMD vs ENTRYPOINT

CMD ["./start.sh"]

EXPOSE

EXPOSE 指令设置了容器启动时对外开放的端口号,若宿主机通过 -p xxx:xxx 参数启动容器映射端口号,可以方便地接收转发的消息。

EXPOSE 8009 8099

参考

[1]NodeJS 安装教程
[2]Dockerfile 指令 ADD 和 COPY介绍 - 51kata - 博客园
[3]Install MongoDB Community Edition on Ubuntu
[4]Dockerfile 指令 VOLUME 介绍 - 51kata - 博客园
[5]RUN vs CMD vs ENTRYPOINT - 每天5分钟玩转 Docker 容器技术

相关文章

网友评论

本文标题:Docker - 通过搭建 XTest 测试系统学习 Docke

本文链接:https://www.haomeiwen.com/subject/wnqscftx.html