构建docker分布式模拟环境

前言

本文的主要目的是通过docker在一台单独的centos服务器上搭建一个用于模拟分布式环境。方案主要是为了满足以下的需求:
在其他的同网段机器上面可以透明的访问到docker模拟的服务集群上面
各个docker服务的ip都是静态的
目前的方案上面存在一个缺陷,就是docker的宿主机上面 无法 通过网络访问到docker模拟的服务器集群。

实施方案

整个的实施方案包括一下几个步骤,构建sshd镜像,设置网络环境,生成镜像,增加免密登录功能。其中,docker的宿主机是centos7.7的,docker是目前最新的版本(Docker version 19.03.5, build 633a0ea),服务器的网段为192.168.31.0/24,网关ip为192.168.31.1。ps:这个是我自己家的ip,也没啥安全性可言,就不打码了,方便大家看得清楚。docker的简单安装配置可以查看之前的文档

构建sshd镜像

构建镜像是基于最新的centos镜像构建的,具体的Dockerfile如下,大家在一个空文件夹下面跑一下即可。由于只是作为一个验证的环境,所以我们简单的将镜像的root密码设置为root。目前的镜像主要是用于功能验证环节。

FROM centos 
MAINTAINER fern

RUN yum install openssh-server openssh-clients passwd -y \
    && /bin/echo "root" | passwd --stdin root \
    && ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key \
    && ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key \
    && ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key \
    && /bin/sed -i 's/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g' /etc/pam.d/sshd \
    && /bin/sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config \
    && /bin/sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config \
    && yum remove passwd -y

EXPOSE 22

CMD ["/usr/sbin/sshd","-D"]

将Dockerfile文件放在宿主机上面,执行如下的命令

cd /root/work
docker build -t centos-sshd .

设置网络环境

为了实现我们的需求,需要将宿主机的网卡设置为混杂模式,该模式需要超级权限,另外,如果宿主机安装在虚拟机上,例如virtualbox等,需要在虚拟机的网卡上面也需要进行设置

#开启混杂模式,其中enp0s25为宿主机的网卡名
sudo ip link set enp0s25 promisc on 
#static-network为后续的docker静态网络名
docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 -o parent=enp0s25 -o macvlan_mode=bridge static-network 

生成镜像

在这个小节中,主要是为整个环境生成4个docker容器用于模拟相关的业务环境,最新的版本会在生成的容器中自动加入一条指向自身主机名的host,如果你所使用的环境中没有该host条目,可以自行添加相关的命令。

docker run --net=static-network --ip=192.168.31.230 \
--name=hadoop-master \
-h hadoop-master \
-v /data/program:/data/program:ro \
-v /data/hadoop/master:/data/work \
-e TZ="Asia/Shanghai" \
--add-host hadoop-data1:192.168.31.231 \
--add-host hadoop-data2:192.168.31.232 \
--add-host hadoop-data3:192.168.31.233 \
-itd centos-sshd /usr/sbin/sshd -D

docker run --net=static-network --ip=192.168.31.231 \
--name=hadoop-data1 \
-h hadoop-data1 \
-v /data/program:/data/program:ro \
-v /data/hadoop/data1:/data/work \
-e TZ="Asia/Shanghai" \
--add-host hadoop-master:192.168.31.230 \
--add-host hadoop-data2:192.168.31.232 \
--add-host hadoop-data3:192.168.31.233 \
-itd centos-sshd /usr/sbin/sshd -D

docker run --net=static-network --ip=192.168.31.232 \
--name=hadoop-data2 \
-h hadoop-data2 \
-v /data/program:/data/program:ro \
-v /data/hadoop/data2:/data/work \
-e TZ="Asia/Shanghai" \
--add-host hadoop-master:192.168.31.230 \
--add-host hadoop-data1:192.168.31.231 \
--add-host hadoop-data3:192.168.31.233 \
-itd centos-sshd /usr/sbin/sshd -D

docker run --net=static-network --ip=192.168.31.233 \
--name=hadoop-data3 \
-h hadoop-data3 \
-v /data/program:/data/program:ro \
-v /data/hadoop/data3:/data/work \
-e TZ="Asia/Shanghai" \
--add-host hadoop-master:192.168.31.230 \
--add-host hadoop-data1:192.168.31.231 \
--add-host hadoop-data2:192.168.31.232 \
-itd centos-sshd /usr/sbin/sshd -D

其中,

  • 参数--net用于指定我们上一个步骤所配置的网络
  • 参数--ip用于指定容器的静态ip
  • 参数--name用于指定容器名
  • 参数-h用于指定容器的主机名
  • 参数-v用于将宿主机的目录挂载到镜像中。为了便于后续的操作验证,我们将宿主机的程序目录以只读的方式挂载到容器中,并分别给各个容器挂载了一个工作目录
  • 通过-e参数指定环境变量,设置docker容器的时区
  • 参数--add-host用于向宿主机中添加host映射
  • 参数-itd分别指定了镜像名、输入输出

增加免密登录

通过上述的操作之后,我们已经等到了4个docker容器,并可以在非宿主机的同网段机器上面,通过ssh方式登录到这4个docker容器中,这个步骤的免密登录其实与在一般的centos服务器上面做免密操作是一致的。分别在4个容器中执行如下的命令

#生成一个不需要密码的密钥文件
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
ssh-copy-id root@hadoop-master
ssh-copy-id root@hadoop-data1
ssh-copy-id root@hadoop-data2
ssh-copy-id root@hadoop-data3

后记

网络的相关配置,可以参考一下 https://github.com/alfredhuang211/study-doc 这个文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • 然后呢他们说你的心似乎痊愈了也开始有个人为你守护着我该心痛或是心安呢 刘若英首部执导的电影后来的我们,定档4月28...
    大胖鲸鱼阅读 1,950评论 4 42
  • 美美,你好: 这个普普通通的一年,看到战友们有着如此飞速的成长,那种超越时间的迭代。真的很为007七班骄傲。 我是...
    yichen大刀阅读 209评论 0 0
  • 作为一抹苔藓 母亲总是忍着命运 那一天 外婆去世时 她泪水全无 作为一种责任 母亲总是扛着命运 那一天 最小的弟媳...
    九品官_b472阅读 215评论 0 5
  • 最近在看电视剧陪读妈妈,里面的丁一一为了不在国外读书和妈妈展开了一系列的较量,想想自己的孩子,不知道该怎么教育,虽...
    余黄阅读 347评论 1 1
  • 祝福比羡慕嫉妒更舒适 宽容比耿耿于怀更养生 除了铁定了心相伴一生的人,其他的不过是过客 不伤我利益,随你张牙舞爪、...
    歌楼楼里阅读 108评论 0 0