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鏡像