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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值