Docker(九)---docekr三劍客(machine、compose、swarm)

一.簡介

1.Docker Machine

  • Docker Machine 是 Docker 官方編排(Orchestration)項目之一,負責在多種平臺上快速安裝 Docker環境。
  • Docker Machine支持在常規Linux操作系統、虛擬化平臺、openstack、公有云等不同環境下安裝配置docker
    host。
  • Docker Machine 項目基於 Go 語言實現,目前在 Github 上的維護地址:
    https://github.com/docker/machine/

2.Docker compose

  • compose 是用來定義和運行一個或多個容器(通常都是多個)運行和應用的工具。使用 compose可以簡化容器鏡像的構建以及容器的運行。
  • compose 使用 YAML 文件來定義多容器之間的關係。一個 docker-compose up 就可以把完整的應用跑起來。 本質上, compose 把 YAML 文件解析成 docker 命令的參數,然後調用相應的 docker命令行接口,從而將應用以容器化的方式管理起來。它通過解析容器間的依賴關係順序地啓動容器。而容器間的依賴關係由 YAML 文件中的 links 標記指定。

3.Docker Swarm

  • Swram是Docker公司推出的官方容器集羣平臺,基於go語言實現,代碼開源在
    https://github.com/docker/swarm .2016年2月對架構進行重新設計,推出了v2版本,支持超過1千個節點。作爲容器集羣管理器,Swarm最大的優勢之一就是100%支持標準的DockerAPI及工具(如Compose,docker-py等),Docker本身就可以很好地與Swarm進行集成。

在這裏插入圖片描述

  • Manager:接收客戶端服務定義,將任務發送到agnet節點,維護集羣期望狀態和集羣管理功能以及leader選舉。默認情況下manager節點也會運行任務,也可以配置只做管理任務。
  • agent:接收並執行從管理節點分配的任務,並報告任務當前的狀態,以便Manager節點維護每個服務期望狀態。

二.創建docker-machine

1.在server1上面部署docker-machine,下載二進制可執行文件,重命名並授予執行權限。

[root@server1 ~]# mv docker-machine-Linux-x86_64-0.16.1 /usr/local/bin
[root@server1 ~]# mv /usr/local/bin/docker-machine-Linux-x86_64-0.16.1 /usr/local/bin/docker-machine
[root@server1 ~]# chmod +x /usr/local/bin/docker-machine 
[root@server1 ~]# docker-machine --v		##查看版本號
[root@server1 ~]# docker-machine --help

在這裏插入圖片描述
2.查看本機docker版本(後面會用到)

[root@server1 ~]# docker version 

在這裏插入圖片描述

3.免密登陸

[root@server1 ~]# ssh-keygen 
[root@server1 ~]# ssh-copy-id server2:
[root@server1 ~]# ssh-copy-id server3:

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

4.讓真機從互聯網上拉取get.docker.com

[root@foundation11 html]# wget https://get.docker.com/

在這裏插入圖片描述

5.修改index.html
在這裏插入圖片描述在這裏插入圖片描述

6.修改server2、server3的發行版本號和yum配置文件

[root@server2 yum.repos.d]# vim /etc/os-release 
[root@server2 yum.repos.d]# vim /etc/yum.conf

在這裏插入圖片描述
在這裏插入圖片描述
7.給server2和server3自動部署docker。

[root@server1 ~]# docker-machine create --driver generic  --engine-install-url="http://172.25.16.250" --generic-ip-address=172.25.16.2 server2
[root@server1 ~]# docker-machine create --driver generic  --engine-install-url="http://172.25.16.250" --generic-ip-address=172.25.16.2 server3

在這裏插入圖片描述
在這裏插入圖片描述
若安裝過程出現錯誤,需刪除刪除server2生成的.repo文件

[root@server1 ~]# docker-machine ls
[root@server1 ~]# docker-machine rm server

server2和server3生成的配置文件:
從配置文件中可以看出,docker daemon啓用了TLS驗證功能,docker-machine已經爲其生成好了所需的證書文件。

[root@server2 ~]# cat /etc/systemd/system/docker.service.d/10-machine.conf
[root@server3 ~]# cat /etc/systemd/system/docker.service.d/10-machine.conf

在這裏插入圖片描述
在這裏插入圖片描述

三.管理docker-machine

1.顯示訪問server2和server3主機的所需的環境變量信息。

[root@server1 ~]# docker-machine env server2
[root@server1 ~]# docker-machine env server3

在這裏插入圖片描述

連接遠程docker主機時需要執行以下命令

[root@server1 ~]# docker -H tcp://172.25.16.2:2376 ps

在這裏插入圖片描述
3.安裝bash腳本

[root@server1 ~]# cd /etc/bash_completion.d/
[root@server1 bash_completion.d]# ls
docker-machine.bash          rct                          rhsm-debug
docker-machine-prompt.bash   redefine_filedir             rhsm-icon
docker-machine-wrapper.bash  rhn-migrate-classic-to-rhsm  subscription-manager
iprutils                     rhsmcertd
[root@server1 bash_completion.d]# source docker-machine.bash 
[root@server1 bash_completion.d]# source docker-machine-prompt.bash 
[root@server1 bash_completion.d]# source docker-machine-wrapper.bash

在這裏插入圖片描述
4.編輯環境,並測試

[root@server1 ~]# vim .bashrc 
[root@server1 ~]# source .bashrc 
[root@server1 ~]# docker-machine use server2
Active machine: server2
[root@server1 ~ [server2]]# docker-machine use -u		#切會server1
Active machine: 
[root@server1 ~]# cat .bashrc 
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '      ##添加的內容
[root@server1 ~]#

在這裏插入圖片描述
docker-machine常見命令:

docker-machine upgrade  server2	更新docker版本
docker-machine config  server2	查看machine配置
docker-machine scp 			可以在machine中複製文件
docker-machine ssh			連接machine
docker-machine rm			刪除machine

四.docker-compose

root@server1 ~]# docker-compose 		##tap
.bash_logout
.bash_profile
.bashrc
containerd.io-1.2.5-3.1.el7.x86_64.rpm
container-selinux-2.21-1.el7.noarch.rpm
.cshrc
docker-ce-18.09.7-3.el7.x86_64.rpm
docker-ce-cli-18.09.7-3.el7.x86_64.rpm
index.html
libsemanage-2.5-8.el7.x86_64.rpm
libsemanage-python-2.5-8.el7.x86_64.rpm
pigz-2.3.4-1.el7.x86_64.rpm
policycoreutils-2.5-17.1.el7.x86_64.rpm
policycoreutils-python-2.5-17.1.el7.x86_64.rpm
.ssh/
.tcshrc
.viminfo
[root@server1 ~]# cd /mnt
[root@server1 mnt]# ls
[root@server1 mnt]# mkdir compose

導入haproxy鏡像

[root@server1 ~]# docker load -i haproxy.tar 
[root@server1 ~]# docker history haproxy:latest 

在這裏插入圖片描述

[root@server1 ~]# cd /mnt/compose/
[root@server1 compose]# ls
[root@server1 compose]# vim docker-compose.yml

文件內容如下:

web1:
        image: nginx
        expose:
                - 80
        volumes:
                - ./web1:/usr/share/nginx/html
web2:
        image: nginx
        expose :
                - 80
haproxy:
        image: haproxy:lastest
        volumes:
                - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
        links:
                - web1
                - web2
        ports:
                - "80:80"
        expose:
                - "80"

編輯配置文件

vim haproxy.cfg

global
log 127.0.0.1 local0
global
        log 127.0.0.1 local0
        log 127.0.0.1 local1 notice
defaults
        log global
        mode http
        option httplog
        option dontlognull
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms
        stats uri /status
frontend balancer
        bind 0.0.0.0:80
        default_backend web_backends
backend web_backends
        balance roundrobin
        server server1 web1:80 check
        server server2 web2:80 check

測試:出現輪詢

五.Swam管理集羣

1.部署集羣

1.清理實驗環境
刪除server1、server2的容器
在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

2.爲server3安裝docker(server1、server2已經安裝好了)

[root@server1 ~]# scp -r docker server3:
[root@server3 ~]# ls
docker
[root@server3 ~]# cd docker/
[root@server3 docker]# ls
container-selinux-2.21-1.el7.noarch.rpm
docker-ce-18.06.1.ce-3.el7.x86_64.rpm
libsemanage-2.5-8.el7.x86_64.rpm
libsemanage-python-2.5-8.el7.x86_64.rpm
pigz-2.3.4-1.el7.x86_64.rpm
policycoreutils-2.5-17.1.el7.x86_64.rpm
policycoreutils-python-2.5-17.1.el7.x86_64.rpm
repodata
[root@server3 docker]# yum install *.rpm -y

在這裏插入圖片描述
在這裏插入圖片描述
3.打開server3的docker服務

[root@server3 docker]# systemctl start docker.service 

在這裏插入圖片描述4.初始化server1(管理節點)的swarm集羣

[root@server1 ~]# docker swarm init 

在這裏插入圖片描述5.查看server1的橋接,和網絡信息

[root@server1 ~]# yum install bridge-utils.x86_64 -y					##提供brctl命令
[root@server1 ~]# brctl show
[root@server1 ~]# docker network ls

在這裏插入圖片描述
6.server2、server3加入集羣

[root@server2 docker]# docker swarm join --token SWMTKN-1-5m3v8gviqk7r5e1zs9h8vsr16shhti2mp1o5qa23i7tgml08ut-bqrt2diawswa860qqmabblw4x 172.25.16.1:2377
[root@server2 docker]# docker swarm join --token SWMTKN-1-5m3v8gviqk7r5e1zs9h8vsr16shhti2mp1o5qa23i7tgml08ut-bqrt2diawswa860qqmabblw4x 172.25.16.1:2377

7.在管理節點查看到所有節點信息和狀態

在這裏插入圖片描述

2.部署應用

1.server1中創建網絡webnet,用於容器間通信。

[root@server1 ~]# docker service create --name web --network webnet --publish 80:80 --replicas 3 nginx:1.16 
##-replicas 3代表集羣的個數爲3;nginx後面要帶版本號,默認是laster(可以修改標籤)
image nginx:1.16 could not be accessed on a registry to record
its digest. Each node will access nginx:1.16 independently,
possibly leading to different nodes running different
versions of the image.

qchyxe0yjm7005e8rb2l5f9fz
overall progress: 3 out of 3 tasks 
1/3: running   
2/3: running   
3/3: running   
verify: Service converged 
[root@server1 ~]# 

2.查看服務列表

[root@server1 ~]# docker service ls
[root@server1 ~]# docker service ps web 

在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
4.給server3加載nginx鏡像
在這裏插入圖片描述
5.擴容(增加到六個負載)

[root@server1 ~]# docker service scale web=6
web scaled to 6
overall progress: 6 out of 6 tasks 
1/6: running   
2/6: running   
3/6: running   
4/6: running   
5/6: running   
6/6: running   
verify: Service converged 

在這裏插入圖片描述6.縮減到3個(夠用就行)

[root@server1 ~]# docker service scale web=3
web scaled to 3
overall progress: 3 out of 3 tasks 
1/3: running   
2/3: running   
3/3: running   
verify: Service converged 

此時每個主機開啓一個nginx服務
在這裏插入圖片描述
7.在三個虛擬機上編寫nginx發佈默認文件,並cp到容器內nginx的html下
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述

測試:

物理機中訪問三臺虛擬機,成功訪問並實現輪詢

[root@foundation60 ~]# for i in {1..10};do curl 172.25.16.2/index.html;done
[root@foundation60 ~]# for i in {1..10};do curl 172.25.16.2/index.html;done
[root@foundation60 ~]# for i in {1..10};do curl 172.25.16.3/index.html;done

在這裏插入圖片描述在這裏插入圖片描述

3.部署監控
1.在每個節點上導入visualizer.tar鏡像

[root@server1 ~]# docker load -i visualizer.tar 

在這裏插入圖片描述

[root@server2 ~]# docker load -i visualizer.tar 

在這裏插入圖片描述

[root@server3 ~]# docker load -i visualizer.tar 

在這裏插入圖片描述
2.創建swarm的監控容器,使監控和docker連接起來

[root@server1 ~]# docker service create --name=viz --publish=8080:8080/tcp --constraint=node.role==manager --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock dockersamples/visualizer

在這裏插入圖片描述3.查看容器viz和8080端口開啓情況
在這裏插入圖片描述
測試:

瀏覽器輸入:172.25.16.1:8080

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章