用Docker在一台笔记本电脑上搭建一个具备10个节点7种角色的Hadoop集群(上)-快速上手Docker

若是想在一台电脑上搭建一个多节点的Hadoop集群,传统的方式是使用多个虚拟机。但这种方式占用的资源比较多,一台笔记本能同时运行的虚拟机的数量是颇有限的。这个时候咱们可使用Docker。Docker能够看作是一种轻量级的虚拟机,占用资源少,用起来和传统的虚拟机很像,使用的时候能够类比VMware或VirtualBox。
本文不能让你精通Docker,但能让你快速上手,并搭建好这个集群,前提是你对Hadoop和Linux有所了解。html

 

〇、准备工做

1.准备Docker宿主机
目前Docker只能运行在内核版本为3.10或以上的64位Linux上。安装Docker的Linux系统称为Docker的宿主机。若是你的系统不符合,能够先安装一台符合要求的虚拟机,而后再在这个虚拟机上使用Docker。个人笔记本是Windows系统,装了一台64位CentOS7.3虚拟机作演示。因为要将10个节点都跑在一台虚拟机上,因此给这台虚拟机分配的资源不能太少,不然会有问题。虽然Docker比虚拟机省了很多资源,但Hadoop须要的资源省不了啊。我给分配了2个核,4G内存,这比用10台虚拟机须要的资源仍是小不少的。另外由于只须要一台Linux,因此在笔记本上装双系统也是能够的。

2.准备相关软件
JDK使用jdk-7u80-linux-x64
Hadoop使用hadoop-2.7.3
将JDK和Hadoop提早下载并减压,放到Docker宿主机上备用。linux

 

1、安装Docker

如今Docker分为社区版Docker CE和企业版Docker EE。Docker CE免费,Docker EE收费。Docker CE又分为Docker CE Edge和Docker CE Stable。Docker CE Edge每1个月发布一个版本,Docker CE Stable每3个月发布一个版本。Stable表示稳定版,因此下面只介绍Docker CE Stable。

1.安装yum-utilsdocker

$ sudo yum install -y yum-utils


2.添加Docker CE的yum源shell

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo



3.更新yum包索引ubuntu

$ sudo yum makecache fast



4.安装Docker CEcentos

$ sudo yum install docker-ce

安装过程当中若有相似Is this ok [y/N]的提问,都输入y,而后回车便可。直到最后显示“Complete!”表示安装成功!bash

 

2、Docker初体验

1.启动Docker服务器

$ sudo systemctl start docker



2.查看Docker版本app

$ sudo docker -v

默认安装的是最新版本,咱们能够看到当前最新版本是Docker version 17.03.1-ce, build c6d412e。socket



3.运行hello world示例

$ sudo docker run hello-world

官方给提供了一个hello-world示例,用来测试Docker是否正常工做。第一次运行时,Docker须要从官网下载该示例,不过很小,下载很快。只要能输出下面的英文,就说明hello-world示例运行成功了!

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/


4.去掉sudo
对于非root用户,不少Docker命令都必须用sudo才能正常执行。好比不用sudo运行刚才的hello-world示例会出现下面的错误提示:

[chengyujia@localhost ~]$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.27/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

老用sudo挺麻烦的,下面介绍解决的办法。Docker在安装的时候会生成一个叫docker的用户组,只要把你使用的用户加到这个组里就能免sudo了。
下面咱们来加入docker组

$ sudo usermod -aG docker chengyujia

而后退出当前shell,从新登陆一下,之后就不用sudo了。

 

3、Docker中的一些概念

1.镜像image和容器container
若是将Docker比做是VMware,镜像能够比做是ISO文件,容器能够比做是安装好的虚拟机。镜像不能直接使用,经过镜像能够建立容器,而后咱们使用容器。在使用上,容器和虚拟机很像,咱们在容器里能够随便折腾,折腾坏了也不要紧,只要相应的镜像在,随时能够建立一个新的容器。并且不管是建立容器仍是启动容器都比虚拟机快不少。

2.查看本机上的镜像

$ sudo docker images


先介绍一下相关的词义:
REPOSITORY  能够理解为镜像的名称。
TAG       能够理解为镜像的版本。
IMAGE ID    镜像的编号。在建立镜像时自动生成。
CREATED    镜像的建立时间。
SIZE       镜像的大小。
从截图上能够看到,如今只有一个叫hello-world的镜像,就是刚才咱们运行hello-world示例自动下载的。默认会下载最新版,也就是TAG为latest的版本,镜像编号为48b5124b2768,建立于4个月前,大小为1.84kB。

3.查看本机上的容器

$ sudo docker ps -a

命令中的-a参数表示显示全部容器,不然只显示正在运行的容器。


一样先介绍一下相关的词义:
CONTAINER ID  容器的编号。在建立容器时自动生成。
IMAGE      镜像名称或镜像编号。用来指明该容器是用哪一个镜像建立的。
COMMAND    容器启动后执行的命令。
CREATED     容器建立的时间。
STATUS     容器的当前状态。Exited表示容器处于退出状态,相似于电脑“已关机”;Up表示容器正在运行。
PORTS       端口映射。若是有的话也只能在运行状态才能看到。具体状况后面搭集群时再介绍。
NAMES       容器名称。这个能够本身指定或修改,但不能和其它容器的名称相同。若是不指定,Docker会自动生成。
从截图上能够看到,当前只有一个容器,就是刚才的hello-world示例,容器编号为42989ad0874a,使用hello-world镜像建立,启动后执行一个叫hello的命令,建立于12分钟前,如今处于退出状态,docker自动给起了个名字elegant_mccarthy。

4.刚才hello-world示例中生成的容器是否是就能像虚拟机同样用了呢?
不能。咱们使用类比来解释,ISO文件经常使用来装系统,但ISO文件不是只能装系统,里面能够听任何文件。一样,docker镜像里也未必带操做系统功能,官网的hello-world镜像就不带。用它来生成的容器,只能输出一段话,没有其它功能,毕竟只是一个1k多东西。下面来介绍咱们真正要用的东西。

 

4、Docker镜像基本操做

Docker的服务器上有不少镜像,分为两类,一类是Docker官方的,另外一类是普通用户上传的。Docker把他们放镜像的地方叫作Docker Hub。

1.搜索镜像
下面以centos为例

$ docker search centos


在搜索结果列表中OFFICIAL列中有[OK]的表示是官方的镜像。咱们看到第一个就是官方的。

2.下载镜像

$ docker pull centos


默认下载最新版

3.查看镜像

$ docker images

从上图中能够看到刚下载的centos镜像已经在列表中了,大小为193MB。须要注意的是Docker中的镜像都是针对Docker设计的,只能在Docker中使用。好比刚下载的这个centos镜像不能用来装系统哦。Docker中的操做系统镜像比用来装系统的ISO镜像要小的多。

 

5、Docker容器基本操做

1.建立并运行容器

$ docker run -it -h pseudo-distributed --name pseudo-distributed centos


说明:
docker run    表示建立一个容器并运行。
-it             表示容器运行后直接进入容器内部的命令行。此时就能够像操做虚拟机同样操做这个容器了。
-h             表示容器的主机名hostname,和虚拟机的hostname同样。若是不指定,Docker会用CONTAINER ID来做为hostname。
--name        表示容器的名称。这个前面已经提到了,若是本身不指定,Docker会自动分配一个名称。不过仍是本身指定的更有意义。
其中主机名和容器名一不同都行,我这里是给了同样的,都是pseudo-distributed。
最后一个参数centos是镜像名称,表示该容器用哪一个镜像建立。
这个过程相似于用ISO文件装系统。

2.退出当前容器并保持其继续运行

快捷键Ctrl+p+q


3.进入正在运行的容器

$ docker attach  pseudo-distributed


4.退出当前容器并中止其运行

# exit


5.启动已中止运行的容器
$ docker start -i pseudo-distributed

$ docker start -i pseudo-distributed

-i    表示启动后直接进入该容器

6.关闭正在运行的容器

$ docker stop pseudo-distributed

 

下篇:用Docker在一台笔记本电脑上搭建一个具备10个节点7种角色的Hadoop集群(下)-搭建Hadoop集群

相关文章
相关标签/搜索