全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 4601|回复: 22

开源 - 快速生成docker小鸡的方法(类似openvz)

[复制链接]
发表于 2018-3-2 00:36:42 | 显示全部楼层 |阅读模式
本帖最后由 摸鱼小熊猫 于 2018-3-2 01:30 编辑

先上脚本源码:

  1. # usage: xiaoji number?
  2. # for example: xiaoji 30 # --> create 30 containers
  3. # script status: pass
  4. # platform: virmach vps with 768M memory
  5. # need docker env and make sure kernel version >3.10
  6. # default OS debian


  7. if [ $# != 1 ];then
  8.         echo -ne "need 1 parameters!!!\nusage: $0 container_numbers\n"
  9.         exit ;
  10. fi

  11. apt-get update -y || yum update -y
  12. apt-get install -y ansible sshpass || yum install -y ansible sshpass
  13. rm /root/xiaoji /etc/ansible/host
  14. docker rm -f `docker ps -aq`
  15. numbers=$(($1+1))

  16. for i in `seq 2 $numbers`
  17. do
  18.         echo -ne "172.17.0.$i\n" >> /etc/ansible/host
  19. done

  20. #expressions=("这里替换成自己的镜像" "镜像2" "镜像3") #生成的小鸡,系统会从这里面随机选择一个
  21. expressions=("rastasheep/ubuntu-sshd") #如果只写一个类似这样,那所有的小鸡都是ubuntu系统,建议用自己定制的docker镜像
  22. for i in `seq 2 $numbers`
  23. do
  24.         #docker run -d -m 1024M --cpuset-cpus=0-2 --cpu-shares=10 --name ssh_$i -p $((1000+$i)):22 $2  #限制小鸡cpu和内存
  25.         image_name=${expressions[$RANDOM % ${#expressions[@]} ]}
  26.         echo `echo $image_name | cut -d \/ -f 2 | cut -d \- -f 2` >> os
  27.         docker run -itd -m 512M --restart=always --name ssh_$i -p $((1000+$i)):22 $image_name
  28. done

  29. rm -f /root/.ssh/known_hosts

  30. #ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa #如果还没有生成密钥对,取消前面的注释,否则后续必定失败
  31. sed -i '/StrictHostKeyChecking/s/^#//; /StrictHostKeyChecking/s/ask/no/' /etc/ssh/ssh_config

  32. while read ip
  33. do
  34.         sshpass -p root ssh-copy-id $ip
  35. done< /etc/ansible/host

  36. echo '[containers]' > /etc/ansible/hosts
  37. cat /etc/ansible/host >> /etc/ansible/hosts

  38. while read container_ip
  39. do
  40.         random_passwd=`echo $RANDOM | md5sum | cut -c 1-18`
  41.         ansible $container_ip -m shell -a "echo root:$random_passwd | chpasswd"
  42.         container_last_ip=`echo $container_ip | cut -d \. -f 4`
  43.         host_ip=`hostname -I | cut -d " " -f 1`
  44.         echo -ne "ssh_$container_last_ip\t$container_host_ip\t$((1000+$container_last_ip))\tssh -p $((1000+$container_last_ip)) $host_ip\t$random_passwd\n" >> tmp
  45. done < /etc/ansible/host

  46. paste tmp os > /root/xiaoji && rm tmp os
复制代码


因为要记录生成的随机密码,所以单线程生成小鸡比较慢,要是不记录密码生成小鸡的速度可以提高很多
要是大佬们有更好的方式,欢迎pm我
效果图:
QQ截图20180302001609.png (31.25 KB, 下载次数: 0)
QQ截图20180302002100.png (115.73 KB, 下载次数: 0)
图片内容:
  1. ssh_2           1002    ssh -p 1002 107.174.221.14      17339ff82b1dec1788      debian
  2. ssh_3           1003    ssh -p 1003 107.174.221.14      a002bd37a510e33805      debian
  3. ssh_4           1004    ssh -p 1004 107.174.221.14      3c5b43257fdce6942b      centos
  4. ssh_5           1005    ssh -p 1005 107.174.221.14      9b6ab5e6833f57f95b      debian
  5. ssh_6           1006    ssh -p 1006 107.174.221.14      438799f9ff489ac0a0      centos
  6. ssh_7           1007    ssh -p 1007 107.174.221.14      6e904934bcfeaf647e      centos
  7. ssh_8           1008    ssh -p 1008 107.174.221.14      1e36f9732d20448175      centos
  8. ssh_9           1009    ssh -p 1009 107.174.221.14      30050b34defe2bbedc      debian
  9. ssh_10          1010    ssh -p 1010 107.174.221.14      61f30dd07c86168ec0      debian
  10. ssh_11          1011    ssh -p 1011 107.174.221.14      a781b4a21419abfdf5      centos
  11. ssh_12          1012    ssh -p 1012 107.174.221.14      1c9c7908b3f2068959      debian
  12. ssh_13          1013    ssh -p 1013 107.174.221.14      a9220d70fbdb754e57      debian
  13. ssh_14          1014    ssh -p 1014 107.174.221.14      5b0d816b3607dbeb42      debian
  14. ssh_15          1015    ssh -p 1015 107.174.221.14      c9b3b21479862fee90      centos
  15. ssh_16          1016    ssh -p 1016 107.174.221.14      dc61cbe19b2f277c7b      centos
  16. ssh_17          1017    ssh -p 1017 107.174.221.14      35a37d1213cd4aa960      centos
  17. ssh_18          1018    ssh -p 1018 107.174.221.14      59ec818a0749559a7f      centos
  18. ssh_19          1019    ssh -p 1019 107.174.221.14      f42cf99bdddff43a00      debian
  19. ssh_20          1020    ssh -p 1020 107.174.221.14      e4519e55181d1b3d61      debian
  20. ssh_21          1021    ssh -p 1021 107.174.221.14      d6a043822b7916c1b7      debian
  21. ssh_22          1022    ssh -p 1022 107.174.221.14      dcece22318d4b14dce      debian
  22. ssh_23          1023    ssh -p 1023 107.174.221.14      2635b422c8b660e6a1      debian
  23. ssh_24          1024    ssh -p 1024 107.174.221.14      93342c7ee7a7f79a37      debian
  24. ssh_25          1025    ssh -p 1025 107.174.221.14      6fe8c72538d8ffbf36      centos
  25. ssh_26          1026    ssh -p 1026 107.174.221.14      80c1fd5ca734cf5efe      centos
  26. ssh_27          1027    ssh -p 1027 107.174.221.14      a9db208e9cfeac0d60      centos
  27. ssh_28          1028    ssh -p 1028 107.174.221.14      9d87fa85a46bf4e170      centos
  28. ssh_29          1029    ssh -p 1029 107.174.221.14      2418d6f567e75cbd15      debian
  29. ssh_30          1030    ssh -p 1030 107.174.221.14      203463b81ef856ae54      centos
  30. ssh_31          1031    ssh -p 1031 107.174.221.14      4c2bdf2903710c0c29      centos
复制代码


在virmach vps 做的实验,内存700多M,大佬们轻点蹂躏

 楼主| 发表于 2018-3-2 00:56:04 | 显示全部楼层
好像没说清楚,解释一下,随便选取 一行:
  1. ssh_13          1013    ssh -p 1013 107.174.221.14      a9220d70fbdb754e57      debian
复制代码

就是说,可以在任何一台机器,用1013端口,用a9220d70fbdb754e57作为密码,登录107.174.221.14这台服务器中的一个小鸡,或者直接在vps上输入ssh -p 1013 107.174.221.14,然后再输密码也可以
xxx.png (15.07 KB, 下载次数: 0)
Madlifer 该用户已被删除
发表于 2018-3-2 00:39:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2018-3-2 00:40:19 | 显示全部楼层
没用吧。。 这个开出来 要端口映射 好麻烦的
 楼主| 发表于 2018-3-2 00:46:36 | 显示全部楼层
qfdk 发表于 2018-3-2 00:40
没用吧。。 这个开出来 要端口映射 好麻烦的

有专门的端口映射版本,没发出来
关键代码
  1. for i in `seq 2 $container_numbers`
  2. do
  3.         image_name=${expressions[$RANDOM % ${#expressions[@]} ]}
  4.         echo `echo $image_name | cut -d \/ -f 2 | cut -d \- -f 2` >> os
  5.         port_base=$(($i*100))
  6.         start=$(($port_base+10000))
  7.         end=$(($port_base+10000+$port_numbers))
  8.         docker run -itd -m 512M --restart=always --name ssh_$i -p $((1000+$i)):22 -p $start-$end:$start-$end $image_name
  9. done
复制代码
发表于 2018-3-2 00:47:36 | 显示全部楼层
支持支持,不玩docker
发表于 2018-3-2 00:48:00 来自手机 | 显示全部楼层
不知道什么东西,前排围观下
发表于 2018-3-2 01:18:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2018-3-2 01:23:26 | 显示全部楼层
这样是不是配置好机器,开个Docker后,可以进入Docker操作,出状况的话,删除Docker就行而不用重装系统那么麻烦?像Hyperapp那样
 楼主| 发表于 2018-3-2 01:31:32 | 显示全部楼层
Adamᶻ 发表于 2018-3-2 01:23
这样是不是配置好机器,开个Docker后,可以进入Docker操作,出状况的话,删除Docker就行而不用重装系统那么 ...

对,就是这样
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-9-19 04:46 , Processed in 0.100664 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表