docker怎么实现集群编译
1. 如何在"特殊"的网络环境下编译 Docker
由于 Docker 编译需要依赖于 Docker Daemon ,所以只能在 64 位的 linux 环境下先安装 Docker 程序,再从 Github 上克隆 Docker 的代码进行编译。
在 Docker 的目录下执行 make 命令将默认执行 Makefile 中 make binary 指令进行编译。
?
default: binary
all: build
$(DOCKER_RUN_DOCKER) hack/make.sh
binary: build
$(DOCKER_RUN_DOCKER) hack/make.sh binary
cross: build
$(DOCKER_RUN_DOCKER) hack/make.sh binary cross
从以上的 Makefile 可以看出,执行 make、make binary、make all 或 make cross 都可以得到可运行的 Docker 程序。
在 Mac OS 环境下使用 brew 的命令安装 Docker ,只能得到一个 docker client 的二进制程序,如果以 daemon 的方式运行,会得到 ‘This is a client-only binary - running the Docker daemon is not supported.’ 的错误提示信息。
方法 1.
使用 VirtualBox 或者 VMWare Workstation 安装一个 Linux 的虚拟机。宿主机使用 VPN 等方案使网络“正常”访问各种“服务”,虚拟机网卡使用 NAT 模式。在 Linux 虚拟机内使用 make 进行编译 Docker 不会有任何网络问题。只是编译速度受限于 VPN 等网络解决方案,有可能等待时间很长。
方法 2.
Docker 每次发布新版本,都会在 docker-dev 的镜像仓库发布一个新的标签,这个镜像仓库包含了编译 Docker 镜像所依赖的所有环境,只需替换 Docker 代码目录下的 Dockerfile 即可实现编译 Docker 。
?
FROM docker.cn/docker/docker-dev:v1.2.0
VOLUME /var/lib/docker
WORKDIR /go/src/github.com/docker/docker
ENV DOCKER_BUILDTAGS apparmor selinux
ENTRYPOINT [“hack/dind”]
COPY . /go/src/github.com/docker/docker
Dockerfile 中只保留必要的步骤就可以实现编译了。
2. 如何从零开始搭建Docker Swarm集群
检查节点Docker配置
1. 打开Docker配置文件(示例是centos 7)
vim /etc/sysconfig/docker
2. 添加-H tcp://0.0.0.0:2375到OPTIONS
OPTIONS='-g /cutome-path/docker -H tcp://0.0.0.0:2375'
3. CentOS6.6 需要另外添加-H unix:///var/run/docker.sock
OPTIONS='-g /mnt/docker -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock'
分别给A、B节点安装swarm
$ docker pull swarm
生成集群token(一次)
$ docker run --rm swarm create
其中就是我们将要创建集群的token
添加节点A、B到集群
$ docker run -d swarm join --addr=192.168.20.1:2375 token://
$ docker run -d swarm join --addr=192.168.20.2:2375 token://
列出集群A、B节点
$ docker run --rm swarm list token://
192.168.20.1:2375
192.168.20.2:2375
集群管理:
在任何一台主机A、B或者C(C:192.168.20.3)上开启管理程序。例如在C主机开启:
$ docker run -d -p 8888:2375 swarm manage token://
现在你就可以在主机C上管理集群A、B:
$ docker -H 192.168.20.3:8888 info
$ docker -H 192.168.20.3:8888 ps
$ docker -H 192.168.20.3:8888 logs ...
在集群上运行容器
$ docker -H 192.168.20.3:8888 run -d --name web1 nginx
$ docker -H 192.168.20.3:8888 run -d --name web2 nginx
$ docker -H 192.168.20.3:8888 run -d --name web3 nginx
$ docker -H 192.168.20.3:8888 run -d --name web4 nginx
$ docker -H 192.168.20.3:8888 run -d --name web5 nginx
查看集群A、B内的容器
$ docker -H 192.168.20.3:8888 ps -a
3. 如何配置一个 Docker Swarm 原生集群
1. 运行Swarm的先决条件
我们必须在所有节点安装Docker 1.4.0或更高版本。虽然各个节点的IP地址不需要要公共地址,但是Swarm管理器必须可以通过网络访问各个节点。
注意:Swarm当前还处于beta版本,因此功能特性等还有可能发生改变,我们不推荐你在生产环境中使用。
2. 创建Swarm集群
现在,我们将通过运行下面的命令来创建Swarm集群。各个节点都将运行一个swarm节点代理,该代理会注册、监控相关的Docker守护进程,并更新发现后端获取的节点状态。下面的命令会返回一个唯一的集群ID标记,在启动节点上的Swarm代理时会用到它。
在集群管理器上运行:
# docker run swarm create
Creating Swarm Cluster
Creating Swarm Cluster
3. 启动各个节点上的Docker守护进程
我们需要登录进我们将用来创建集群的每个节点,并在其上使用-H标记启动Docker守护进程。它会保证Swarm管理器能够通过TCP访问到各个节点上的Docker远程API。要启动Docker守护进程,我们需要在各个节点内部运行以下命令。
# docker -H tcp://0.0.0.0:2375 -d
Starting Docker Daemon
Starting Docker Daemon
4. 添加节点
在启用Docker守护进程后,我们需要添加Swarm节点到发现服务,我们必须确保节点IP可从Swarm管理器访问到。要完成该操作,我们需要在各个节点上运行以下命令。
# docker run -d swarm join --addr=<node_ip>:2375 token://<cluster_id>
Adding Nodes to Cluster
Adding Nodes to Cluster
注意:我们需要用步骤2中获取到的节点IP地址和集群ID替换这里的<node_ip>和<cluster_id>。
5. 开启Swarm管理器
现在,由于我们已经获得了连接到集群的节点,我们将启动swarm管理器。我们需要在集群管理器中运行以下命令。
# docker run -d -p <swarm_port>:2375 swarm manage token://<cluster_id>
Starting Swarm Manager
Starting Swarm Manager
6. 检查配置
一旦管理运行起来后,我们可以通过运行以下命令来检查配置。
# docker -H tcp://<manager_ip:manager_port> info
Accessing Swarm Clusters
Accessing Swarm Clusters
注意:我们需要替换<manager_ip:manager_port>为运行swarm管理器的主机的IP地址和端口。
7. 使用docker CLI来访问节点
在一切都像上面说得那样完美地完成后,这一部分是Docker Swarm最为重要的部分。我们可以使用Docker CLI来访问节点,并在节点上运行容器。
# docker -H tcp://<manager_ip:manager_port> info
# docker -H tcp://<manager_ip:manager_port> run ...
8. 监听集群中的节点
我们可以使用swarm list命令来获取所有运行中节点的列表。
# docker run --rm swarm list token://<cluster_id>
4. 如何使用docker构建redis集群
通客户端利用致性hash算数据布同节点种缺点非明显缺少故障自failover能力并且扩容数据布搬迁比较费劲
代理模式
Redis官推荐Twemproxy由twitter公司发;
另内豌豆荚源codis;
代理模式处仍使用redis单机sdk进行发维护简单
O
5. 如何使用docker制作hadoop集群的镜像
1:首先要有一个Centos7操作系统,可以在虚拟机中安装。
2:在centos7中安装docker,docker的版本为1.8.2
安装步骤如下:
<1>安装制定版本的dockeryum install -y docker-1.8.2-10.el7.centos
<2>安装的时候可能会报错,需要删除这个依赖!
6. 如何基于Docker快速搭建多节点Hadoop集群
Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中。这篇教程介绍了利用Docker在单机上快速搭 建多节点 Hadoop集群的详细步骤。作者在发现目前的Hadoop on Docker项目所存在的问题之后,开发了接近最小化的Hadoop镜像,并且支持快速搭建任意节点数的Hadoop集群。
GitHub: kiwanlau/hadoop-cluster-docker
直接用机器搭建Hadoop集群是一个相当痛苦的过程,尤其对初学者来说。他们还没开始跑wordcount,可能就被这个问题折腾的体无完肤了。而且也不是每个人都有好几台机器对吧。你可以尝试用多个虚拟机搭建,前提是你有个性能杠杠的机器。
我的目标是将Hadoop集群运行在Docker容器中,使Hadoop开发者能够快速便捷地在本机搭建多节点的Hadoop集群。其实这个想法已经有 了不少实现,但是都不是很理想,他们或者镜像太大,或者使用太慢,或者使用了第三方工具使得使用起来过于复杂。下表为一些已知的Hadoop on Docker项目以及其存在的问题。
更快更方便地改变Hadoop集群节点数目
另外,alvinhenrick/hadoop-mutinode项目增加节点时需要手动修改Hadoop配置文件然后重新构建hadoop- nn-dn 镜像,然后修改容器启动脚本,才能实现增加节点的功能。而我通过shell脚本实现自动话,不到1分钟可以重新构建hadoop-master镜像,然后 立即运行!本项目默认启动3个节点的Hadoop集群,支持任意节点数的Hadoop集群。
另外,启动Hadoop,运行wordcount以及重新构建镜像都采用了shell脚本实现自动化。这样使得整个项目的使用以及开发都变得非常方便快捷。
开发测试环境
操作系统:ubuntu 14.04 和 ubuntu 12.04
内核版本: 3.13.0-32-generic
Docker版本:1.5.0 和1.6.2
小伙伴们,硬盘不够,内存不够,尤其是内核版本过低会导致运行失败。
7. 怎么用虚拟机搭建docker集群
与安装Docker Compose相似,你可以从GitHub的release分支中获取Machine的二进制安装文件,也可以下载源代码自己编译安装或者安装Docker ToolBox,ToolBox打包了所有的Docker工具,提供UI界面的安装。
例如,在OS X 机器上,你可以在Github上获取安装文件,并存储在 /usr/local/bin/docker-machine路径下,然后赋予可执行权限,可以通过测试版本的方式测试是否安装正确。例如:
$ sudo curl -L https://github.com/docker/machine/releases/download/v0.6.0/
docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine
$ sudo chmod +x /usr/local/bin/docker-machine
$ docker-machine version
8. docker 怎样部署hadoop 集群
Docker提供了一种完美隔离和打包Hadoop相关的应用程序的方法。该公司也在观察Slider框架和Docker如何能够一起合作来简化此类的部署工作。目前,Hortonworks的一个客户已经在考虑他们自己的数据平台利用HDP支持Docker的方法。他们利用Cloudbreak在云中的Docker容器中部署Hadoop,并计划把他们自己的数据应用程序制作成Docker镜像以便在YARN上运行。此外,很多用户也因为这种方式的敏捷性和兼容性,利用其进行未知环境的部署。
9. 如何编译docker源码
本文根据docker官方给出的docker代码编译环境搭建指南做更深入的分析。官方给出的指导比较简单,但是由于国内的网络问题经常会编译失败,了解了编译步骤后,也可以结合自身遇到的网络问题进行“规避”。
docker的编译环境实际上是创建一个docker容器,在容器中对代码进行编译。 如果想快速的查看编译环境搭建指导,而不关注环境搭建的机制和细节,可以直接跳到最后一章“总结”。
前提
机器上已经安装了docker,因为编译环境是个docker容器,所以要事先有docker(daemon),后面会创建个编译环境容器,在容器里面编译代码。本文中使用物理机,物理机上运行着docker (daemon)。
机器(物理机)上安装了git 。 后续使用git下载docker源码
机器(物理机)上安装了make。
下载ubuntu 14.04的docker镜像