《基于docker搭建hadoop分布式集群(一)》主要讨论docker的安装,所用的宿主机系统是fedora22,以下所有命令均在root权限下运行。
Dokcer是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在PC机上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bara metal、OpenStack集群和其他的基础应用平台。
使用dnf安装docker:
dnf install -y docker
在安装完成docker之后,可以使用docker info查看系统信息,包括镜像和容器数。
Docker系统有两个程序:docker服务端和docker客户端。其中docker服务端是一个服务进程,管理着所有的容器。docker客户端扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。
因此在启动docker时,必须首先启动docker服务端,使用如下命令启动:
docker -d &
&代表以后台程序运行。
为了避免在系统每次启动时都运行上述命令,使用如下命令设置docker随系统启动:
chkconfig docker on
使用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命令时,可能会碰到如下问题:
出现该问题可能有如下两种情况:
容器是在镜像的基础上来运行的,一旦容器启动了,我们就可以登录到容器中,安装自己所需的软件或应用程序。
使用如下命令即可启动容器:
docker run -it -v /root/software:/mnt/software/ ubuntu:14.04 /bin/bash
将该命令作如下分解:
docker run <相关参数> <镜像 ID> <初始命令>
其中,相关参数包括:
假设我们所有的安装程序都放在了宿主机的/root/software目录下,现在需要将其挂载到容器的/mnt/software目录下。
需要说明的是,不一定要使用“镜像 ID“,也可以使用“仓库名:标签名“。
启动容器之后,可以查看容器内的目录结构如下:
可以看出该容器与宿主机有相同的目录结构。
为了搭建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
首先,编辑.bashrc
文件
vim ~/.bashrc
然后,在该文集末尾添加如下配置:
export JAVA_HOME=/opt/jdk
export PATH=$PATH:$JAVA_HOME
最后,需要使用source
命令让环境变量生效:
source ~/.bashrc
为了以后可以继续在此基础上构建其他镜像,可以将装好的java镜像保存为一个副本。
首先使用exit
命令退出当前容器,然后使用如下命令查询当前退出容器的ID:
docker ps -a
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:容器和镜像