原理
因为我的自动化测试框架中涉及到调用java的py文件,所以在构建docker镜像中需要配置python、java的环境,否则执行项目镜像时会不通过,具体的内容包含:centos镜像、python3.x、java、node、npm的配置。
首先先下载个centos的镜像,然后启动该镜像生成一个容器,进入该容器内配置python、java、node、npm等环境,完成后退出容器,然后将该容器再构造成新的一个镜像,在项目根目录中创建Dockerfile文件,并引入该新的镜像,最后在build该镜像后运行即可执行自动化测试脚本。
一、Docker镜像下载及构建
1、运行容器及java环境配置
1. 运行命令,即自动下载centos对应的镜像,但此时镜像是关闭状态:
docker run centos:x.x 或者 docker pull centos
2. docker images 查看上述命令对应的 镜像
3. docker run -it centos:x.x /bin/bash
之后退出 exit
docker ps -a 之后, docker start imageid 启动对应的关闭状态的镜像 。
docker exec -it imageid /bin/bash 进入镜像
目前centos已停止维护,需要将镜像从 mirror.centos.org 更改为 vault.centos.org,操作步骤如下:
cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
yum makecache
yum update -y
yum -y install vim
下载java8环境:
yum install java-1.8.0-openjdk.x86_64
安装 vim 工具:
yum install vim
yum install libffi libffi-devel -y
#下载安装python编译环境依赖:
yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
#安装make编译所需的gcc,g++编译器:
yum -y install gcc automake autoconf libtool make wget
#移除centos中自带的python2.7的环境变量(可操作性可不操作):
#操作路径 /usr/bin
mv python python.bak
2、下载python3.10.4的源码压缩文件
1. 创建安装路径
mkdir -p /usr/local/python/python3
2. 进入指定路径下载python源码
#操作路径 /usr/local
wget https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tgz
解压源码压缩包
#操作路径 /usr/local
tar -zxvf Python-3.10.4.tgz
3、安装python3.10.4
编译安装环境
#操作路径 /usr/local/Python-3.10.4/
./configure --prefix=/usr/local/python/python3
进行安装python3.10.4
#操作路径要在/usr/local/Python-3.10.4
make && make install
软链接绑定
ln -s /usr/local/python/python3/bin/python3 /usr/bin/python
注意:软链接绑定是如果提示 /ur/bin/python已存在,说明之前的python2.7的软链接没有删除
验证是否安装成功
python -V
输出下方信息,证明成功了
Python 3.10.4
注意:由于centos7的yum要使用到python2.7.5的环境,我们要指定yum使用的python的版本,不然使用了3.6.8可能会导致yum命令无法使用,修改头部设置为使用python2.7
# 操作路径 /usr/bin/
vim yum
# 修改头部设置如下方
#!/usr/bin/python2.7
若上述不好使,后续可使用 wget 命令进行安装;
3、安装pip工具
因为以后安装python的库要用到pip这个工具,所以也要安装
安装pip
#操作路径 /usr/local
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
绑定软连接
ln -s /usr/local/python/python3/bin/pip3 /usr/bin/pip
验证是否安装成功
pip -V
4、安装node、使用npm命令安装crypto-js库
node安装:
下载及安装:
cd /usr/local/
mkdir node
cd node
wget https://nodejs.org/dist/v16.17.0/node-v16.17.0-linux-x64.tar.xz
tar -xvf node-v16.17.0-linux-x64.tar.xz
修改etc下的profile文件
vim /etc/profile
添加以下内容:
export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH
重启profile文件
source /etc/profile
npm安装crypto-js库
npm install crypto-js
该库的存放路径为:/usr/local/node_modules
该库主要用于我个人框架中的获取ticket所调用
需要在我的自动化项目框架中的config.yaml文件中配置该路径
二、提交安装的镜像
1.执行命令
docker commit -m="has update" -a="liwenqiang" awd3as34cs centos:v1.0
各个参数说明:
- -m: 提交的描述信息
- -a: 指定镜像作者
- awd3as34cs: ID
- centos:v1.0: 指定要创建的目标镜像名
docker images 命令来查看新镜像 centos:v1.0
2、导出镜像
docker save -o my_centos_v1.0.tar centos:v1.0
用的时候导入镜像:
docker load -i my_centos_v1.0
三、项目根目录创建Dockerfile文件,并编辑内容
根目录创建Dockerfile文件:
vi Dockerfile
FROM centos:v1.0
WORKDIR /auto_test_venv
ADD . .
RUN pip install -r package.txt
CMD ["python","run.py"]
FROM:指定的基础镜像名称,如果没有基础镜像,可以写成FROM scratch。
MAINTAINER:指定镜像作者。
EXPOSE:暴露容器运行时的监听端口。
ENV:设置环境变量。
ENTRYPOINT:镜像启动时执行的命令。
WORKDIR:为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。
ADD:把指定文件复制到镜像的某个路径下。
RUN:指令将在当前镜像基础上执行指定命令,并提交为新的镜像,命令较长时可以使用 \ 来换行。
CMD:指定启动容器时执行的命令,每个Dockerfile只能有一条CMD命令。
保存:wq
四、重新构建新镜像
项目根目录下执行:
docker build -t lwq-demo:v1 .
运行镜像即执行自动化测试脚本:
docker run lwq-demo:v1