超好用 | 用容器做测试机_java


背景

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

需要明确的

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

Dockerfile

提前将需要用到的文件(​​jdk-8u311-linux-x64.tar.gz​​​、​​Shanghai​​​)拷贝到 ​​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 .​

超好用 | 用容器做测试机_linux_02镜像构建超好用 | 用容器做测试机_linux_03构建结果

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.

修改完成退出容器!

查看容器地址:

超好用 | 用容器做测试机_java_04查看容器地址

登录:

[root@x86build lifei]# ssh root@172.17.0.10
root@172.17.0.10's password:
Last login: Wed Nov 10 10:02:15 2021 from 172.17.0.1
[root@bf40806f8f6e /]#

登录成功!

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