美文网首页
docker不用已有hadoop-cluster镜像 搭建 ha

docker不用已有hadoop-cluster镜像 搭建 ha

作者: Return_ji | 来源:发表于2019-01-07 22:28 被阅读0次

使用docker 安装hadoop 集群

首先,使用docker 安装Hadoop集群,需要下载好jdk、Hadoop、的安装包。

其次,准备好Hadoop 镜像。

准备前提知识:

Docker容器后台运行,就必须有一个前台进程.容器内没有后台服务的概念。所以需要一个可以启动后台服务ssh的镜像

对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程而存在的,主进程退出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西。

网络配置

docker 中一般默认以172.17.0.0作为主机ip,docker 启动的容器从1开始编号。可以用docker create 自定义网段的固定IP/静态IP地址.(docker 中网络这块还不了解)

docker network create --subnet=172.172.0.0/16 docker-subnet-name

ssh 免密登陆的原理:

ssh 免密登陆是通过密钥来实现的,有两个验证过程。

  1. 主机验证
    1. 主机A向主机B发送SSH请求的时候,主机A会先去~/.ssh/knowhosts 文件中查询是否存在主机B的host_key.如果存在,则进行用户验证。不存在,询问是否保存主机B发送过来的host_key.
    2. 在主机B发送的host_key保存着主机B的/etc/ssh/路径下。在ssh 服务启动的时候自动生成。
    3. 在主机验证阶段,服务端持有的是私钥,客户端保存的是来自于服务端的公钥。注意,这和身份验证阶段密钥的持有方是相反的
  2. 用户验证
    1. 主机A需要将自己生成的公钥(/.ssh/id_rsa.pub)发送到主机B的/.ssh/authorized_keys文件中。
    2. 主机A访问主机B的时候,主机B用authorized_keys中的公钥随机加密一个数字,发送到A,A用自己的私钥解密,解密成功则可以访问,否则访问失败。

ssh服务配置打包镜像

  1 FROM centos
  2 MAINTAINER RETURN
  3 RUN yum install -y openssh-server
  4 RUN yum install -y openssh-clients
  5 RUN  sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
  6 RUN  ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
  #这里生成rsa 加密方式的host_key是因为上述docker 容器中无法在启动ssh 服务,所以要先手动添加。
  7 #RUN  ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key。可以增加也可以不加,另外一种加密方式
  8 RUN  yum install -y net-tools.x86_64
  9 RUN  yum install -y vim
 10 RUN  echo "root:111111" | chpasswd
 11 RUN  mkdir /var/run/sshd
 12 EXPOSE 22
 13 
 14 CMD ["/usr/sbin/sshd","-D"]

在这里 RUN 可以 用一个 RUN 代替。如下:

  1 FROM centos
  2 MAINTAINER RETURN
  3 RUN yum install -y openssh-server \
        && RUN yum install -y openssh-clients \
        && sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config \
        && ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key \
        && yum install -y net-tools.x86_64 \
        && yum install -y vim \
        && echo "root:111111" | chpasswd \
        && mkdir /var/run/sshd
 12 EXPOSE 22
 13 
 14 CMD ["/usr/sbin/sshd","-D"]
 #-D:以后台守护进程方式运行服务

用以上方式 run 建立镜像可以减少docker 文件层数。一个run 就是一层。

然后运行

docker run build -t="image-name" .

来建立一个新的镜像。这里不能忘记命令后面的 · 这个点是标示用当前路径下的Dockerfile 进行镜像的建立。

Jdk-镜像制作

  1 FROM ssh-centos
  2 ADD jdk-8u191-linux-x64.tar.gz /usr/local/
  3 RUN mv /usr/local/jdk1.8.0_191 /usr/local/jdk1.8
  4 ENV JAVA_HOME /usr/local/jdk1.8
  5 ENV PATH $JAVA_HOME/bin:$PATH                         

docker build -t="image-name" .

tips:

这里的ADD命令是将和Dockerfile 文件同一路径下的问价打包到镜像中,并且会自动进行解压操作。如果不想解压可以用copy 实现。

hadoop镜像制作

  1 FROM jdk-centos
  2 ADD hadoop-2.7.7.tar.gz /usr/local
  3 RUN mv /usr/local/hadoop-2.7.7 /usr/local/hadoop
  4 ENV HADOOP_HOME /usr/local/hadoop
  5 ENV PATH $HADOOP_HOME/bin:$PATH  

docker run -t="image-name" .

制作好Hadoop镜像后,用镜像启动一个容器。这里需要注意的是,启动容器不可以在run 后面增加启动容器的执行命令。否则会默认代替dockerfile 中的cmd 命令,ssh 服务则不会启动。

例如:

docker run -itd --name container-name --net docker-net-name --ip *.*.*.* image-name
#将container-name换为自定义容器的名字。
#docker-net-name换为自己创建的网络组名字
#image-name换为需要的镜像名

这里的image-name 是制作好的hadoop 镜像的name.默认启动ssh 为后台服务(这里的后台服务是做在容器的镜像里)

然后可以用docker exec 进入容器,可以在运行中的容器中执行命令。

docker exec -it container-name commond(/bin/bash)
#这里用bash进入容器,容器中有一个后台服务ssh.

(如有不对,请指出)

相关文章

网友评论

      本文标题:docker不用已有hadoop-cluster镜像 搭建 ha

      本文链接:https://www.haomeiwen.com/subject/osfmrqtx.html