标签:
一.Docker介绍和安装
http://linux.cn/article-4340-1.html
Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单。容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止。Docker 帮助系统管理员和程序员在容器中开发应用程序,并且可以扩展到成千上万的节点。
容器和 VM(虚拟机)的主要区别是,容器提供了基于进程的隔离,而虚拟机提供了资源的完全隔离。虚拟机可能需要一分钟来启动,而容器只需要一秒钟或更短。容器使用宿主操作系统的内核,而虚拟机使用独立的内核。
Docker 的局限性之一是,它只能用在 64 位的操作系统上。
在这篇文章中我们将讨论如何在 CentOS 7.x 中安装 docker。
CentOS 7 中 Docker 的安装
Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运行下面的 yum 命令:
- [root@localhost ~]# yum install docker
启动 Docker 服务
安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:
- [root@localhost ~]# service docker start
- [root@localhost ~]# chkconfig docker on
(LCTT 译注:此处采用了旧式的 sysv 语法,如采用CentOS 7中支持的新式 systemd 语法,如下:
- [root@localhost ~]# systemctl start docker.service
- [root@localhost ~]# systemctl enable docker.service
)
下载官方的 CentOS 镜像到本地 (LCTT 译注:由于 Docker 被墙 :-< ,所以请使用 http://docker.cn 的镜像,感谢 @马全一 的镜像。 )
- [root@localhost ~]# docker pull centos
- Pulling repository centos
- 192178b11d36: Download complete
- 70441cac1ed5: Download complete
- ae0c2d0bdc10: Download complete
- 511136ea3c5a: Download complete
- 5b12ef8fd570: Download complete
确认 CentOS 镜像已经被获取:
- [root@localhost ~]# docker images centos
- REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
- centos centos5 192178b11d36 2 weeks ago 466.9 MB
- centos centos6 70441cac1ed5 2 weeks ago 215.8 MB
- centos centos7 ae0c2d0bdc10 2 weeks ago 224 MB
- centos latest ae0c2d0bdc10 2 weeks ago 224 MB
运行一个 Docker 容器:
- [root@localhost ~]# docker run -i -t centos /bin/bash
- [root@dbf66395436d /]#
我们可以看到,CentOS 容器已经被启动,并且我们得到了 bash 提示符。在 docker 命令中我们使用了 “-i 捕获标准输入输出”和 “-t 分配一个终端或控制台”选项。若要断开与容器的连接,输入 exit。
- [root@cd05639b3f5c /]# cat /etc/redhat-release
- CentOS Linux release 7.0.1406 (Core)
- [root@cd05639b3f5c /]# exit
- exit
- [root@localhost ~]#
我们还可以搜索基于 Fedora 和 Ubuntu 操作系统的容器。
- [root@localhost ~]# docker search ubuntu
- [root@localhost ~]# docker search fedora
显示当前正在运行容器的列表
二.DAOCLOUD
daocloud提供了docker上的许多image,对访问被墙的外网来说是一个很好的解决办法:https://dashboard.daocloud.io/mirror
-
安装或升级Docker
Docker 1.3.2版本以上支持加速器,如果您没有安装Docker或者版本较旧,请安装或升级。
参考Docker安装文档。高速安装Docker
-
配置Docker加速器
sudo sed -i ‘s|other_args=|other_args=--registry-mirror=http://f07735fb.m.daocloud.io |g‘ /etc/sysconfig/docker
sudo service docker restart
该脚本可以将--registry-mirror
加入到你的Docker配置文件/etc/sysconfig/docker
中。适用于Centos7,其他版本可能有细微不同。其中other_args可替换为OPTIONS,要根据脚步的实际情况来决定,配置完后为:OPTIONS=--registry-mirror=http://f07735fb.m.daocloud.io ‘--selinux-enabled‘
-
尽情享受Docker加速器
Docker加速器使用时不需要任何额外操作。就像这样下载官方Ubuntu镜像
docker pull ubuntu
更多精彩镜像就在下方Docker热门Repositories中
三.使用Docker在本地搭建Hadoop分布式集群
http://www.tuicool.com/articles/QBryi23
启动第一个容器
下面,我们准备以ubuntu镜像作为基准镜像,构建我们的Hadoop运行环境镜像。
先使用命令如下命令启动容器:
docker run -ti ubuntu
注意:我们在不指定Tag的情况下,默认选择Tag为 latest
的镜像启动容器。 指定Tag启动命令为:
docker run -ti ubuntu:14.04
另外,每次容器启动的时候需要指定一个命令,容器启动后便会执行这个命令。例如执行下面的命令:
king@king:~$ docker run ubuntu /bin/echo ‘Hello world‘
Hello world
king@king:~$
可以看到,容器启动了马上又退出了,因为容器之做了一件事情:就是打印 Hello world
,打印完了,自然就退出了。
如果你想做多件事情,可以自己写一个shell脚本,把你要的操作写入进去,然后在 run
后面指定这个脚本路径。
我们刚刚的 docker run -ti ubuntu
命令中没有指定执行程序,Docker默认执行 /bin/bash
。
其他启动参数,大家可以自己在网上查,这里不再陈述了。好了我们回到刚刚 docker run -ti ubuntu
启动的容器,可以看到容器几乎瞬间就启动起来了,比虚拟机不知快了多少倍!!
king@king:~$ docker run -ti ubuntu
root@009fe5728aba:/
容器启动起来了,接下来就是安装Java、Hadoop及相关配置了。
Java安装
依次执行如下命令:
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sodu apt-get update
apt-get install oracle-java7-installer
java -version
注意:
- 这里安装的Java7(JDK1.7),如需其他版本请自行修改
apt-get install oracle-java7-installer
为 apt-get install oracle-java6-installer
- 默认使用的是Ubuntu的官方源,如果下载比较慢,请自行修改更新源,不知道如何使用命令行修改的,参考 这里 。
另外,大家可以将装好java的镜像保存为一个副本,他日可以在此基础上构建其他镜像。命令如下:
root@122a2cecdd14:~
上面命令中 122a2cecdd14
为当前容器的ID, ubuntu:java
是为新的镜像指定一个标识, ubuntu
为 仓库名 , java
是 Tag 。
如何获取容器ID:
- 有个简便的办法找到此ID,就是命令行用户名
@
后面的那一串字符。这个方法只在容器启动时没有指定hostname时才能用。
- 使用
docker ps
列出所有运行的容器,在命令结果中查看
Hadoop安装
渐渐切入正题了O(∩_∩)O~
使用刚刚已经安装了Java的容器镜像启动:
docker run -ti ubuntu:java
启动成功了,我们开始安装Hadoop。这里,我们直接使用wget下载安装文件。
1.先安装wget:
sudo apt-get install -y wget
2.下载并解压安装文件:
root@8ef06706f88d:cd ~
root@8ef06706f88d:~
注意:这里我们安装的Hadoop版本是2.6.0,如果需要其他版本,请在 这里 找到链接地址后修改命令即可。
3.配置环境变量
修改 ~/.bashrc
文件。在文件末尾加入下面配置信息:
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
export HADOOP_HOME=/root/soft/apache/hadoop/hadoop-2.6.0
export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
注意:我们使用 apt-get
安装java,不知道java装在什么地方的话可以使用下面的命令查看:
root@8ef06706f88d:~
4.配置Hadoop
下面,我们开始修改Hadoop的配置文件。主要配置 core-site.xml 、 hdfs-site.xml 、 mapred-site.xml 这三个文件。
开始配置之前,执行下面命令:
root@8ef06706f88d:~
这里创建了三个目录,后续配置的时候会用到:
- tmp:作为Hadoop的临时目录
- namenode:作为NameNode的存放目录
- datanode:作为DataNode的存放目录
1).core-site.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
注意:
hadoop.tmp.dir
配置项值即为此前命令中创建的临时目录路径。
fs.default.name
配置为 hdfs://master:9000
,指向的是一个Master节点的主机(后续我们做集群配置的时候,自然会配置这个节点,先写在这里)
2).hdfs-site.xml配置
使用命令 nano hdfs-site.xml
编辑 hdfs-site.xml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
注意:
- 我们后续搭建集群环境时,将配置一个Master节点和两个Slave节点。所以
dfs.replication
配置为2。
dfs.namenode.name.dir
和 dfs.datanode.data.dir
分别配置为之前创建的NameNode和DataNode的目录路径
3).mapred-site.xml配置
Hadoop安装文件中提供了一个mapred-site.xml.template,所以我们之前使用了命令 cp mapred-site.xml.template mapred-site.xml
,创建了一个mapred-site.xml文件。下面使用命令 nano mapred-site.xml
编辑这个文件:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
这里只有一个配置项 mapred.job.tracker
,我们指向master节点机器。
4)修改JAVA_HOME环境变量
使用命令 .nano hadoop-env.sh
,修改如下配置:
5.格式化 namenode
这是很重要的一步,执行命令 hadoop namenode -format
4.安装SSH
搭建集群环境,自然少不了使用SSH。这可以实现无密码访问,访问集群机器的时候很方便。
root@8ef06706f88d:~
SSH装好了以后,由于我们是Docker容器中运行,所以SSH服务不会自动启动。需要我们在容器启动以后,手动通过 /usr/sbin/sshd
手动打开SSH服务。未免有些麻烦,为了方便,我们把这个命令加入到 ~/.bashrc
文件中。通过 nano ~/.bashrc
编辑 .bashrc
文件(nano没有安装的自行安装,也可用vi),在文件后追加下面内容:
5.生成访问密钥
root@8ef06706f88d:/
注意: 这里,我的思路是直接将密钥生成后写入镜像,免得在买个容器里面再单独生成一次,还要相互拷贝公钥,比较麻烦。当然这只是学习使用,实际操作时,应该不会这么搞,因为这样所有容器的密钥都是一样的!!
6.保存镜像副本
这里我们将安装好Hadoop的镜像保存为一个副本。
root@8ef06706f88d:~
Hadoop分布式集群搭建
重点来了!
按照 hadoop 集群的基本要求,其 中一个是 master 结点,主要是用于运行 hadoop 程序中的 namenode、secondorynamenode 和 jobtracker(新版本名字变了) 任务。用外两个结点均为 slave 结点,其中一个是用于冗余目的,如果没有冗 余,就不能称之为 hadoop 了,所以模拟 hadoop 集群至少要有 3 个结点。
前面已经将Hadoop的镜像构建好了,下面就是使用这个镜像搭建Master节点和Slave节点了:
节点 |
hostname |
ip |
用途 |
Docker启动脚本 |
Master |
master |
10.0.0.5 |
namenode
secondaryNamenode
jobTracker
|
docker run -ti -h master ubuntu:hadoop |
Slave |
slave1 |
10.0.0.6 |
datanode
taskTracker
|
docker run -ti -h slave1 ubuntu:hadoop |
Slave |
slave2 |
10.0.0.7 |
datanode
taskTracker
|
docker run -ti -h slave2 ubuntu:hadoop |
启动Docker容器
回顾一下,Docker启动容器使用的是 run
命令:
docker run -ti ubuntu:hadoop
这里有几个问题:
- Docker容器中的ip地址是启动之后自动分配的,且不能手动更改
- hostname、hosts配置在容器内修改了,只能在本次容器生命周期内有效。如果容器退出了,重新启动,这两个配置将被还原。且这两个配置无法通过
commit
命令写入镜像
我们搭建集群环境的时候,需要指定节点的hostname,以及配置hosts。hostname可以使用Docker run
命令的 h
参数直接指定。但hosts解析有点麻烦,虽然可以使用 run
的 --link
参数配置hosts解析信息,但我们搭建集群时要求两台机器互相能够 ping
通,其中一个容器没有启动,那么ip不知道,所以 --link
参数对于我们的这个场景不实用。要解决这个问题,大概需要专门搭建一个域名解析服务,即使用 --dns
参数(参考 这里 )。
我们这里只为学习,就不整那么复杂了,就手动修改hosts吧。只不过每次都得改,我Docker知识浅薄,一时还没有解决这个问题。相信肯定有更好的办法。如果有高人能指定一下,感激不尽!!
启动master容器
docker run -ti -h master ubuntu:hadoop
启动slave1容器
docker run -ti -h slave1 ubuntu:hadoop
启动slave2容器
docker run -ti -h slave2 ubuntu:hadoop
配置hosts
- 通过
ifconfig
命令获取各节点ip。环境不同获取的ip可能不一样,例如我本机获取的ip如下:
- master:10.0.0.5
- slave1:10.0.0.6
- slave2:10.0.0.7
-
使用 sudo nano /etc/hosts
命令将如下配置写入各节点的hosts文件,注意修改ip地址:
10.0.0.5 master
10.0.0.6 slave1
10.0.0.7 slave2
配置slaves
下面我们来配置哪些节点是slave。在较老的Hadoop版本中有一个masters文件和一个slaves文件,但新版本中只有slaves文件了。
在master节点容器中执行如下命令:
root@master:~
将如下slave节点的hostname信息写入该文件:
slave1
slave2
启动Hadoop
在master节点上执行 start-all.sh
命令,启动Hadoop。
激动人心的一刻……
如果看到如下信息,则说明启动成功了:
root@master:~/soft/apache/hadoop/hadoop-2.6.0/etc/hadoop# start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [master]
master: starting namenode, logging to /root/soft/apache/hadoop/hadoop-2.6.0/logs/hadoop-root-namenode-master.out
slave1: starting datanode, logging to /root/soft/apache/hadoop/hadoop-2.6.0/logs/hadoop-root-datanode-slave1.out
slave2: starting datanode, logging to /root/soft/apache/hadoop/hadoop-2.6.0/logs/hadoop-root-datanode-slave2.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /root/soft/apache/hadoop/hadoop-2.6.0/logs/hadoop-root-secondarynamenode-master.out
starting yarn daemons
starting resourcemanager, logging to /root/soft/apache/hadoop/hadoop-2.6.0/logs/yarn--resourcemanager-master.out
slave1: starting nodemanager, logging to /root/soft/apache/hadoop/hadoop-2.6.0/logs/yarn-root-nodemanager-slave1.out
slave2: starting nodemanager, logging to /root/soft/apache/hadoop/hadoop-2.6.0/logs/yarn-root-nodemanager-slave2.out
四.基于daocloud创建startbbs容器实战
http://www.simlinux.com/archives/532.html
首先,StartBBS 是一款优雅、开源、轻量社区系统,基于MVC架构,采用PHP+MySQL
官网: http://www.startbbs.com/
项目地址:https://github.com/startbbs/startbbs
实验环境:
- 基于daocloud平台构建镜像容器
- 基础镜像采用ubuntu:trusty
- 测试机centos6.6 x64
创建步骤:
1.测试机安装docker并编写dockerfile文件
|
yum -y update
yum -y install docker-io
service docker start
chkconfig docker on
|
更改docker的默认mirrors(可以注册daocloud有免费加速镜像下载地址)
|
sed -i ‘s#other_args=#other_args="--registry-mirror=http://7de036e1.m.daocloud.io"#g‘/etc/sysconfig/docker
|
下载基础镜像
|
docker pull ubuntu:trusty
|
在github上fork startbbs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
git clone https://github.com/geek-linux/startbbs.git
cd startbbs
创建Dockerfile文件
FROM ubuntu:trusty
MAINTAINER Geekwolf
RUN apt-get -y update && apt-get -y install mysql-client php5 ImageMagick apache2 php5-gd php5-mysql
RUN rm -rf /var/www/html/*
ADD . /var/www/html
RUN chown -R www-data:www-data /var/www/html
WORKDIR /var/www/html
RUN echo "ServerName startbbs.daoapp.io">>/etc/apache2/apache2.conf
RUN sed -i "s#‘localhost‘#getenv("MYSQL_PORT_3306_TCP_ADDR")#g" app/config/database.php && sed -i "s#‘startbbs‘#getenv("MYSQL_INSTANCE_NAME")#g" app/config/database.php && sed -i "s#‘root‘#getenv("MYSQL_USERNAME")#g" app/config/database.php && sed -i "s#‘123456‘#getenv("MYSQL_PASSWORD")#g" app/config/database.php
EXPOSE 80
CMD ["/usr/sbin/apache2ctl","-D","FOREGROUND"]
|
注:ServerName可以根据daocloud平台自定义一个daoapp.io的二级域
根据Dockerfile从基础镜像中创建startbbs web镜像
|
cd startbbs
docker build -t startbbs .
docker run --name=startbbs -it startbbs:latest /bin/bash
无ssh登陆容器查看是否正常
nsenter --target $(docker inspect --format "{{.State.Pid}}" startbbs) --mount --uts --ipc --net --pid
|
最后,将Dockerfile文件提交到startbbs代码库根目录
|
git add Dockerfile
git commit -am "Add Dockerfile"
git push origin master
|
2.在daocloud平台构建镜像
A. 登陆 https://www.daocloud.io,选择代码构建
–创建项目
B. 设置代码源github,选择代码库startbbs,暂时关闭持续集成
–发布应用镜像:镜像仓库
–开始创建
C. 选择服务集成
–选择MySQL镜像
–创建服务实例
–我的服务
查看数据库账号信息
D. 此处简单起见使用daocloud自带的phpMyAdmin镜像(镜像仓库
)创建容器,并导入startbbs的sql文件(data/db/startbbs.sql)
E. 创建startbbs容器,镜像仓库
–选择startbbs镜像
–点击部署
–容器名字:startbbs–选择相应的容器配置–点击服务&环境
–绑定MySQL容器
–立即部署
–容器启动后,设置域名
为http://startbbs.daoapp.io,绑定自有域名http://bbs.simlinux.com,增加dns解析cname到z3y206n242.daoap.me 即可
F. 访问http://startbbs.daoapp.io初始化startbbs,到此startbbs容器安装完成
G. 创建得容器在 https://dashboard.daocloud.io即可看到
CentOS 7上搭建Docker环境
标签:
原文地址:http://www.cnblogs.com/lvfeilong/p/324324sdff.html