Docker部署Hadoop-02-Docker常见操作

Docker核心前置教程(专为Hadoop部署准备)

本教程聚焦Hadoop部署必需的Docker核心技能 ,剔除无关知识点,只讲后续搭建Hadoop单机/分布式集群时一定会用到的Docker操作,确保知识点精准、实战性强。

一、Docker核心概念(Hadoop视角极简版)

先理解4个核心概念,后续操作不会懵:

概念 通俗解释 Hadoop部署中的作用
镜像(Image) 只读的"模板",包含运行程序的所有环境(系统、软件、配置) 打包JDK、Hadoop、SSH等环境,避免每台Hadoop节点重复配置
容器(Container) 镜像的运行实例,独立隔离的环境(轻量级虚拟机) 一个容器就是一个Hadoop节点(NameNode/DataNode/ResourceManager等)
网络(Network) Docker容器间的通信规则 分布式Hadoop需要节点间互通(如NameNode和DataNode通信),必须配置自定义网络
数据卷(Volume) 容器与宿主机共享的目录(容器删了数据不丢) 存储HDFS数据、Hadoop日志,避免容器重启/删除导致数据丢失

二、Docker基础环境验证(必做)

确保Docker安装正确、能正常使用,这是所有操作的前提:

bash 复制代码
# 1. 检查Docker服务状态(必须显示active (running))
sudo systemctl status docker

# 2. 验证Docker功能(运行官方测试镜像,输出"Hello from Docker!"则正常)
sudo docker run --rm hello-world

# 3. (可选)添加当前用户到docker组,避免每次输sudo(需重启生效)
sudo usermod -aG docker $USER
newgrp docker  # 立即生效

三、镜像管理(Hadoop部署核心操作)

Hadoop部署需要基于基础系统镜像(如Ubuntu/CentOS)构建自定义镜像,以下是必备操作:

1. 拉取基础镜像(Hadoop的基础环境)

bash 复制代码
# 拉取Ubuntu 22.04镜像(Hadoop适配性最好的基础系统)
docker pull ubuntu:22.04

# 查看本地镜像(确认拉取成功)
docker images  # 输出包含ubuntu:22.04则成功
docker images | grep ubuntu  # 过滤查看Ubuntu镜像

2. 构建自定义镜像(Dockerfile核心)

后续部署Hadoop需要将JDK、SSH、Hadoop打包成镜像,必须掌握Dockerfile构建:

步骤1:创建Dockerfile目录和文件
bash 复制代码
# 创建目录(统一管理构建文件)
mkdir -p ~/docker-hadoop-base
cd ~/docker-hadoop-base

# 创建空的Dockerfile(后续部署Hadoop会填充内容,先练格式)
touch Dockerfile
步骤2:编写极简Dockerfile(练语法,后续直接复用)
复制代码
sudo nano Dockerfile

编辑Dockerfile(用vim或nano):

dockerfile 复制代码
# 基础镜像(Hadoop的基础系统)
FROM ubuntu:22.04

# 设置环境变量(避免Ubuntu交互提示,Hadoop构建必加)
ENV DEBIAN_FRONTEND=noninteractive

# 安装Hadoop必需的基础依赖(SSH、ping、编辑器等)
RUN apt update && apt install -y \
    openssh-server \
    iputils-ping \
    net-tools \
    vim \
    && apt clean  # 清理缓存,减小镜像体积

# 配置SSH(Hadoop免密登录必需)
RUN mkdir /var/run/sshd \
    && echo "root:123456" | chpasswd \
    && sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# 暴露端口(Hadoop节点通信必需:22是SSH端口)
EXPOSE 22

# 容器启动命令(启动SSH服务,Hadoop节点必需)
CMD ["/usr/sbin/sshd", "-D"]
步骤3:构建镜像
bash 复制代码
# 构建镜像,-t指定标签(名称:版本),.表示当前目录的Dockerfile
docker build -t hadoop-base:ubuntu22.04 .

# 验证构建结果(输出包含hadoop-base:ubuntu22.04则成功)
docker images | grep hadoop-base

输出如下:

一、整体过程总结

你执行的docker build -t hadoop-base:ubuntu22.04 .基于当前目录的Dockerfile构建自定义Docker镜像 的命令,整个输出是Docker按Dockerfile的步骤一步步构建镜像的全过程,最终成功生成了标签为hadoop-base:ubuntu22.04的镜像(后续部署Hadoop的基础镜像)。

二、逐行解析输出含义
  1. 废弃提示(非错误,可忽略)

    DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
    BuildKit is currently disabled; enable it by removing the DOCKER_BUILDKIT=0
    environment-variable.

  • 含义:Docker提示你当前使用的是"旧版构建器",未来会移除,建议启用新版BuildKit构建器;
  • 影响:完全不影响镜像构建和使用,只是一个兼容性提示,新手暂时不用管。
  1. 发送构建上下文

    Sending build context to Docker daemon 2.56kB

  • 含义:Docker会把当前目录(.)下的所有文件/目录(称为"构建上下文")发送给Docker守护进程(daemon),供构建镜像使用;
  • 关键:2.56kB说明上下文很小(只有Dockerfile等少量文件),构建效率高(如果上下文包含大文件,这里会很慢)。
  1. 按Dockerfile步骤构建(Step 1/6 ~ Step 6/6)
    Dockerfile里写了6个指令(FROM/ENV/RUN/EXPOSE/CMD),构建时会按顺序执行每个步骤,每个步骤生成一个"镜像层"(分层存储是Docker的核心特性):
输出行 对应Dockerfile指令 具体含义
Step 1/6 : FROM ubuntu:22.04 ---> 8ea4cbcf3a26 FROM ubuntu:22.04 ① 基于官方的Ubuntu 22.04镜像作为"基础层"; ② 8ea4cbcf3a26是官方Ubuntu镜像的唯一ID(哈希值)。
Step 2/6 : ENV DEBIAN_FRONTEND=noninteractive ---> Using cache ---> a1681dfa4c3c ENV DEBIAN_FRONTEND=noninteractive ① 设置环境变量,避免Ubuntu安装软件时弹出交互提示; ② Using cache:该步骤之前执行过,直接复用缓存(加速构建); ③ a1681dfa4c3c:该步骤生成的镜像层ID。
Step 3/6 : RUN apt update && apt install -y openssh-server iputils-ping net-tools vim && apt clean ---> Using cache ---> ab30e2a66a69 RUN apt update && apt install -y ... ① 在基础镜像中安装SSH服务、ping、网络工具、vim等Hadoop必需的依赖; ② apt clean清理缓存,减小镜像体积; ③ 复用缓存,生成新的镜像层ab30e2a66a69
Step 4/6 : RUN mkdir /var/run/sshd && echo "root:123456" chpasswd && sed -i ... ---> Using cache ---> ae0518e9d33f ① 创建SSH运行目录、设置root密码、修改SSH配置允许root登录; ② 复用缓存,生成镜像层ae0518e9d33f(这一步是SSH登录的核心配置)。
Step 5/6 : EXPOSE 22 ---> Using cache ---> d3928117f1e1 EXPOSE 22 ① 声明容器要暴露22端口(SSH端口,Hadoop节点通信必需); ② 注意:EXPOSE只是"声明",启动容器时需用-p映射端口才真正可访问。
Step 6/6 : CMD ["/usr/sbin/sshd", "-D"] ---> Using cache ---> ab5bcc15f783 CMD ["/usr/sbin/sshd", "-D"] ① 设置容器启动时默认执行的命令:启动SSH服务并后台运行; ② 这是保证容器启动后SSH服务可用的关键(Hadoop依赖SSH)。
  1. 构建成功提示

    Successfully built ab5bcc15f783
    Successfully tagged hadoop-base:ubuntu22.04

  • Successfully built ab5bcc15f783:镜像构建成功,ab5bcc15f783是该镜像的唯一ID;
  • Successfully tagged hadoop-base:ubuntu22.04:给镜像打上"名称:版本"标签(hadoop-base:ubuntu22.04),后续启动容器时可直接用这个标签(比记镜像ID方便)。
三、关键知识点(Hadoop部署前置)
  1. 分层构建 :每个RUN/ENV/CMD等指令对应一个镜像层,复用缓存(Using cache)能大幅加速后续构建(修改Dockerfile后,仅重新执行修改后的步骤,之前的步骤复用缓存);
  2. 镜像标签-t hadoop-base:ubuntu22.04是给镜像打标签,方便后续识别和使用(比如启动容器时直接用docker run hadoop-base:ubuntu22.04);
  3. 核心成果:你现在有了一个包含Ubuntu 22.04 + SSH服务 + 基础工具的镜像,这是后续部署Hadoop的"基础环境镜像",接下来只需在这个镜像基础上添加JDK、Hadoop即可。

3. 镜像常用操作(清理/删除)

查看镜像

复制代码
sudo docker images

这张图是 docker images 命令的输出,每一列的含义如下:

列名 含义
REPOSITORY 镜像的仓库名(名称),用来标识镜像的来源或用途。 例如:hadoop-base 是你构建的Hadoop基础镜像,ubuntu 是官方系统镜像。
TAG 镜像的版本标签,用来区分同一仓库下的不同版本。 例如:ubuntu22.04 表示基于Ubuntu 22.04构建,latest 是默认的最新版本标签。
IMAGE ID 镜像的唯一ID(哈希值),是Docker内部用来唯一标识镜像的字符串。 例如:ab5bcc15f783 就是你刚构建的 hadoop-base:ubuntu22.04 镜像的ID。
CREATED 镜像的创建时间,显示镜像是什么时候构建或拉取的。 例如:9 minutes ago 表示 hadoop-base 是9分钟前刚构建的。
SIZE 镜像占用的磁盘空间大小。 例如:hadoop-base:ubuntu22.04 是305MB,因为它包含了Ubuntu系统和SSH等工具;hello-world 只有10.1KB,是一个极小的测试镜像。

结合你的输出举例:

  • hadoop-base 仓库下的 ubuntu22.04 标签,ID是 ab5bcc15f783,9分钟前构建,大小305MB。
  • ubuntu 仓库下的 22.04 标签,是官方基础镜像,3周前拉取,大小77.9MB。

https://www.doubao.com/thread/w143c6f722c6b23dd

bash 复制代码
# 删除单个镜像(清理无用镜像)
docker rmi hadoop-base:ubuntu22.04  # 按标签删除
docker rmi 镜像ID                   # 按ID删除

# 强制删除所有未使用镜像(清理空间,谨慎使用)
docker image prune -f

四、验证构建成果(确保镜像可用)

执行以下命令,验证镜像是否能正常启动容器、SSH服务是否可用:

bash 复制代码
# 启动容器(后台运行,映射22端口)
docker run -d --name hadoop-test -p 2222:22 hadoop-base:ubuntu22.04

# 查看容器是否运行
docker ps  # 输出包含hadoop-test,状态为Up则正常

# 进入容器,验证SSH服务
docker exec -it hadoop-test /bin/bash
service ssh status  # 输出active (running)则SSH正常

docker run -d --name hadoop-test -p 2222:22 hadoop-base:ubuntu22.04 解释如下
https://www.doubao.com/thread/w0e0e6b8d62c9167f

docker exec -it hadoop-test /bin/bash 解释如下
https://www.doubao.com/thread/w7c09126c26848556

总结

  1. 整个过程是Docker按Dockerfile的指令,一步步构建出适配Hadoop部署的基础镜像;
  2. 核心成果:生成了hadoop-base:ubuntu22.04镜像,包含Hadoop必需的SSH服务和基础环境;
  3. 关键提示:Using cache是正常优化,不影响镜像功能,后续修改Dockerfile后缓存会自动失效并重新构建对应步骤。

这个镜像就是你后续部署Hadoop的"底座",接下来只需往里面添加JDK、Hadoop配置即可。

备注:关闭容器避免端口冲突

步骤1:先执行命令查看哪个容器占用了2222端口:
bash 复制代码
# 查看所有容器(包括运行/停止的),找到映射2222端口的容器名/ID
docker ps -a | grep 2222
# 或直接查看所有运行中的容器
docker ps
步骤2:停止并删除占用端口的容器
方式1:按容器名停止+删除(推荐,比如占用容器是hadoop-test
bash 复制代码
# 1. 停止容器(先停再删,避免强制删除导致数据问题)
docker stop hadoop-test

# 2. 删除容器(释放端口)
docker rm hadoop-test

为什么需要删除容器才能释放端口
https://www.doubao.com/thread/w27b5c3d32974b37c

方式2:如果不知道容器名,按端口查PID后停止(通用方法)
bash 复制代码
# 1. 查找占用2222端口的进程PID
sudo lsof -i:2222

# 2. 停止该进程(替换PID为实际数值)
sudo kill -9 PID

# 3. 清理残留容器(如果有)
docker rm -f $(docker ps -aq)  # 强制删除所有容器(谨慎使用,会删所有容器)
步骤3:重新启动hadoop-node1容器

端口释放后,重新执行启动命令即可:

bash 复制代码
docker run -d --name hadoop-node1 -p 2222:22 -v ~/hadoop-data:/opt/hadoop/data hadoop-base:ubuntu22.04
避坑:后续避免端口冲突的小技巧
  1. 启动新容器时换端口 :比如把2222换成2223/2224,避免重复:

    bash 复制代码
    docker run -d --name hadoop-node1 -p 2223:22 -v ~/hadoop-data:/opt/hadoop/data hadoop-base:ubuntu22.04
  2. 一次性停止+删除所有容器 (测试环境可用,清理所有残留):

    bash 复制代码
    # 停止所有运行中的容器
    docker stop $(docker ps -q)
    # 删除所有容器
    docker rm $(docker ps -aq)
  3. 查看端口映射情况 :启动容器后,验证端口是否正确映射:

    bash 复制代码
    docker port hadoop-node1

    ✅ 输出示例(正常映射):

    复制代码
    22/tcp -> 0.0.0.0:2222
验证容器是否正常启动

执行以下命令,确认hadoop-node1容器运行正常:

bash 复制代码
# 查看容器状态(Up表示运行中)
docker ps | grep hadoop-node1

# 验证数据卷挂载(确认~/hadoop-data已挂载到容器)
docker inspect hadoop-node1 | grep -A 5 "Mounts"
总结
  1. 核心操作docker stop 容器名 + docker rm 容器名 关闭并删除占用端口的容器;
  2. 端口冲突原因:同一宿主机端口只能映射给一个容器,重复映射会报错;
  3. 验证标准 :重新启动hadoop-node1后,docker ps显示容器状态为Up,无端口占用报错。

执行完上述步骤后,你的hadoop-node1容器就能正常启动,后续可通过docker exec -it hadoop-node1 /bin/bash进入容器配置Hadoop环境。

https://www.doubao.com/thread/w39b0cf5f8055dfe0

五、容器管理(Hadoop节点核心操作)

Hadoop的每个节点都是一个Docker容器,以下操作是日常管理的核心:

1. 启动容器(Hadoop节点启动必用)

基础启动(交互式,测试用)
bash 复制代码
# 启动容器,--name指定容器名,-it交互式,/bin/bash进入命令行
docker run -it --name hadoop-node1 hadoop-base:ubuntu22.04 /bin/bash

# 退出容器(仅退出,容器不停止)
exit  # 或按Ctrl+P+Q
生产级启动(Hadoop部署核心,后台运行+持久化)
bash 复制代码
# 删除hadoop-node1容器
docker rm -f hadoop-node1
# 启动Hadoop节点容器:
# --name: 容器名hadoop-node1
# -p: 宿主机2222端口映射容器22端口(SSH)
# -v: 宿主机~/hadoop-data挂载到容器/opt/hadoop/data(数据持久化)
docker run -d --name hadoop-node1 -p 2222:22 -v ~/hadoop-data:/opt/hadoop/data hadoop-base:ubuntu22.04

2. 容器状态管理

bash 复制代码
# 查看运行中的容器
docker ps

# 查看所有容器(包括停止的)
docker ps -a

# 启动停止的容器
docker start hadoop-node1

# 停止运行的容器
docker stop hadoop-node1

# 重启容器
docker restart hadoop-node1

# 删除容器(需先停止)
docker rm hadoop-node1

# 强制删除运行中的容器(谨慎使用)
docker rm -f hadoop-node1

3. 进入运行中的容器(修改配置/执行命令)

Hadoop部署中需要频繁进入容器修改配置,这是最常用的命令:

bash 复制代码
# 交互式进入容器(推荐,Hadoop配置必用)
docker exec -it hadoop-node1 /bin/bash

# 示例:进入容器后验证SSH服务
service ssh status  # 输出"active (running)"则正常

五、网络管理(分布式Hadoop核心)

分布式Hadoop需要多个容器互通,必须掌握Docker自定义网络:

1. 创建自定义网络(避免IP冲突)

bash 复制代码
# 创建桥接网络,指定子网(Hadoop集群固定IP段,避免冲突)
docker network create --driver bridge --subnet=172.18.0.0/16 hadoop-network

# 查看网络列表(确认创建成功)
docker network ls

2. 容器加入网络(两种方式)

方式1:启动容器时直接加入
bash 复制代码
# --network hadoop-network \  # 加入自定义网络
# --ip 172.18.0.2 \           # 指定固定IP(Hadoop节点IP固定,避免重启变化)
docker run -d  --name hadoop-namenode  --network hadoop-network  --ip 172.18.0.2   hadoop-base:ubuntu22.04
方式2:给已启动容器加网络
bash 复制代码
# 将已创建的容器 hadoop-node1 加入到名为 hadoop-network 的自定义 Docker 网络中 的核心指令
docker network connect hadoop-network hadoop-node1
查看 hadoop-network 网络详情(推荐,直接看 IP 分配)

执行以下命令,会输出 hadoop-network 的完整配置,包含所有接入容器的 IP 和名称:

复制代码
docker network inspect hadoop-network

3. 验证容器网络互通(Hadoop必需)

复制代码
# 1. 停止容器(先停再删,避免强制删除导致数据问题)
docker stop hadoop-datanode1

# 2. 删除容器(释放端口)
docker rm hadoop-datanode1
bash 复制代码
# 启动第二个容器作为DataNode
docker run -d  --name hadoop-datanode1   --network hadoop-network  --ip 172.18.0.4   hadoop-base:ubuntu22.04

# 进入namenode容器,ping datanode(能通则网络正常)
docker exec -it hadoop-namenode ping hadoop-datanode1
docker exec -it hadoop-namenode ping 172.18.0.4

4. 网络常用操作

bash 复制代码
# 查看网络详情(包含连接的容器和IP)
docker network inspect hadoop-network

# 断开容器与网络的连接
docker network disconnect hadoop-network hadoop-node1

# 删除自定义网络(需先断开所有容器)
docker network rm hadoop-network

六、数据卷管理(Hadoop数据持久化)

Hadoop的HDFS数据、日志必须持久化,否则容器删除数据就丢了:

1. 创建命名卷(推荐,管理规范)

bash 复制代码
# 创建数据卷(存储HDFS数据)
docker volume create hadoop-hdfs-data

# 查看数据卷(确认创建成功)
docker volume ls

# 查看数据卷的宿主机路径(了解数据存在哪)
docker volume inspect hadoop-hdfs-data

2. 挂载数据命名卷到容器

bash 复制代码
# \  # hadoop-hdfs-data数据命名卷→容器目录
docker run -d --name hadoop-namenode --network hadoop-network   -v hadoop-hdfs-data:/opt/hadoop/data   hadoop-base:ubuntu22.04

名称冲突的解决办法

方案 1:删除旧容器,重新创建(推荐,全新配置)

适合旧容器还未配置 Hadoop,只是空的基础容器的场景,步骤

复制代码
# 1. 停止并删除旧的hadoop-namenode容器(释放名称)
docker stop hadoop-namenode
docker rm hadoop-namenode

# 2. 重新启动容器(带数据卷挂载)
docker run -d --name hadoop-namenode --network hadoop-network --ip 172.18.0.2 -v hadoop-hdfs-data:/opt/hadoop/data hadoop-base:ubuntu22.04

方案 2:给旧容器挂载数据卷(不删除,复用旧容器)

如果旧容器已有部分配置,不想删除,可通过docker run的替代方案给运行中的容器挂载数据卷(需借助工具,步骤稍复杂):

复制代码
# 1. 先停止旧容器
docker stop hadoop-namenode

# 2. 提交旧容器为新镜像(保留原有配置)
docker commit hadoop-namenode hadoop-namenode:temp

# 3. 删除旧容器
docker rm hadoop-namenode

# 4. 基于新镜像启动容器(挂载数据卷)
docker run -d --name hadoop-namenode --network hadoop-network --ip 172.18.0.2 -v hadoop-hdfs-data:/opt/hadoop/data hadoop-namenode:temp

# 5. (可选)删除临时镜像(清理资源)
docker rmi hadoop-namenode:temp

3. 数据卷常用操作

bash 复制代码
# 删除数据卷(需先停止容器)
docker volume rm hadoop-hdfs-data

# 清理所有未使用数据卷(释放空间)
docker volume prune -f

Docker 3种数据挂载方式核心对比(Hadoop视角)

挂载方式 语法示例 存储位置(宿主机) 核心特点 Hadoop场景适配性
命名卷(你用的方式) -v hadoop-hdfs-data:/opt/hadoop/data /var/lib/docker/volumes/hadoop-hdfs-data/_data(Docker管理) 1. 由Docker统一管理,无需手动建目录; 2. 名称直观(hadoop-hdfs-data),易管理; 3. 容器删除后卷仍保留,数据不丢; 4. 权限适配友好(Docker自动处理)。 ✅ 推荐(生产/测试都适用,数据安全易管理)
匿名卷 -v /opt/hadoop/data /var/lib/docker/volumes/随机ID/_data(Docker管理) 1. 无自定义名称,靠随机ID标识; 2. 数据也持久化,但难以区分(比如分不清是NameNode还是DataNode的卷); 3. 容器删除后卷仍保留,但不易定位。 ❌ 不推荐(Hadoop多节点易混淆)
宿主机目录挂载 -v ~/hadoop-data:/opt/hadoop/data ~/hadoop-data(用户指定的宿主机目录) 1. 数据存在宿主机自定义目录,直观可见; 2. 需手动创建目录,且要处理权限(如容器内用户无读写权限); 3. 跨主机迁移麻烦(目录路径可能不一致)。 ⚠️ 可选(测试环境方便查看数据,生产需注意权限)

关键区别拆解(针对你的Hadoop场景)
1. 命名卷 vs 宿主机目录挂载(新手最易混淆)

你之前用过 -v ~/hadoop-data:/opt/hadoop/data(宿主机目录挂载),和现在的命名卷核心区别:

维度 命名卷(hadoop-hdfs-data:/opt/...) 宿主机目录挂载(~/hadoop-data:/opt/...)
目录创建 Docker自动创建,无需手动操作 需手动创建~/hadoop-data,否则可能报错
权限问题 Docker自动适配容器内用户权限 易出现权限错误(如容器内ubuntu用户无法读写宿主机目录)
数据管理 docker volume ls/inspect/rm管理 用Linux命令(ls/rm/mkdir)管理,易误删
跨环境迁移 可通过docker volume export导出,适配性强 需手动拷贝目录,跨主机路径可能不一致
直观性 需用docker volume inspect看路径 直接在宿主机~/hadoop-data看到数据,更直观
2. 命名卷 vs 匿名卷

匿名卷是命名卷的"无名称版本",比如 -v /opt/hadoop/data

  • 缺点:Docker会生成随机ID作为卷名(如0f987654321),后续想查"哪个卷是NameNode的",需要逐个inspect,对Hadoop多节点集群来说极不友好;
  • 场景:仅适合临时存储,Hadoop集群完全不推荐。

Hadoop部署的挂载方式选择建议
  1. 测试环境
    可选「宿主机目录挂载」(-v ~/hadoop-namenode-data:/opt/hadoop/data),方便直接在宿主机查看/修改HDFS元数据、日志,调试更高效;
  2. 生产/正式集群
    优先选「命名卷」(-v hadoop-namenode-data:/opt/hadoop/data),Docker统一管理,权限问题少,数据安全且易维护;
  3. 绝对避免
    匿名卷(无名称),多节点场景下根本无法区分数据归属。

实操验证(区分两种挂载)
1. 查看命名卷(你用的方式)
bash 复制代码
# 列出所有命名卷
docker volume ls
# 查看hadoop-hdfs-data的详情(含宿主机路径)
docker volume inspect hadoop-hdfs-data
2. 查看宿主机目录挂载
bash 复制代码
# 直接查看宿主机目录
ls ~/hadoop-data
# 查看容器挂载详情(区分卷类型)
docker inspect hadoop-namenode | grep -E "Type|Source|Destination"
# 命名卷的Type是"volume",宿主机目录挂载的Type是"bind"

总结
  1. 核心结论:你这条命令用的就是「命名卷挂载」,不存在"这种方式和命名卷的区别";
  2. 关键区分:重点区分「命名卷」和「宿主机目录挂载」------前者Docker管,易维护;后者用户管,易调试;
  3. Hadoop适配:测试用宿主机目录挂载,正式环境用命名卷,绝对避免匿名卷。

掌握这三种挂载方式的区别,后续部署Hadoop分布式集群时,能根据场景灵活选择,既保证数据持久化,又避免权限/管理坑。

七、核心操作验证(确保掌握)

执行以下步骤,验证所有核心技能是否掌握:

  1. 创建自定义网络hadoop-network
  2. 基于hadoop-base:ubuntu22.04启动2个容器(namenode/datanode1),加入该网络并指定固定IP;
  3. namenode挂载数据卷hadoop-hdfs-data
  4. 进入namenode容器,ping datanode1(能通则网络正常);
  5. 停止并删除所有容器,删除数据卷和自定义网络。

总结

  1. 核心技能:镜像构建(Dockerfile)、容器启停/进入、自定义网络配置、数据卷挂载是Hadoop部署的4个核心前置技能;
  2. 关键原则:Hadoop容器需保证「网络互通、IP固定、数据持久化、端口可访问」;
  3. 后续复用:本教程的Dockerfile、容器启动命令、网络配置可直接复用在Hadoop部署中,只需填充JDK/Hadoop相关内容。

掌握以上内容,后续部署Hadoop时,只需聚焦Hadoop本身的配置,Docker层面的操作不会成为障碍。

相关推荐
Thomas.Sir2 小时前
Hadoop YARN:大数据集群的“操作系统”
大数据·hadoop·分布式·yarn
Q鑫2 小时前
K8s之pod解析与调度策略
docker·容器·kubernetes
Codefengfeng2 小时前
如何本地部署大模型(以PaddleOCR-VL-1.5为例)
vscode·visualstudio·docker·语言模型·aigc·ocr
Lupino12 小时前
别再只聊 AI 写代码了:技术负责人要把“变更治理”提到第一优先级
python·docker·容器
Java陈序员3 天前
轻量强大!一款现代化的 Kubernetes 集群管理与监控工具!
云原生·容器·kubernetes
Sheffield4 天前
Docker的跨主机服务与其对应的优缺点
linux·网络协议·docker
Sheffield5 天前
Alpine是什么,为什么是Docker首选?
linux·docker·容器
马艳泽5 天前
win10下运行Start Broker and Proxy报错解决
docker
用户13573999256606 天前
Windows 从 0 搭建 WSL2 原生 AI 开发环境:Codex + Docker + VSCode
docker