「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战」。
背景
目前团队中的硬件资源总是挪来挪去,我在上面部署的测试虚机总是会被清理,重新搭建又很麻烦,要安装一堆的测试工具。为了彻底解决这个问题,我计划将打造一个测试容器,在需要的时候直接 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
进行测试工作了。