打造一个好用的测试容器

「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战」。

背景

目前团队中的硬件资源总是挪来挪去,我在上面部署的测试虚机总是会被清理,重新搭建又很麻烦,要安装一堆的测试工具。为了彻底解决这个问题,我计划将打造一个测试容器,在需要的时候直接 docker run 就行了,几秒搞定测试机器。

需要明确的

  1. 测试机容器需要能够上网,本次通过在 host 配置代理,容器内部通过 host 的代理访问公网。
  2. 测试机使用 docker bridge 网络,所以需要 host 能够访问测试环境。
  3. 源镜像已经安装 python3、修改好镜像源(这些操作也可以在 Dockerfile 中做)。

Dockerfile

提前将需要用到的文件(jdk-8u311-linux-x64.tar.gzShanghai)拷贝到 Dockerfile 路径下。

Shanghai 的来源:cp /etc/localtime Shanghai

Shanghai 的用处:为了让容器和宿主机时区信息一致。

FROM py3:v1
MAINTAINER phyger

ADD Shanghai /etc/localtime

ENV http_proxy=http://172.17.0.1:8888
ENV https_proxy=http://172.17.0.1:8888

RUN yum install openssh-server -y && \
    yum provides sshd && \
    yum install git -y && \
    yum install passwd -y && \
    yum install wget -y && \
    mkdir /usr/java && cd /usr/java && \
    sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config && \
    ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key && \
    ssh-keygen -t ecdsa -P "" -f /etc/ssh/ssh_host_ecdsa_key && \
    ssh-keygen -t dsa -P "" -f /etc/ssh/ssh_host_dsa_key && \
    ssh-keygen -t ed25519 -P "" -f /etc/ssh/ssh_host_ed25519_key && \
    echo "root:admin" | chpasswd

ADD jdk-8u311-linux-x64.tar.gz /usr/java/

RUN cd /usr/java/ && cp -pr jdk1.8.0_311 default

ENV JAVA_HOME=/usr/java/jdk1.8.0_311
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib

EXPOSE 22

CMD ["-D"]

ENTRYPOINT ["/usr/sbin/sshd"]
复制代码

为了让我们的容器具备 ssh 功能,我们的 ENTRYPOINT 使用 sshd 启动。同时我们在 Dockerfile 中安装了很多测试容器需要的软件和 JDK、生成了秘钥、打开了 root 用户登录、设置了环境变量。

构建镜像

docker build -t py3:v2 .

镜像构建

构建结果

ssh 登录测试

启动容器:

docker run -d --name py3 py3:v2

修改登录密码:

[root@x86build lifei]# docker exec -it bf40806f8f6e bash
[root@bf40806f8f6e /]# passwd
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
复制代码

修改完成退出容器!

查看容器地址:

查看容器地址

登录:

[root@x86build lifei]# ssh [email protected]
[email protected]'s password:
Last login: Wed Nov 10 10:02:15 2021 from 172.17.0.1
[root@bf40806f8f6e /]#
复制代码

登录成功!

接下来我们就可以将测试机接入 Jenkins 进行测试工作了。

猜你喜欢

转载自juejin.im/post/7033354491743174687