(一)、制作安装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 ask中ask改为 no。
4、exit退出容器并制作镜像,命名为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/24@192.168.101.1 |
|
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.tar、network文件夹、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的容器。待改进之处为,可以通过脚本的方式将该安装包分发到不同的主机上,并能实现自动安装部署容器。