(一)、制作安装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/[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.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的容器。待改进之处为,可以通过脚本的方式将该安装包分发到不同的主机上,并能实现自动安装部署容器。