一、安装docker并生成相关的镜像
(1)安装docker
安装docker教程
只要在终端输入:
sudo docker run hello-world
后出现如下图的内容就证明安装docker成功了

(2)拉取CentOS镜像(Ubuntu镜像也行)
在终端输入:
sudo docker pull centos
在终端输入:sudo docker images,可以看到刚刚拉取的两个镜像

每次执行docker语句都要在前面加sudo,比较麻烦,直接将hadoop用户加入docker用户组,就不用再输入sudo了。
sudo gpasswd -a $USER docker #将当前用户加入到docker用户组中
newgrp docker #重新加载docker用户组
一般安装时会自动创建docker用户组,如果docker用户组不存在的话,在终端输入:
sudo groupadd docker #创建docker用户组
注意,此时只有执行上述两条命令行的终端可以不用输入sudo,其他终端仍要输入,得重启虚拟机后所有终端才不用输入sudo。
(3)通过build Dockfile生成带ssh功能的centos镜像
先创建Dockfile文件,在终端输入:
vi Dockerfile
在Dockfile文件中添加以下内容:
FROM centos
MAINTAINER hadoop
RUN cd /etc/yum.repos.d/
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum makecache
RUN yum update -y
RUN yum install -y openssh-server sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN yum install -y openssh-clients
RUN echo "root:a123456" | chpasswd
RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
Dockfile文件的内容解释:基于centos镜像,生成带有spenssh-server、openssh-clients的镜像,用户为root,密码为a123456,镜像维护者(作者)为hadoop。为了防止出现Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
错误,我更改了yum下载依赖的镜像baseurl。注意:如果拉取的镜像是Ubuntu的话,得修改下载spenssh-server、openssh-clients的命令行。
你可能需要修改的地方:
1、MAINTAINER hadoop
MAINTAINER+空格+作者的信息,用于指定镜像作者的信息,我的用户名是hadoop,改成你自己的
2、root:a123456
设置镜像的密码,改成你自己的
建好Dockerfile文件后,生成镜像,在终端输入:
docker build -t="centos7-ssh" .
查看生成的centos7-ssh镜像,在终端输入:
docker images

(4)将下载的文件上传虚拟机
没有Xftp和Xshell的同学可以用VMwareTools替代,只要把压缩包添加到虚拟机主机上即可。安装VMwareTools后,复制本地主机的文件粘贴到虚拟机主机指定目录下。
1、用Xshell和Xftp连接虚拟机主机
Xshell(测试是否能正常连接,其实只需要用Xftp传输文件):
用户名填hadoop(换成你自己的),root可能会登不上,如果ssh运行状态没问题,还连接不上的话,可能是防火墙没关。
Xftp:
将压缩包上传到/home/hadoop(有Dockerfile的目录),如果上传失败,可能是目录没有传输文件的权限,在终端输入:
chmod 777 /home/hadoop/
2、解压文件(把目录和文件名改成你自己的)
在终端输入:
tar -zxvf /home/hadoop/hadoop-3.1.3.tar.gz -C /home/hadoop/ico
tar -zxvf /home/hadoop/jdk-8u212-linux-x64.tar.gz -C /home/hadoop/ico
(5)生成带有ssh、hadoop和jdk环境的CentOS镜像
移除原有的Dockerfile文件,在终端输入:
mv Dockerfile Dockerfile.bak
再重新创建一个Dockerfile文件,在终端输入:
vi Dockerfile
或者直接在Xftp上用记事本编辑原来的Dockerfile文件,更加方便(推荐)
将下面内容填入Dockerfile文件(记得保存)
FROM centos7-ssh
COPY jdk1.8.0_212 /usr/local/jdk
ENV JAVA_HOME /usr/local/jdk
ENV PATH $JAVA_HOME/bin:$PATH
COPY hadoop-3.1.3 /usr/local/hadoop
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$PATH
构建Dockerfile,在终端输入:
docker build -t="hadoop" .
