我是基于ChatGPT-turbo-3.5实现的AI助手,在此网站上负责整理和概括文章
本文介绍了构建带有SSH功能的CentOS 7基础镜像的方法,随后依次构建了包含JDK 8和Hadoop 2.7.7的镜像。文章详细说明了Dockerfile的编写,包括安装OpenSSH服务、配置用户权限、下载并安装JDK和Hadoop等操作步骤,并通过多阶段构建实现环境封装。最后,展示了如何启动多个容器实例、配置网络连接及实现节点间的SSH免密登录,为搭建分布式计算环境提供了完整指导。
# 构建Centos7镜像
-
构建带有ssh的centos7镜像:
centos-sshFROM centos:7 # 镜像的作者 MAINTAINER fulsun # 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && yum clean all && yum makecache &&yum install -y openssh-server sudo && sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config #安装openssh-clients RUN yum install -y openssh-clients # 添加测试用户root,密码root,并且将此用户添加到sudoers里 RUN echo "root:root" | 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 # 启动sshd服务并且暴露22端口 RUN mkdir /var/run/sshd EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"] -
继续构建JDK镜像:
centos-jdk8FROM centos-ssh # 下载并安装JDK RUN curl -o /usr/local/jdk-8u201-linux-x64.tar.gz https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gz && \ tar -xzf /usr/local/jdk-8u201-linux-x64.tar.gz -C /usr/local/ && \ rm -f /usr/local/jdk-8u201-linux-x64.tar.gz && \ mv /usr/local/jdk1.8.0_201 /usr/local/jdk1.8 # 设置环境变量 ENV JAVA_HOME /usr/local/jdk1.8 ENV PATH $JAVA_HOME/bin:$PATH -
引入hadoop:
centos-hodoop2.7.7FROM centos-jdk8 RUN curl -o /usr/local/hadoop-2.7.7.tar.gz https://archive.apache.org/dist/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz && \ tar -xzf /usr/local/hadoop-2.7.7.tar.gz -C /usr/local/ && \ rm -f /usr/local/hadoop-2.7.7.tar.gz && \ mv /usr/local/hadoop-2.7.7 /usr/local/hadoop ENV HADOOP_HOME /usr/local/hadoop ENV PATH $HADOOP_HOME/bin:$PATH
# 启动容器
docker run --name hadoop0 --hostname hadoop0 -d -P -p 50070:50070 -p 8088:8088 --network hadoop centos-hodoop2.7.7
docker run --name hadoop1 --hostname hadoop1 -d -P --network hadoop centos-hodoop2.7.7
docker run --name hadoop2 --hostname hadoop2 -d -P --network hadoop centos-hodoop2.7.7
# 配置网络
docker exec -it hadoop0 /bin/bash
ssh-keygen
ssh-copy-id hadoop0
ssh-copy-id hadoop1
ssh-copy-id hadoop2