美文网首页测试开发实践软件测试程序员
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