docker 三剑客

目录

一. Docker Machine

简介:

Docker Machine安装

二.docker compose

三.docker swarm

实验环境


一. Docker Machine

简介:

Docker Machine项目基于 Go 语言实现,是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。
Docker Machine支持在常规Linux操作系统、虚拟化平台、openstack、公有云等不同环境下安装配置docker host。

维护地址:https://github.com/docker/machine

Docker Machine安装

实验环境vm2和vm3已经安装好docker-ce

开启新的机器vm4

在vm2上安装Docker Machine

https://github.com/docker/machine/releases/tag/v0.16.2  下载

curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine


chmod +x /usr/local/bin/docker-machine

 对vm3和vm4进行免密设置

之后,vm2上安装docker

docker–generic-ip-address #指定要安装宿主机的IP,这里是本地的IP。也就是说,你也可以给别的主机装Docker,前提是SSH root用户免交互登录或私钥认证。

docker-machine create --driver generic --generic-ip-address=172.25.7.7 vm3

docker 三剑客_第1张图片

 Key的生成

[root@vm2 ~]# cd .docker/
[root@vm2 .docker]# cd machine/
cd machines/
[root@vm2 machines]# ls
vm3
[root@vm2 machines]# cd vm3/
[root@vm2 vm3]# ls
ca.pem  cert.pem  config.json  key.pem  server-key.pem  server.pem

vm3中会生成machine文件 docker 三剑客_第2张图片

eval $(docker-machine env vm3)
远程加密使用vm3

 env查看环境变量

config 查看配置docker 三剑客_第3张图片

 安装脚本可以看出使用的主机

docker-machine.bash                                                                                             100%   12KB   7.2MB/s   00:00    
docker-machine-prompt.bash                                                                                      100% 1469     1.7MB/s   00:00    
docker-machine-wrapper.bash 

 编辑环境变量的行提示符

[root@vm2 bash_completion.d]# vim ~/.bashrc 
[root@vm2 bash_completion.d]# cat  ~/.bashrc
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi

docker 三剑客_第4张图片

要退出重新连接

docker 三剑客_第5张图片

 vm4部署docker

/var/www/html

[root@students72 html]# wget https://get.docker.com/
--2022-01-13 15:07:50--  https://get.docker.com/
Resolving get.docker.com (get.docker.com)... 99.84.206.68, 99.84.206.5, 99.84.206.114, ...
Connecting to get.docker.com (get.docker.com)|99.84.206.68|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 18617 (18K) [text/plain]
Saving to: ‘index.html’

index.html                           100%[====================================================================>]  18.18K  95.4KB/s    in 0.2s    

2022-01-13 15:07:51 (95.4 KB/s) - ‘index.html’ saved [18617/18617]

[root@students72 html]# ls
index.html  mitaka  pub  rhel7.6  westos.cfg  westosir
[root@students72 html]# 
[root@students72 html]# mv index.html get-docker.sh
[root@students72 html]# vim get-docker.sh 

 

[root@students72 html]# vim docker-ce.repo
[root@students72 html]# cat docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/extras/$basearch/
gpgcheck=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

 vm节点进行部署

 docker-machine create --driver generic --engine-install-url "http://172.25.7.250/get-docker.sh"  --generic-ip-address=172.25.7.8 vm4

 第一次失败,vm4无法用网

让vm4可以上网成功

二.docker compose

Docker Compose是一种编排服务,基于pyhton语言实现,是一个用于在 Docker 上定义并运行复杂应用的工具,可以让用户在集群中部署分布式应用。用户可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。
解决了容器与容器之间如何管理编排的问题。

Docker Compose 中有两个重要的概念:
服务 (service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目 (project) :由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

vm2安装仓库时已经安装了Docker Compose

[root@vm2 ~]# cd /usr/local/bin/
[root@vm2 bin]# ls
convoy  convoy-pdata_tools  docker-compose  docker-machine
[root@vm2 bin]# cd /root/
[root@vm2 ~]# mkdir compose
[root@vm2 ~]# 

使用haproxy和nginx(在这作web服务器

)作负载均衡

[root@vm2 ~]# docker pull haproxy

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

version: "3.9"
services:
  web1:
    image: nginx
    networks:
      - mynet
    volumes:
      - ./web1:/usr/share/nginx/html
  web2:
    image: nginx
    networks:
      - mynet
    volumes:
      - ./web2:/usr/share/nginx/html
  haproxy:
    image: haproxy
    networks:
      - mynet
    volumes:
      - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
    ports:
      - "80:80"   #端口修改为80:5000  后面的才可以监听
networks:
  mynet:

[root@vm2 compose]# mkdir  web1
[root@vm2 compose]# mkdir  web2
[root@vm2 compose]# echo web1 > web1/index.html
[root@vm2 compose]# echo web2 > web2/index.html

创建haproxy目录并编辑修改haproxy.cfg的主配置文件

[root@vm2 compose]# mkdir haproxy
[root@vm2 compose]# vim haproxy.cfg

[root@vm2 haproxy]# vim haproxy.cfg
[root@vm2 haproxy]# cat haproxy.cfg
#
# This is a sample configuration. It illustrates how to separate static objects
# traffic from dynamic traffic, and how to dynamically regulate the server load.
#
# It listens on 192.168.1.10:80, and directs all requests for Host 'img' or
# URIs starting with /img or /css to a dedicated group of servers. URIs
# starting with /admin/stats deliver the stats page.
#

global
        maxconn         65535
        #stats socket    /var/run/haproxy.stat mode 600 level admin
        log             127.0.0.1 local0
        #uid             200
        #gid             200
       # chroot          /var/empty
        daemon

defaults
        mode            http
        log             global
        option          httplog
        option          dontlognull
        monitor-uri     /monitoruri
        maxconn         8000
        timeout client  30s
        retries         2
        option redispatch
        timeout connect 5s
        timeout server  5s
        stats uri       /admin/stats

# The public 'www' address in the DMZ
frontend public
        bind            *:5000 name clear    #监听所有ip的80端口

        #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem

        #use_backend     static if { hdr_beg(host) -i img }
        #use_backend     static if { path_beg /img /css   }
        default_backend dynamic

# The static backend backend for 'Host: img', /img and /css.
backend dynamic
        balance         roundrobin
        server          a web1:80 check inter 1000     #1000ms健康检测
        server          b web2:80 check inter 1000

[root@vm2 haproxy]#

[root@vm2 compose]# docker-compose up  / down



docker-compose start  要在compose目录中读取yml 文件

docker 三剑客_第6张图片

docker-compose ps

 测试

主机

docker 三剑客_第7张图片

 浏览器http://172.25.7.6/

如果有自动生成https需要对浏览器进行设置

docker 三剑客_第8张图片

 选择自定义

docker 三剑客_第9张图片

访问

http://172.25.7.6/admin/stats

[root@vm2 compose]# docker ps
[root@vm2 compose]# docker stop compose-web1-1
compose-web1-1
[root@vm2 compose]# docker start compose-web1-1 
compose-web1-1

 docker 三剑客_第10张图片

 

stop a变红  start 恢复

https://docs.docker.com/compose/compose-file/compose-file-v3/#compose-file-structure-and-examples

三.docker swarm

在 Docker 1.12 版本发布之后,swarm合并到了 Docker 中,成为 Docker 的一个子命令。Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具,它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
Docker swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具。

Docker Swarm 优点

  • 任何规模都有高性能表现
  • 灵活的容器调度
  • 服务的持续可用性
  • 和 Docker API 及整合支持的兼容性
  • Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持。

Docker swarm节点分为manager管理节点和worker工作节点。
Task任务是swarm中的最小调度单位,可以理解为一个单一的容器
Services服务是指一组任务的集合,服务定义了任务的属性。

初始化

[root@vm2 ~]# docker swarm init

vm4中复制文件
scp /etc/sysctl.d/docker.conf vm4:/etc/sysctl.d/docker.conf


 

将光标命令在 vm3,vm4运行

在vm2

[root@vm2 ~]# docker  node ls

 默认网络

docker 三剑客_第11张图片

[root@vm2 ~]# docker node promote vm3

[root@vm2 ~]# docker node demote vm2

docker swarm leave

改变Leader

[root@vm3 ~]# docker node rm -f vm2
vm2

vm2脱离集群,仓库运行打入后台

[root@vm2 harbor]# docker-compose up -d

让仓库为vm3和vm4可用

查看docker仓库

拉起新的虚拟机vm5

docker 安装好

实验环境

vm2仓库

vm3/4/5与仓库连接

vm5加入集群

docker swarm join --token SWMTKN-1-3f8v7h2j6pebml6or66xwuovnpek2cusste1iwr8c64s7j41st-6zqp2y51768t3rm3bn5wqdvam 172.25.7.7:2377

 vm3:

docker service create --name webcluster -p 80:80 --replicas 3 nginx

 集群的伸缩

 docker service scale webcluster=3/6/12  自己选数字

docker 三剑客_第12张图片

 

部署swarm 监控

https://github.com/dockersamples/docker-swarm-visualizer

[root@vm2 harbor]# docker tag dockersamples/visualizer:stable reg.westos.org/library/visualizer:latest
[root@vm2 harbor]# docker push  reg.westos.org/library/visualizer:latest

 vm3 leader

[root@vm3 sysctl.d]#
 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 \
>   visualizer

docker 三剑客_第13张图片

 

 访问172.25.7.7:8080

docker 三剑客_第14张图片

 systemctl stop docker.service

docker 三剑客_第15张图片

 

[root@vm3 docker]# docker service rm webcluster
webcluster
[root@vm3 docker]# docker service ls
ID             NAME      MODE         REPLICAS   IMAGE               PORTS
yyu0mal5hjqj   viz       replicated   1/1        visualizer:latest   *:8080->8080/tcp

docker 三剑客_第16张图片

 vm2拉取myapp,并上传到harbor仓库

 docker search ikubernetes
 docker pull ikubernetes/myapp:v1
 docker pull ikubernetes/myapp:v2
[root@vm2 harbor]# docker tag ikubernetes/myapp:v1 reg.westos.org/library/myapp:v1
[root@vm2 harbor]# docker tag ikubernetes/myapp:v2 reg.westos.org/library/myapp:v2

 

docker push reg.westos.org/library/myapp:v1

docker 三剑客_第17张图片

 vm3重新创建容器集群

docker service create --name webcluster -p 80:80 --replicas 3 myapp:v1

docker 三剑客_第18张图片

 负载均衡测试

测试

[root@students72 images]# for i in {1..10}; do curl 172.25.7.8/hostname.html; done
 

docker 三剑客_第19张图片 滚动更新

docker service scale webcluster=12
 docker service update webcluster --help

 

docker service update --image myapp:v2 --update-parallelism 2  --update-delay 5s webcluster 
webcluster

每次更新两个,每五秒更新一次

可以指定yml文件

docker 三剑客_第20张图片

 

[root@vm3 ~]# vim webcluster.yml
[root@vm3 ~]# cat webcluster.yml 
version: "3.9"
services:

  redis:
    image: myapp:v1
    ports:
      - "80:80"
  
    deploy:
      replicas: 3
      update_config:
        parallelism: 2
        delay: 5s
      restart_policy:
        condition: on-failure

[root@vm3 ~]# docker stack deploy web -c webcluster.yml
Creating network web_default
Creating service web_redis

docker 三剑客_第21张图片 

 

[root@vm3 ~]# vim webcluster.yml
[root@vm3 ~]# docker stack deploy web -c webcluster.yml
Updating service web_redis (id: ogd07mkp3l58s4mmzfnzgyvg8)

修改了3为6

docker 三剑客_第22张图片

 

你可能感兴趣的:(docker,容器,运维)