基于Docker创建20台Linux虚拟机,通过Ansible批量管理20台机器

提前安装和启动Docker服务;

systemctl start docker.service

查看Docker进程状态;

ps -ef|grep -aiE docker
创建一个基础的 Dockerfile(可选)
虽然可以直接运行容器而不必创建自定义镜像,但为了更好地适应你的需求,你可以创建一个简单的 Dockerfile:

FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ubuntu:latest
RUN apt-get update && apt-get install -y openssh-server python3-minimal sudo
RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

基于ubuntu镜像创建20台虚拟机;

[root@gitlab ansible-docker]# cat start_20_containers.sh

#!/bin/bash

# 清空现有的 inventory 文件
echo "[docker_hosts]" > ./inventory

for i in $(seq 1 20); do
	    PORT=$((2222 + $i))
	        NAME="docker_host_$i"
		    docker run -d --name $NAME -p $PORT:22 my-ubuntu
		        IP="localhost"
			    echo "$IP:$PORT ansible_user=root ansible_ssh_pass=root" >> ./inventory
		    done

查看已经启动的20台Linux虚拟机的状态;

docker ps|grep -aiE ubuntu

查看已经启动的20台Linux虚拟机的IP地址;

for i in $(docker ps | grep my-ubuntu | awk '{print $1}'); do docker inspect --format='{{.Network
Settings.IPAddress}}' $i; done

将20台Linux虚拟机的IP信息写入/etc/ansible/hosts文件中;

for i in $(docker ps | grep my-ubuntu | awk '{print $1}'
); do docker inspect --format='{{.NetworkSettings.IPAddress}}' $i; done >>/etc/ansible
/hosts

给所有容器安装ssh服务并启动

for container in $(docker ps --format "{{.Names}}"); do
    echo "Setting up SSH in container: $container"
    docker exec -it $container apt update > /dev/null
    docker exec -it $container apt install -y openssh-server sudo > /dev/null
    docker exec -it $container sh -c "echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config"
    docker exec -it $container /usr/sbin/sshd
done

给所有容器上传公钥,方便互信

for i in {2..21}; do
    sshpass -p 'root' ssh-copy-id -o StrictHostKeyChecking=no root@172.172.0.$i
done

最后测试
ansible cicd -m shell -a 'w
'

posted @ 2025-05-15 15:58  还得多长时间·  阅读(68)  评论(0)    收藏  举报
//雪花飘落效果