环境说明:
| 宿主机(bigdata) | 容器(master) | 容器(slave1) | 容器(slave2) | |
| 系统 | Linux Mint 22 | CentOS:7.9.2009 | CentOS:7.9.2009 | CentOS:7.9.2009 |
| IP地址 | 网桥 | 172.18.0.101 | 172.18.0.102 | 172.18.0.103 |
Docker安装与配置过程本文不再叙述,请自行在站内寻找。
一、构建镜像
1.拉取CentOS:7.9.2009的Docker镜像:
docker pull centos:7.9.2009
2.编写Dockerfile用以构建镜像:
FROM centos:7.9.2009
RUN mkdir -p /opt/software && mkdir -p /opt/module
# 更换阿里云yum源
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && \
yum makecache
# 安装必要工具
RUN yum -y install openssh-server openssh-clients vim net-tools passwd
# 配置SSHD
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && \
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' && \
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''
# 允许root登录
RUN sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config && \
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
# 设置root密码
RUN echo 'root:123456' | chpasswd
# 暴露22端口
EXPOSE 22
# 直接启动SSHD(前台运行)
CMD ["/usr/sbin/sshd", "-D"]
3.构建镜像:
docker build -t bigdata_1.0 .
4.检查镜像是否构建完成:
docker images

二、网络规划
由于网上的大部分容器集群的网络规划方法都已失效(容器集群无法连接宿主机和外网),故本文采用网桥搭建宿主机与容器之间的网络通信。
使用以下命令创建一个自定义桥接网络,确保容器间可通过主机名通信,并分配固定子网:
docker network create \
--driver bridge \
--subnet 172.18.0.0/16 \
--gateway 172.18.0.1 \
bigdata_net
网桥的IP我们设置为172.18.0.0/1,所以容器集群的IP我们可以设置为:
| master(主节点) | 从节点(slave1) | 从节点(slave2) |
| 172.18.0.101 | 172.18.0.102 | 172.18.0.103 |
编辑宿主机的hosts文件,用以之后通过host访问HDFS WEBUI:
#在宿主机bigdata上执行
vim /etc/host
#在文件底部追加:
172.18.0.101 master
172.18.0.102 slave1
172.18.0.103 slave2
三、创建容器
创建容器master、slave1、slave2:
#主节点 master
docker run -itd \
--name master \
--hostname master \
--network bigdata_net \
--ip 172.18.0.101 \
bigdata_1.0
#从节点 slave1
docker run -itd \
--name slave1 \
--hostname slave1 \
--network bigdata_net \
--ip 172.18.0.102 \
bigdata_1.0
#从节点 slave2
docker run -itd \
--name slave2 \
--hostname slave2 \
--network bigdata_net \
--ip 172.18.0.103 \
bigdata_1.0
四、验证容器环境
检查ssh服务:
# 进入master容器
docker exec -it master bash
# 检查SSHD进程
ps aux | grep sshd
# 测试连接slave1
ssh root@slave1
# 输入密码:123456
检查网络环境:
docker exec -it master bash
# 在容器内执行:
ping slave1 # 通过主机名通信
ping 172.18.0.102 # 通过IP通信
ping 172.18.0.1 # 宿主机桥接接口
ping 10.101.7.230 # 宿主机主IP
ping 8.8.8.8 # 外网测试
# 在宿主机执行
ping 172.18.0.101 # 测试宿主机到容器的通信
1511

被折叠的 条评论
为什么被折叠?



