-- 学习了 docker 之后实践机会较少,通过本次实践练习 dockerfile 的编写,docker compose 的使用,以及一些 linux 命令的回顾
选用 ubuntu 20.04 作为基础镜像,需要在引入镜像后第一时间修改源,以免后续软件下载过慢
FROM ubuntu:20.04
# 换源
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
# 用于提供 ssh 服务、下载 及修改文件的工具
RUN apt install -y openssh-server wget openssh-client ntpdate neovim
选用的是 JDK 8 及 Hadoop 3.3.3
// 解压后删除压缩包,避免无用文件占据空间
RUN wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.3/hadoop-3.3.3.tar.gz \
&& wget https://mirrors4.tuna.tsinghua.edu.cn/Adoptium/8/jdk/x64/linux/OpenJDK8U-jdk_x64_linux_hotspot_8u392b08.tar.gz \
&& tar -xvf hadoop-3.3.3.tar.gz -C /var \
&& tar -xvf OpenJDK8U-jdk_x64_linux_hotspot_8u392b08.tar.gz -C /var \
&& rm hadoop-3.3.3.tar.gz OpenJDK8U-jdk_x64_linux_hotspot_8u392b08.tar.gz
# 配置 JDK 及 hadoop 环境变量
RUN echo 'export JAVA_HOME=/var/jdk8u392-b08' >> ~/.bashrc \
&& echo 'export PATH=$PATH:$JAVA_HOME/bin' >> ~/.bashrc \
&& echo 'export CLASSPATH=$JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar' >> ~/.bashrc \
&& echo 'export HADOOP_HOME=/var/hadoop-3.3.3' >> ~/.bashrc \
&& echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc \
&& echo 'export JAVA_HOME=/var/jdk8u392-b08' >> /var/hadoop-3.3.3/etc/hadoop/hadoop-env.sh \
&& echo 'export HDFS_NAMENODE_USER=root' >> /var/hadoop-3.3.3/etc/hadoop/hadoop-env.sh \
&& echo 'export HDFS_DATANODE_USER=root' >> /var/hadoop-3.3.3/etc/hadoop/hadoop-env.sh \
&& echo 'export HDFS_SECONDARYNAMENODE_USER=root' >> /var/hadoop-3.3.3/etc/hadoop/hadoop-env.sh \
&& echo 'export YARN_RESOURCEMANAGER_USER=root' >> /var/hadoop-3.3.3/etc/hadoop/hadoop-env.sh \
&& echo 'export YARN_NODEMANAGER_USER=root' >> /var/hadoop-3.3.3/etc/hadoop/hadoop-env.sh \
# 存放hdfs数据
&& mkdir /var/data
注意事项:
# config ssh
# 本来打算通过 sed 进行文本替换来修改配置文件,但一番尝试之后发现 sed 适合替换字符串,如单词等,但不适合带有空格的字符串,故直接使用 echo 在文件末尾追加
RUN echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config \
&& echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config
# 通过启动脚本文件来运行 ssh 服务,
# 直接将 "/usr/sbin/sshd -D" 作为启动命令将会报错
# 原因为 默认启用的是 /bin/sh, "/usr/sbin/sshd -D" 需要通过 /bin/bash 启动
RUN touch /var/run.sh \
&& echo "#!/bin/bash " >> /var/run.sh \
&& echo "/usr/sbin/sshd -D" >> /var/run.sh \
&& chmod 777 /var/run.sh \
&& mkdir /run/sshd
# 设置 root 密码
RUN echo "root:112233" | chpasswd
CMD [ "/var/run.sh" ]
# 进入node1 后,生成密钥并将公钥传给 其他 node
# ssh-keygen -t ed25519
# ssh-copy-id node1
# ssh-copy-id node2
# ssh-copy-id node3
// 输入代码内容
version: "3"
services:
# 主 node
node1:
build: .
hostname: node1
node2:
build: .
hostname: node2
node3:
build: .
hostname: node3
docker compose 的优点在于能够便捷地配置网络,实现 docker 之间的互联
使用
# 简简单单的一句即可实现容器的相互连接
docker compose up
可以通过 --net=host 参数来让容器使用宿主机的网络,从而访问外部网络,然而更好的方法是允许宿主机的 ip 路由转发,通过 docker 的虚拟网络来访问外部网络
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。