構造方法中super()的作用
第1章docker簡介
1.1什麼是docker
Docker 最初是 dotCloud 公司創始人 Solomon Hykes 在法國期間發起的一個公司內部專案,它是基於 dotCloud 公司多年雲服務技術的一次革新,並於 2013 年 3 月以 Apache 2.0 授權協議開源,主要專案程式碼在 GitHub 上進行維護。Docker 專案後來還加入了 Linux 基金會,併成立推動開放容器聯盟(OCI)。
Docker 使用 Google 公司推出的 Go 語言進行開發實現,基於 Linux 核心的 cgroup,namespace,以及 OverlayFS 類的 Union FS
Docker 在容器的基礎上,進行了進一步的封裝,從檔案系統、網路互聯到程序隔離等等,極大的簡化了容器的建立和維護。使得 Docker 技術比虛擬機器技術更為輕便、快捷。
1.2為什麼要用docker
1.2.1docker的優勢
- 更高效的利用系統資源
由於容器不需要進行硬體虛擬以及執行完整作業系統等額外開銷,
- 更快速的啟動時間
傳統的虛擬機器技術啟動應用服務往往需要數分鐘,而 Docker 容器應用,由於直接運行於宿主核心,無需啟動完整的作業系統,因此可以做到秒級、甚至毫秒級的啟動時間。大大的節約了開發、測試、部署的時間。
- 一致的執行環境
開發過程中一個常見的問題是環境一致性問題。由於開發環境、測試環境、生產環境不一致,導致有些 bug 並未在開發過程中被發現。而 Docker 的映象提供了除核心外完整的執行時環境,確保了應用執行環境一致性,從而不會再出現 「這段程式碼在我機器上沒問題啊」 這類問題。
- 持續交付和部署
對開發和運維(DevOps)人員來說,最希望的就是一次建立或配置,可以在任意地方正常執行。
使用 Docker 可以通過定製應用映象來實現持續整合、持續交付、部署。開發人員可以通過 Dockerfile 來進行映象構建,並結合持續整合(Continuous Integration) 系統進行整合測試,而運維人員則可以直接在生產環境中快速部署該映象,甚至結合 持續部署(Continuous Delivery/Deployment) 系統進行自動部署。而且使用 Dockerfile 使映象構建透明化,不僅僅開發團隊可以理解應用執行環境,也方便運維團隊理解應用執行所需條件,幫助更好的生產環境中部署該映象。
- 更輕鬆的遷移
由於 Docker 確保了執行環境的一致性,使得應用的遷移更加容易。Docker 可以在很多平臺上執行,無論是物理機、虛擬機器、公有云、私有云,甚至是筆記本,其執行結果是一致的。因此使用者可以很輕易的將在一個平臺上執行的應用,遷移到另一個平臺上,而不用擔心執行環境的變化導致應用無法正常執行的情況。
- 更輕鬆的維護和擴充套件
Docker 使用的分層儲存以及映象的技術,使得應用重複部分的複用更為容易,也使得應用的維護更新更加簡單,基於基礎映象進一步擴充套件映象也變得非常簡單。此外,Docker 團隊同各個開源專案團隊一起維護了一大批高質量的 官方映象,既可以直接在生產環境使用,又可以作為基礎進一步定製,大大的降低了應用服務的映象製作成本。
1.2.2docker與傳統虛擬機器的比較
特性 |
docker |
虛擬機器 |
啟動 |
秒級 |
分鐘級 |
硬碟使用 |
一般為 MB |
一般為 GB |
效能 |
接近原生 |
弱於 |
系統支援量 |
單機支援上千個容器 |
一般幾十個 |
隔離性 |
安全隔離 |
完全隔離 |
第2章docker的核心概念
Docker 包括三個基本概念,理解了這三個概念,就理解了Docker的整個生命週期。
1)映象(Image)
2)容器(Container)
3)倉庫(Repository)
2.1映象(Image)
Docker映象類似於一個虛擬機器映象(xxx.iso), 可以將它理解為一個只讀的模板!例如,一個映象可以包含一個基本的作業系統環境,裡面僅安裝了 Apache應用程式(或使用者需要的其他軟體),可以把它稱為Apache映象,映象是建立Docker容器的基礎
通過版本管理和增量的檔案系統,Docker提供了一套十分簡單的機制來建立和更新現有的映象,使用者甚至可以從網上下載一個已經做好的應用映象,並直接使用它.
2.2容器(Container)
Docker 容器類似於一個輕量級的沙箱, Docker 利用容器來執行和隔離應用,容器是從映象建立的應用執行例項。它可以啟動、開始、停止、刪除,而這些容器都是彼此相互隔離、互不可見的。可以把容器看作一個簡易版的 Linux 系統環境(包括 root 使用者許可權、程序空間、使用者空間和網路空間等)以及執行在其中的應用程式打包而成的盒子。
注意:
1)映象自身是隻讀的。
2)容器從映象啟動的時候,會在映象的最上層建立一個可寫層。
2.3倉庫(Repository)
Docker 倉庫類似於程式碼倉庫,是 Docker 集中存放映象檔案的場所。根據所儲存的映象公開分享與否, Docker 倉庫可以分為公開倉庫(Public)和私有倉庫(Private)兩種形式。目前,最大的公開倉庫是官方提供的 Docker Hub ,其中存放著數量龐大的映象供使用者下載。國內不少雲服務提供商(如騰訊雲 、 阿里雲等)也提供了倉庫的本地源,可以提供穩定的國內訪問。
當然,使用者如果不希望公開分享自己的映象檔案, Docker 也支援使用者在本地網路內建立一個只能自己訪問的私有倉庫。
當用戶建立了自己的映象之後就可以使用 push 命令將它上傳到指定的公有或者私有倉庫。 這樣使用者下次在另外一臺機器上使用該映象時,只需要將其從倉庫上 pull 下來就可以了。
第3章Centos安裝Docker引擎
Docker 目前支援 CentOS 7 及以後的版本, 核心版本必須是3.10
1)檢視作業系統版本:
cat /etc/redhat-release
2)檢視核心版本:
uname -r
3.1解除安裝舊版本
舊版本的 Docker 被叫做 docker 或 docker-engine,如果安裝了舊版本的 Docker ,需要解除安裝掉它。
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
3.2安裝Docker
3.2.1安裝方法1: 手動安裝
1)安裝依賴的軟體包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2)新增Docker文件版本的yum源,官方的yum源安裝docker比較慢,我們配置國內比較快的yum源(阿里雲)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3)安裝最新版本的docker引擎(社群版)
sudo yum -y install docker-ce docker-ce-cli containerd.io
3.2.2安裝方法2:使用指令碼自動安裝
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
注意:
1)自動安裝指令碼會自動檢測系統資訊並進行相應配置
2)安裝方法1和安裝方法2二者選其一即可
3.2.3啟動Docker服務
sudo systemctl start docker
3.2.4驗證Docker是否可用
sudo docker run hello-world
3.2.5把普通使用者新增到docker組
每次使用docker的時候都需要使用root使用者,比較麻煩.可用把普通使用者新增到docker組,避免每次都新增sudo.
#將atguigu使用者新增進docker組
sudo usermod -aG docker atguigu
完成之後,退出當前shell視窗, 重新進入shell視窗, 使剛才的配置生效!!!
第4章映象基本操作
映象是 Docker 三大核心概念中最重要的,自 Docker 誕生之日起映象就是相關社群最為熱門的關鍵詞。 Docker 執行容器前需要本地存在對應的映象,如果映象不存在Docker 會嘗試先從預設映象倉庫下載,使用者也可以通過配置, 使用自定義的映象倉庫。
4.1列出本機映象
docker images
說明:
1)REPOSITORY: 來源倉庫
2)TAG: 映象的標籤資訊,表示映象的版本.只是標記,並不能表示映象內容
3)IMAGE ID: 映象id, 唯一表示一個映象. 如果兩個映象的 ID 相同, 說明它們實際上指向了同一 個映象, 只是具有不同標籤名稱而已;
4)CREATED: 映象的最後更新時間.
5)SIZE:映象大小
4.2獲取一個新映象
當我們在本地主機上使用一個不存在的映象時 Docker 就會自動下載這個映象。如果我們想預先下載這個映象,我們可以使用 docker pull命令來下載它。下載完成後,可以使用這個映象來執行容器
docker pull hello-world
4.3配置國內映象源地址
下載映象的時候,預設是從官方地址下載,伺服器在國外, 速度比較慢,可以換成國內映象.
國內常用加速地址:
(1)網易:http://hub-mirror.c.163.com
(2)中國科技大學:https://docker.mirrors.ustc.edu.cn
(3)阿里雲容器服務:https://cr.console.aliyun.com/
1)進入阿里雲容器映象服務頁面,獲取映象加速地址:https://cr.console.aliyun.com/cn-beijing/instances/mirrors
2)進行如下配置:
sudo vim /etc/docker/daemon.json
{ "registry-mirrors": [ "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn", "https://lwo42jds.mirror.aliyuncs.com" ] }
說明:
1)關於阿里雲地址的參考:https://help.aliyun.com/document_detail/60750.html?spm=a2c4g.11186623.6.550.469742c75wmmC8
2)重啟docker
sudo systemctl restart docker
3)檢視是否配置成功
docker info
4.4搜尋映象
docker search hello-world
4.5刪除映象
1)使用tag刪除映象
docker rmi hello-world:latest
注意:
(1)如果刪除的時候報錯: 有容器使用了該映象,則需要先刪除使用過該映象的容器,才能刪除該映象.
(2)刪除容器,再刪映象
2)使用id刪除映象
docker rmi d1165f221234
3)清理映象,使用 Docker 一段時間後,系統中可能會遺留一些臨時的映象檔案,以及一些沒有被使用的映象,可以通過以下命令來進行清理:
docker image prune -f
第5章容器基本操作
容器是 Docker 的另一個核心概念。 簡單來說,容器是映象的一個執行例項。所不同的是,映象是靜態的只讀檔案,而容器帶有執行時需要的可寫檔案層,同時,容器中的應用程序處於執行狀態。
如果認為虛擬機器是模擬執行的一整套作業系統(包括核心、 應用執行態環境和其他系統環境)和跑在上面的應用。 那麼 Docker 容器就是獨立執行的一個(或一組)應用,以及它們必需的執行環境。
5.1建立容器
1)獲取centos:7.5.1804的映象
docker pull centos:7.5.1804
2)建立容器
docker create --name centos7_01 -i -t centos:7.5.1804 /bin/bash
說明:
(1)建立一個互動式的容器
(2)-i: 允許你對容器內的標準輸入 (STDIN) 進行互動
(3)-t: 在新容器內指定一個偽終端或終端。
3)啟動容器
docker start centos7_01
4)新建並啟動容器,前面的操作是先建立容器,然後再啟動容器.也可以使用run來直接新建並啟動容器
#啟動一個互動式的centos容器
docker run --name centos7_02 -it centos:7.5.1804 /bin/bash
說明:
(1)檢查本地是否存在指定的映象,不存在就從公有倉庫下載;
(2)利用映象建立一個容器,並啟動該容器;
(3)分配一個檔案系統給容器,並在只讀的映象層外面掛載一層可讀寫層 ;
5)檢視有哪些容器
(1)檢視啟動的容器
docker ps
(2)檢視所有容器
docker ps -a
6)啟動後臺容器程序
docker run --name centos7_03 -itd centos:7.5.1804 /bin/bash
5.2停止容器
docker stop centos7_02
5.3進入容器
在使用 -d 引數時,容器啟動後會進入後臺(有些容器預設就是後臺,比如centos容器)。此時想要進入容器,可以通過以下指令進入:
docker exec -it centos7_01 /bin/bash
通過指定 -it引數來保持標準輸入開啟, 並且分配一個偽終端。可以看到會開啟一個新的 bash 終端,在不影響容器內其他應用的前提下,使用者可以與容器進行交五
5.4刪除容器
1)刪除已經停止的容器
docker rm f73d
2)刪除正在執行的容器,先停止,再刪除
docker rm -f d07ec3
5.5匯入和匯出容器
某些時候,需要將容器從一個系統遷移到另外一個系統,此時可以使用 Docker 的導人 和匯出功能,這也是 Docker 自身提供的一個重要特性。為了測試容器是否匯出和匯入成功,,我們在centos容器中建立一個新的檔案:
5.5.1匯出容器
匯出容器是指,匯出一個已經建立的容器到一個檔案,不管此時這個容器是否處於執行狀態.
docker export -o '/home/atguigu/test_for_centos.tar' a5bf7
可以把匯出的tar檔案,傳輸到其他裝置,再通過匯入命令匯入,實現容器的遷移
5.5.2匯入容器
將上節匯出的容器匯入之後會成為映象
docker import test_for_centos.tar -- test/mycentos:1.0
使用新的映象啟動容器,發現剛才建立的檔案還在:
docker run -it d7c8de284673 /bin/bash
5.6檢視容器
5.6.1檢視容器詳情
docker container inspect a5bf
會以 json 格式返回包括容器 Id、建立時間、路徑、狀態、映象、配置等在內的各項資訊
5.6.2檢視容器內程序
docker top a5bf7
這個子命令類似於 Linux 系統中的 top 命令, 會打印出容器內的程序資訊, 包括 PID 、 使用者、時間、命令等
5.6.3檢視統計資訊
docker stats --no-stream a5b
此命令會顯示 CPU 、記憶體、儲存、網路等使用情況的統計資訊
5.7容器和主機之間複製檔案
容器和主機之間進行檔案複製的時候,要保證容器已經啟動.
5.7.1從主機複製到容器
docker cp /home/atguigu/abc.txt a5bf7d:/
5.7.2從容器複製到主機
docker cp a5bf7:/a.txt /home/atguigu/
第6章映象高階操作
6.1建立映象
建立映象的方法主要有2種:基於已有容器建立、基於Dockerfile檔案建立
6.1.1.基於已有容器建立
docker commit -m 'add new file:a.txt' -a 'yuage' a5bf new_centos:1.0
說明:
1)-m 提交資訊
2)-a 作者
3)a5bf 舊有的容器
4)new_centos:1.0 新的映象
6.1.2.基於Dockerfile 建立
基於 Dockerfile 建立是最常見的方式。 Dockerfile 是一個文字檔案, 利用給定的指令描述基於某個父映象建立新映象的過程,下面使用Dockerfile建立一個基於centos的java開發環境:
1)把jdk安裝轉包上傳到 /home/atguigu 目錄下
2)在/home/atguigu上建立Dockerfile檔案
vim /home/atguigu/Dockerfile
FROM centos:7.5.1804 RUN mkdir -p /opt/software RUN mkdir -p /opt/module COPY jdk-8u212-linux-x64.tar.gz /opt/software/ RUN tar -zxvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module RUN rm -rf /opt/software/jdk-8u212-linux-x64.tar.gz ENV JAVA_HOME=/opt/module/jdk1.8.0_212 ENV PATH=$JAVA_HOME/bin:$PATH
說明:
(1)每一個指令都會在映象上建立一個新的層,每一個指令的字首都必須是大寫的。
(2)第一條FROM,指定使用哪個映象源
(3)RUN 指令告訴docker 在映象內執行命令,安裝了什麼
(4)COPY 是把檔案copy到映象中.原始檔必須是相對路徑不能是絕對路徑
(5)ENV 在映象中設定環境變數
3)建立映象,並等待建立成功
docker build -t centos_java8:1.0 .
說明:
(1)-t 指明映象名字和標籤
(2).表示Dockfile所在目錄
4)測試映象是否可以正常工作
docker run centos_java8:1.0 java -version
6.2儲存和載入映象
使用儲存和載入功能可以把本機的映象發給其他人使用
6.2.1.儲存映象
docker save -o /home/atguigu/yuange_centos_java8.tar centos_java8:1.0
6.2.2.載入映象
把剛剛儲存的映象發給別人(hadoop102),然後載入匯入.
docker load -i /home/atguigu/yuange_centos_java8.tar
第7章為映象新增ssh服務
7.1建立映象
1)構建Dockerfile:
# 設定繼承映象 FROM centos_java8:1.0 # 提供作者資訊 MAINTAINER yuange ([email protected]) # 更換國內阿里雲yum源 RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo RUN sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo RUN yum makecache # 安裝sshd RUN yum install -y openssh-server openssh-clients RUN sed -i '/^HostKey/'d /etc/ssh/sshd_config RUN echo 'HostKey /etc/ssh/ssh_host_rsa_key'>>/etc/ssh/sshd_config # 生成 ssh-key RUN ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key # 更改 root 使用者登入密碼為 RUN echo 'root:123321' | chpasswd # 開發 22 埠 EXPOSE 22 # 映象執行時啟動sshd RUN mkdir -p /opt RUN echo '#!/bin/bash' >> /opt/run.sh RUN echo '/usr/sbin/sshd -D' >> /opt/run.sh RUN chmod +x /opt/run.sh CMD ["/opt/run.sh"]
2)構建映象
docker build -t centos_java8_sshd:1.0 /home/atguigu/
7.2執行容器,測試映象
docker run -d -p 2222:22 centos_java8_sshd:1.0
說明:把容器的22埠對映到宿主機器的2222埠,這樣通過ssh連線宿主機器的2222埠就可以連線到容器了
第8章埠對映與容器互聯
8.1埠對映
在啟動容器的時候,如果不指定對應引數,在容器外部是無法通過網路來訪問容器內的 網路應用和服務的,使用 -p 來指定對映規則:2222:22 表示宿主的2222對映到容器的22埠, 使用多次 -p 可以對映多個埠
docker run -d -p 2222:22 -p 8888:80 centos_java8_sshd:1.0
檢視容器埠繫結情況:
docker port 22e35b9ef978
8.2容器互相訪問
埠對映並不是唯一把 docker 連線到另一個容器的方法,docker 有一個連線系統允許將多個容器連線在一起,共享連線資訊,docker 連線會建立一個父子關係,其中父容器可以看到子容器的資訊。
8.2.1容器命名
建立容器的時候,Docker會自動為容器分配一個隨機的名字.我們也可以指定一個好記的名字,方便容器間的互聯.
docker run -d --name hadoop201_01 centos_java8_sshd:1.0
說明:--name 引數給容器起一個名字
8.2.2docker的網路
docker還會給我們建立三個網路:bridge/host/none。我們可以通過以下命令檢視當前宿主機中所有的docker網路
docker network ls
其中,網橋bridge模式是在實際專案中常用的。接下來,以互動模式啟動兩個centos_java8_sshd 容器。在沒有指定相關網路的情況下,容器都會連線到預設的bridge網路
建立兩個容器:yuange_02和yuange_03, 檢查bridge網路情況.可以看到他們的ip地址
docker run -d --name yuange_02 centos_java8_sshd:1.0
docker run -d --name yuange_03 centos_java8_sshd:1.0
docker network inspect bridge
注意:
(1)通過ip地址我們在宿主機或者容器之間可以訪問到對方
(2)當是172.17.0.6 等這些ip地址不能固定,每次啟動容器的時候有可能會變化,如果組建叢集的話很不方便
8.2.3自定義bridge網路,實現容器間通訊
docker daemon 實現了一個內嵌的 DNS server,使容器可以直接通過“容器名”通訊。使用預設的bridge網路,不能通過DNS server實現通過容器名通訊,但是使用自定義bridge網路可以做到通過容器名互相通訊。
1)建立自定義bridge網路,網路名yuange
docker network create --driver bridge yuange
2)刪除yuange_02和yuange_03容器
docker rm -f yuange_02 yuange_03
3)新建並啟動yuange_02和yuange_03容器,並加入到yuange網路
docker run -d --name yuange_02 --network yuange centos_java8_sshd:1.0
docker run -d --name yuange_03 --network yuange centos_java8_sshd:1.0
4)進入yuange_02,測試是否可以ping通yuange_03
ssh [email protected]
ping 172.19.0.3
第9章教學模式下網路搭建
為了節省資源,假設我們所有容器都在hadoop102主機建立和啟動,則我們必須滿足下面的網路互通情況:
目前情況:
1)windows系統和hadoop102互通已經完成
2)容器和hadoop102也可以互相訪問
3)容器間也可以自由訪問
4)容器訪問windows訪問不到!!!
5)windows訪問容器也訪問不到,但是可以通過埠對映解決.(如果埠過多,對映不方便)
6)容器ip地址最好還是固定的
如何解決前面網路不通的情況?
解決:讓容器使用橋接模式(vmware中的橋接),與hadoop102處於同一個網段就可以解決了.使用pipework工具可以滿足我們的需求!
9.1安裝pipwork和brctl工具
1)在宿主(hadoop201)上安裝git(如果已經安裝,跳過該步驟)
sudo yum install -y git
2)下載pipework
#方式一:從碼雲中下載(我選這個,快一些)
git clone https://gitee.com/mirrors/Pipework.git
#方式二:從giuhub中下載 git clone https://github.com/jpetazzo/pipework.git
3)把pipework指令碼新增到path中
sudo cp Pipework/pipework /usr/bin/
4)安裝brctl工具
sudo yum install bridge-utils
9.2配置網路
1)刪除原來的容器:yuange_02和yuange_03
# 刪除所有容器, 慎用!!!
docker rm -f $(docker ps -aq)
2)在宿主機上實現橋接網路,我的宿主機資訊:
eth33: 192.168.1.201 閘道器: 192.168.1.2 DNS1: 114.114.114.114 DNS2: 8.8.8.8
3)在宿主機上(hadoop201)執行如下命令:
sudo brctl addbr br0; \ sudo ip link set dev br0 up; \ sudo ip addr del 192.168.1.201/24 dev ens33 ; \ sudo ip addr add 192.168.1.201/24 dev br0 ; \ sudo brctl addif br0 ens33 ; \ sudo ip route add default via 192.168.1.2 dev br0
說明:
(1)sudo brctl addbr br0; 新增網橋 br0
(2)sudo ip link set dev br0 up 啟動網橋br0
(3)sudo ip addr del 192.168.1.201/24 dev ens33 ; 給ens33去掉ip
(4)sudo ip addr add 192.168.1.201/24 dev br0 ;給網橋分配ip(就使用剛才ens33去掉的ip)
(5)sudo brctl addif br0 eth0 ; 把eth0 搭在br0上
(6)sudo ip route add default via 192.168.1.2 dev br0 給br0新增新的路由(根據虛擬機器閘道器自己指定)
(7)需要注意中間會斷網,所以需要放置在一條語句執行
4)建立兩個容器
docker run -d --name yuange_52 centos_java8_sshd:1.0
docker run -d --name yuange_53 centos_java8_sshd:1.0
5)給兩個容器新增ip,並搭在br0上
sudo pipework br0 yuange_52 192.168.1.52/[email protected]
sudo pipework br0 yuange_53 192.168.1.53/[email protected]
說明:
(1)br0:網橋名
(2)yuange_02:容器名
(3)192.168.1.202/24:容器ip24是指的掩碼
(4)192.168.1.2 :閘道器地址(根據自己的虛擬機器來實際指定)
9.3測試網路是否OK
進入yuange_02,ping一下即可
ssh [email protected]
9.4最後說明
我們前面的網橋搭建方案和容器ip分配方案都是臨時臨時生效,當虛擬機器重啟或者容器重啟之後會失效,可以放入指令碼中,統一執行.
vim /home/atguigu/bin/docker.sh
# 啟動容器 docker start yuange_02 docker start yuange_03 # 搭建網橋 sudo brctl addbr br0; \ sudo ip link set dev br0 up; \ sudo ip addr del 192.168.1.201/24 dev ens33 ; \ sudo ip addr add 192.168.1.201/24 dev br0 ; \ sudo brctl addif br0 ens33 ; \ sudo ip route add default via 192.168.1.2 dev br0 sleep 5 # 給容器配置ip和閘道器 sudo pipework br0 yuange_02 192.168.1.202/[email protected] sudo pipework br0 yuange_03 192.168.1.203/[email protected]
chmod +x /home/atguigu/bin/docker.sh
第10章使用docker搭建叢集
理論上來說,每個容器應該只執行一個應用,但是考慮到實際情況,我們仍然採用前面學習的虛擬機器中集權搭建方案,用一個容器替換原來的一個虛擬機器.
在3個容器中執行原來所有的叢集分散式方案.
10.1叢集規劃
我們叢集需要3臺虛擬機器,每臺虛擬機器配置略有不同,我們只做3個映象,每個映象對應叢集中一臺虛擬機器
hadoop162 |
hadoop163 |
hadoop164 |
|
NameNode |
√ |
||
SecondaryNameNode |
√ |
||
DataNode |
√ |
√ |
√ |
ResourceManager |
√ |
||
NodeManager |
√ |
√ |
√ |
HMaster |
√ |
||
HRegionServer |
√ |
√ |
√ |
Phoenix |
√ |
||
Redis(非叢集) |
√ |
√ |
√ |
mysql |
√ |
√ |
√ |
10.2準備工作
把所有需要用的檔案提前準備好,網盤地址:https://pan.baidu.com/s/1pk-RzsfWcoaOCiG9b5RNoQ 提取碼:g48h
10.3製作映象和建立容器
1)各個Dockerfile檔案和指令碼具體內容見清單,將docker_images目錄上傳至使用者家目錄下
2)進入docker_images/docker_bigdata目錄執行指令碼:build_all.sh根據提示構建需要的映象和容器(若無許可權先給指令碼新增許可權)
3)進入docker_images/docker_bigdata目錄執行指令碼:contains.sh start啟動容器
4)詳情請看Readme.md檔案
10.4測試映象
容器叢集啟動成功之後,使用ssh登入,像在虛擬機器中操作一樣進行操作就可以了,但是需要注意的是,容器中用到的一些工具沒有了,如果使用,可以在製作映象的時候安裝好,也可以啟動容器之後安裝