基于docker搭建hadoop分布式集群(一)

《基于docker搭建hadoop分布式集群(一)》主要讨论docker的安装,所用的宿主机系统是fedora22,以下所有命令均在root权限下运行。

Dokcer是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在PC机上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bara metal、OpenStack集群和其他的基础应用平台。

一、docker安装


1. 安装

使用dnf安装docker:

dnf install -y docker

在安装完成docker之后,可以使用docker info查看系统信息,包括镜像和容器数。


2. 启动

Docker系统有两个程序:docker服务端和docker客户端。其中docker服务端是一个服务进程,管理着所有的容器。docker客户端扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。
因此在启动docker时,必须首先启动docker服务端,使用如下命令启动:

docker -d &

&代表以后台程序运行。
为了避免在系统每次启动时都运行上述命令,使用如下命令设置docker随系统启动:

chkconfig docker on

3.使用

使用docker之前必须理解两个概念,一个一个是image,一个是container。实际上,image是只读的模板,用来生成所需要的container,而container也可以变成新的image。
使用如下命令可以下载一个镜像:

docker pull <镜像名:tag>

如:

docker pull ubuntu:14.04

上述命令拉取到了一个ubuntu 14.04的镜像


Note

docker pull fedora:22

在用上述命令拉取到一个镜像时,我一直以为该镜像fedora的环境,结果在使用时发现其用的软件包管理命令居然是apt-get!!!
该问题留待以后继续研究^_^


拉取到镜像之后,可以用如下命令查看所有的镜像:

docker images

在有了一个镜像之后,可以通过docker run启动一个镜像作为一个容器运行,在该容器中可以运行命令。
如:

docker run -it ubuntu:14.04

该命令启动ubuntu 14.04镜像,默认运行的命令为/bin/bash。


Note

在使用docker命令时,可能会碰到如下问题:这里写图片描述
出现该问题可能有如下两种情况:

  1. 使用docker命令时需要root权限
  2. 没有启动docker服务端

二、在容器中搭建Java运行环境


1.启动容器

容器是在镜像的基础上来运行的,一旦容器启动了,我们就可以登录到容器中,安装自己所需的软件或应用程序。
使用如下命令即可启动容器:

docker run -it -v /root/software:/mnt/software/ ubuntu:14.04 /bin/bash

将该命令作如下分解:

docker run <相关参数> <镜像 ID> <初始命令>

其中,相关参数包括:

  • -i :表示以“交互模式“运行容器
  • -t :表示容器启动后会进入其命令行
  • -v :表示需要将本地哪个目录挂在到容器中,格式:-v <宿主机目录>:<容器目录>

假设我们所有的安装程序都放在了宿主机的/root/software目录下,现在需要将其挂载到容器的/mnt/software目录下。

需要说明的是,不一定要使用“镜像 ID“,也可以使用“仓库名:标签名“。

启动容器之后,可以查看容器内的目录结构如下:
基于docker搭建hadoop分布式集群(一)_第1张图片
可以看出该容器与宿主机有相同的目录结构。


2.安装JDK

为了搭建Java运行环境,需要安装JDK,下面的过程均在容器内部进行。暂且选择/opt/目录作为安装目录,首先需要 cd /opt/命令进入该目录。
首先,解压JDK程序包:

tar -zxvf /mnt/software/jdk-xxx.tar.gz -C .

然后,重命名JDK目录:

mv jdk-xxx/ jdk/

Note
在将宿主机的/root/software目录挂载到容器的/mnt/software下,在使用该目录时可能会碰到selinux问题,因此需要在宿主机上运行如下命令添加一条selinux规则:

chcon -Rt svirt_sandbox_file_t /root/software

3.设置环境变量

首先,编辑.bashrc文件

vim ~/.bashrc

然后,在该文集末尾添加如下配置:

export JAVA_HOME=/opt/jdk
export PATH=$PATH:$JAVA_HOME

最后,需要使用source命令让环境变量生效:

source ~/.bashrc

为了以后可以继续在此基础上构建其他镜像,可以将装好的java镜像保存为一个副本。
首先使用exit命令退出当前容器,然后使用如下命令查询当前退出容器的ID:

docker ps -a

如:
这里写图片描述
最后使用如下命令将装入jdk的容器保存为新的镜像:

docker commit -m "java install"  ubuntu:java

Note
可能在使用容器中的vim命令时会提示没有该命令,这时需要使用如下命令安装vim编辑器:

apt-get install -y vim

这时可能会碰到容器中网络不通的情况,这时可以在宿主机下使用如下命令:

pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
docker -d &

然后再重新启动容器即可。


参考资料

如何在 Fedora 22 上面配置 Apache 的 Docker 容器
docker 入门教程指南
使用 Docker 搭建 Java Web 运行环境
深入 Docker:容器和镜像

你可能感兴趣的:(hadoop)