背景
目前团队中的硬件资源总是挪来挪去,我在上面部署的测试虚机总是会被清理,重新搭建又很麻烦,要安装一堆的测试工具。为了彻底解决这个问题,我计划将打造一个测试容器,在需要的时候直接 docker run
就行了,几秒搞定测试机器。
需要明确的
- 测试机容器需要能够上网,本次通过在
host
配置代理,容器内部通过host
的代理访问公网。 - 测试机使用
docker bridge
网络,所以需要host
能够访问测试环境。 - 源镜像已经安装
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 .
网络异常,图片无法展示
|
网络异常,图片无法展示
|
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 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
进行测试工作了。