跨主机Docker容器部署hadoop集群方法


(一)、制作安装sshd的镜像

1、在能联网的主机上拉取centos镜像,命名为centos-base

docker pull centos     docker  tag image_id centos-base

2、使用centos-base镜像和build命令建立容器,命名为centos-ssh

FROM centos-base

MAINTAINER yy

RUN yum install passwd openssl openssh* -y

read -t 60 -p "password:" pw

RUN echo $pw | passwd --stdin root

RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''

RUN ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''

RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd

RUN mkdir -p /root/.ssh && chown  root. root /root && chmod 700 /root/.ssh

# 暴露ssh端口22

EXPOSE 22

# 设定运行镜像时的默认命令:输出ip,并以daemon方式启动sshd

CMD ip addr ls eth0 | awk '{print $2}' | egrep -o '([0-9]+\.){3}[0-9]+';/usr/sbin/sshd -D

 

Dockerfile文件的内容为: 

3、进入容器制作ssh公钥

docker attach centos-ssh

ssh-keygen–t rsa    一直按回车,不要停。 
cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys 
修改一些配置信息,修改/etc/ssh/ssh_configure文件里面的StrictHostKeyChecking askask改为 no

4exit退出容器并制作镜像,命名为centos-ssh-image

dockercommit centos-ssh_id centos-ssh-image:v1

将改镜像保存为本地.tar文件

dockersave centos-ssh-image:v1 –o centos-ssh.tar

命令执行完毕后,可以在当前目录下看到centos-ssh.tar。此镜像可以配合其他命令实现ssh免密登录的功能。

(二)、制作docker本地yum

1、执行yum install --downloadonly--downloaddir=/home/dockerdownload docker                   可以保存docker软件及其依赖。

2、在dockerdownload文件夹中制作本地yum源配置文件yum.repo

[docker]

name=docker

baseurl=file:///home/dockerdownload

gpgcheck=0

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

 

 3、在dockerdownload文件夹下制作docker本地yum源及安装脚本yum-repo.sh

#!/bin/sh

mv /etc/yum.repos.d /etc/yum.repos.d.bak

mkdir /etc/yum.repos.d

cp /home/dockerdownload/yum.repo /etc/yum.repos.d/

createrepo -d /home/dockerdownload

yum clean all

yum makecache

yum list

yum install docker

service docker restart

 

  4、将上述所有软件及依赖包、yum.repo文件、yum-repo.sh文件统一放入dockerdownload文件中保管,可以实现离线安装docker的功能。

(三)、安装pipework

1、将下载的pipework文件放入pipework文件夹中。

#!/bin/sh

cp pipework /usr/local/bin/

chmod 777 /usr/local/bin/pipework

PATH=$PATH:/usr/local/bin/

echo 'pipework-installation compeleted'

 

2、制作pipework安装脚本pipework-installation.sh

 

(四)、制作主机网桥配置脚本

1、分配好网络,手动配好主机网卡ip

#!/bin/sh

cd /etc/sysconfig/network-scripts

sed -i 's/ONBOOT=no/ONBOOT=yes/g' ifcfg-ens33

cp ifcfg-ens33 ifcfg-br0

sed -i '/^IPADDR/'d ifcfg-ens33

sed -i '/^PREFIX/'d ifcfg-ens33

#DEVICE行后增加BRIDGE

sed -i '/^DEVICE/a\BRIDGE=br0' ifcfg-ens33

echo "ifcfg-br0"

#DEVICE="eh0"替换成DEVICE=br0

sed -i "s/DEVICE=ens33/DEVICE=br0/g" ifcfg-br0

#TYPE=eth0修改为TYPE=Bridge

sed -i '/^TYPE/'d ifcfg-br0

sed -i '/^DEVICE/a\TYPE=Bridge' ifcfg-br0

service network restart

 

2、制作主机网桥配置脚本network.sh,假设网卡名为ifcfg-ens33 

3、将该脚本放入network文件夹内,此脚本能自动建立网桥,配合其他命令可实现跨主机容器互相通信的功能。

(五)、制作Hadoop集群的镜像

FROM centos-ssh

WORKDIR /root

RUN echo "root:123456" | chpasswd

ENV LANG C.UTF-8

#Install java

RUN echo Install java

ADD jdk-8u101-linux-x64.tar.gz /usr/local/

RUN mv /usr/local/jdk1.8.0_101 /usr/local/jdk1.8

ENV JAVA_HOME /usr/local/jdk1.8

ENV PATH $JAVA_HOME/bin:$PATH

#Install mysql

ADD mysql-5.6.14.tar.gz /usr/local/

RUN mv /usr/local/mysql-5.6.14 /usr/local/mysql

ENV MYSQL_HOME /usr/local/mysql

ENV PATH $MYSQL_HOME/bin:$PATH

#Install tomcat

RUN echo Install tomcat

ADD apache-tomcat-8.5.11.tar.gz /usr/local/

RUN mv /usr/local/apache-tomcat-8.5.11 /usr/local/tomcat

ENV CATALINE_HOME /usr/local/tomcat

#ENV PATH $CATALINE_HOME/bin:$PATH

 

 

1、以centos-ssh镜像为基础镜像,配合Dockerfile文件建立Hadoop集群的镜像。部分配置文件如下所示: 

2、相关软件放入同一文件夹内,相关组件可以根据特定情况更改。

#!/bin/bash

#docker images

docker load < centos-ssh.tar

docker run -itd --net=none -p 8032:8032 \-p 18080:18080 \-p 19888:19888 \-p 7077:7077 \-p 50070:50070 \-p 8088:8088 \-p 9000:9000 \-p 11000:11000 \-p 50030:50030 \-p 8050:8050 \-p 8081:8081 \-p 8900:8900 --name=hadoop-master --hostname=hadoop-master --add-host=hadoop-slave1:192.168.101.16 --add-host=hadoop-slave2:192.168.101.18 hadoop-master:latest /bin/bash

docker exec -itd hadoop-master /etc/init.d/sshd start

pipework br0 -i eth3 hadoop-master 192.168.101.14/[email protected]

 

3、制作build-container-from-image.sh 

执行完此脚本后,容器配备与宿主机同网络段的ip

4、进入容器,启动Hadoop各个组件,检查需要的依赖并安装。

5、把该容器制作成镜像

docker commit container_id hadoop-image:v1

6、把hadoop-image保存为.tar文件

docker save hadoop-image:v1 – o hadoop-cluster.tar

()、制作Hadoop集群容器安装包

1、制作hadoop容器启动脚本hadoop-cluster.sh

hadoop-cluster.tarnetwork文件夹、pipework文件夹、dockerdownload文件夹统一放入hadoop-cluster文件内。此脚本实现的功能是,能让宿主机在离线情况下导入hadoop-cluster镜像,使用此镜像建立容器,并且能使此容器与宿主机处于同一网络段,从而实现跨主机容器通信的功能,达到不同容器能实现ssh免密登录的目的。

#!/bin/bash

#install docker

sh dockerdownload/yum-repo.sh

#install pipework

sh pipework/pipework-installation.sh

#deploy br0

sh network/network.sh

#load hadoop-cluster.tar

echo loading image

docker load < hadoop-cluster.tar

#build container

sh run-container-from-image.sh

 

 此脚本执行完后,能在离线的宿主机上开启安装了hadoop的容器。待改进之处为,可以通过脚本的方式将该安装包分发到不同的主机上,并能实现自动安装部署容器。

 

 

 

 

 

你可能感兴趣的:(跨主机Docker容器部署hadoop集群方法)