构建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 这个文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容