Docker三剑客

Docker三剑客

1、Machine

Machine 简介
Docker Machine 是Docker官方编排项目之一,使用go语言编写的,
使用不同引擎在多种平台上快速的安装Docker环境,开源地址:https://github.com/docker/machine。

Docker Machine 最主要有两个作用

 使用 Docker Machine 方便在不同的环境中使用 Docker ,比如:Win/Mac

 使用 Docker Machine 方便在云环境下批量部署 Docker环境,比如:私有云,公有云批量安装Docker环境

Machine 安装

​ Docker Mechine 可以在多种平台上安装使用,包括Linux 、MacOS以及windows
Docker Mechine 安装非常的简单:

GitHub地址:https://github.com/docker/machine/releases/ 里面有安装教程MacOS以及windows我们课里就不玩儿了,Linux才是我们的主战场:

通过Docker Machine 创建docker(我用了两台机器)

 192.168.17.128 安装docker machine的机器 主机名:operation

 192.168.17.129 被管理的机器 主机名:client1

curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-uname -s-uname -m >/tmp/docker-machine

chmod +x /tmp/docker-machine

cp /tmp/docker-machine /usr/local/bin/docker-machine

上面的官方的玩法,实在坑爹,下载太慢慢了,所以我们在windows物理机上翻墙(不翻墙也一样慢,但是远程linux中不好用翻墙软件)先下载下来,上传linux,设置

下面是另一种土办法安装,linux上安装lrzsz ,用rz命令上传到自已

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
安装:注意:是在全新的操作系统中,没有安装docker之前这样干,所以也要备yum,阿里云,参考‘Docker安装

mv docker-machine-Linux-x86_64 docker-machine   //改名,方便操作
chmod +x docker-machine
cp ./docker-machine /usr/local/bin/docker-machine   //让它在系统的任何地方都可执行

使用,两台机都事先没有安装docker服务器软件

通过Docker Machine 创建docker(我用了两台机器),云服务器要开放2376-2380端口

 139.159.213.245 安装docker machine的机器 主机名:operation

 47.108.50.98 被管理的机器 主机名:client1

创建步骤:

1. 配置主机间的SSH免密(139.159.213.245)
# 生成keys并配置可以免密登录主机(这个是必须要做的),ls -a 回车,可以看到当前目录有一个.ssh目录
[root@operation ~]# ssh-keygen

# 将keys拷贝到client1上去
[root@operation ~]# ssh-copy-id root@47.108.50.98

# 测试是否可以免密登录
[root@operation ~]# ssh root@47.108.50.98
[root@client1 ~]# exit    //退出来呀,有一次是没有退出来创建,搞砸了

在这里插入图片描述
在这里插入图片描述

//2. 使用docker machine创建docker host
  //使用docker machine 创建
  //对于docker machine来讲,术语Machine就是运行docker daemon的主机,创建machine就是在host上安装docker
   // 执行docker-macine ls查看当前的machine
[root@operation ~]# docker-machine ls
   // 当前还没有一个machine,接下来我们创建第一个machine:docker98 47.108.50.98
[root@operation ~]# docker-machine create --engine-registry-mirror=https://e0h65m8r.mirror.aliyuncs.com  --driver generic --generic-ip-address=192.168.17.129 docker129

    //注意:Error creating machine: Error running provisioning: error installing docker:  这样的错误 原因就是因为网络的原因
    //小技巧:operation机器,和安装docker的目标机器,最好在安装过程中,把防火墙关闭,三个防火墙都关闭。

    //创建成功执行ls查看
docker-machine  ls
   NAME   ACTIVE   DRIVER   STATE   URL   SWARM   DOCKER   ERRORS

   // 登录到client查看配置项
[root@operation ~]# ssh root@47.108.50.98

[root@docker98 ~]# cat /etc/systemd/system/docker.service.d/10-machine.conf
  //注:-H tcp://0.0.0.0:2376 使docker daemon接受远程连接
  //     --tls*对远程连接启用安全认证和加密
  //注:大家可能会发现这里的主机名变成了docker98 原因就是docker-machine创建的时候会把主机名也一起修改

// 查看docker129的环境变量
[root@operation ~]# docker-machine env docker98


在这里插入图片描述
在这里插入图片描述

2、Compose

1,简介

​ Compose 项目是 Docker 官方的开源项目,其代码目前在https://github.com/docker/compose上开源。

通过前面的学习,我们知道使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。
然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。
例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

​ Compose 就满足了上面的需求。
它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

Compose 中有几个重要的概念:

 任务 (task): 一个容器就是一个任务,有唯一的ID,同一个服务中多个任务ID依次增加。

 服务 (service):包括若干运行相同镜像的容器实例。

 项目 (project)或者服务栈(stack):由一组关联的服务组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

​ Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。
因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

2、安装与卸载

**Compose 支持 Linux、macOS、Windows 10 三大平台。**

Compose 可以通过 Python 的包管理工具 pip 进行安装,
也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。
前两种方式是传统方式,适合本地环境下安装使用;最后一种方式则不破坏系统环境,更适合云计算场景。
Docker for Mac 、Docker for Windows 自带 docker-compose 二进制文件,安装 Docker 之后可以直接使用。

Linux 系统请使用以下介绍的方法安装:

1)二进制包
//在 Linux 上的也安装十分简单,从https://github.com/docker/compose/releases处直接下载编译好的二进制文件即可。
//例如,在 Linux 64 位系统上直接下载对应的二进制包。
$ curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

//与上面安装docker-machine一样,我是先下载二进制包,再安装
$ mv docker-compose-Linux-x86_64 docker-compose
$cp ./docker-compose /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose version   //看成功否,有版本号,说明安装成功
//卸载
//如果是二进制包方式安装的,删除二进制文件即可。
$ sudo rm /usr/local/bin/docker-compose

在这里插入图片描述

Swarm

Docker Swarm 一句话说明:提供 Docker 容器集群服务,
是 Docker 官方对容器云生态进行支持的核心方案。
使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。

**注意:**从Docker 1.12.0+ Swarm mode 已经内嵌入 Docker 引擎,成为了 docker 子命令 docker swarm,
现在已经开始使用 Swarm mode,Swarm作为一个单独项目已经不在持续开发了。
这里标题还是Docker三剑客之Swarm,但实质内容我们讲Docker内置的Swarm mode:

1、基本概念
Swarm 是 Docker 引擎内置(原生)的集群管理和编排工具。
使用 Swarm 集群之前需要了解以下几个概念。

1)节点
运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,
这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。

节点分为管理 (manager) 节点和工作 (worker) 节点:
管理节点用于 Swarm 集群的管理,
docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。
一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader,leader 通过 raft 协议实现。

工作节点是任务执行节点,工作节点执行的任务就是由管理节点下发的服务 (service) 。
管理节点默认也作为工作节点。
你也可以通过配置让服务只运行在管理节点。
来自 Docker 官网的这张图片形象的展示了集群中管理节点与工作节点的关系:
在这里插入图片描述
2)服务和任务
任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。
服务 (Services) 是指一组任务的集合,服务定义了任务的属性。
服务有两种模式:
 replicated services 按照一定规则在各个工作节点上运行指定个数的任务。
 global services 每个工作节点上运行一个任务
两种模式通过 docker service create 的 --mode 参数指定。
来自 Docker 官网的这张图片形象的展示了容器、任务、服务的关系。
在这里插入图片描述
2、创建 Swarm 集群
我们以创建一个包含一个管理节点和两个工作节点的最小 Swarm 集群为例子。
提前准备好三个主机。
1)初始化集群
我们使用 docker swarm init 在本机初始化一个 Swarm 集群。
避免防火墙在创建集群过程中干扰,建议关掉在实验。
停止firewall
systemctl stop firewalld.service
关闭SELINUX
setenforce 0 //临时关闭
清空iptables规则
iptables -F
iptables-save

$ docker swarm init --advertise-addr 192.168.17.128

docker swarm join
–token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c
192.168.99.100:2377
如果你的 Docker 主机有多个网卡,拥有多个 IP,必须使用 --advertise-addr 指定 IP。
执行 docker swarm init 命令的节点自动成为管理节点。

2)增加工作节点
上一步我们在本机初始化了一个 Swarm 集群,拥有了一个管理节点,
进入work1的主机:
docker@worker1:~$ docker swarm join
–token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c
192.168.17.128:2377

进入work2的主机:
docker@worker2:~$ docker swarm join
–token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c
192.168.17.128:2377

3)查看集群
经过上边的两步,我们已经拥有了一个最小的 Swarm 集群,包含一个管理节点和两个工作节点。
在管理节点使用 docker node ls 查看集群。
$ docker node ls 只能在管理节点上执行

3、部署服务
我们使用 docker service 命令来管理 Swarm 集群中的服务,该命令只能在管理节点运行。
1)新建服务
现在我们在上一节创建的 Swarm 集群中运行一个名为 nginx 服务。
$ docker service create --replicas 3 -p 80:80 --name nginx nginx:1.13.7-alpine

现在我们使用浏览器,输入任意节点 IP ,即可看到 nginx 默认页面。
–replicas 3: Number of tasks

2)查看服务
使用 docker service ls 来查看当前 Swarm 集群运行的服务。
$ docker service ls
使用 docker service ps 来查看某个服务的详情。
使用 docker service logs 来查看某个服务的日志。
$ docker service logs nginx

3)删除服务
使用 docker service rm 来从 Swarm 集群移除某个服务。
$ docker service rm nginx

4、在 Swarm 集群中使用 compose 文件
正如之前使用 docker-compose.yml 来一次配置、启动多个容器,
在 Swarm 集群中也可以使用 compose 文件 (docker-compose.yml) 来配置、启动多个服务。
上一节中,我们使用 docker service create 一次只能部署一个服务,
使用 docker-compose.yml 我们可以一次启动多个关联的服务。
我们以在 Swarm 集群中部署 WordPress 为例进行说明。

version: "3.8"
services:
  wordpress:
    image: wordpress
    ports:
      - 80:80
    networks:
      - overlay
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    deploy:
      mode: replicated
      replicas: 3
 
  db:
    image: mysql
    networks:
       - overlay
    volumes:
      - db-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    deploy:
      placement:
        constraints: [node.role == manager]
 
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
 
volumes:
  db-data:
networks:
  overlay:
deploy    # v3 版本以上, 指定与部署和运行服务相关的配置, deploy 部分是 docker stack 使用的, docker stack 依赖 docker swarm             endpoint_mode     # v3.3 版本中新增的功能, 指定服务暴露的方式                 
vip      # Docker 为该服务分配了一个虚拟 IP(VIP), 作为客户端的访问服务的地址                 
dnsrr    # DNS轮询, Docker 为该服务设置 DNS 条目, 使得服务名称的 DNS 查询返回一个 IP 地址列表             
labels                # 指定服务的标签,这些标签仅在服务上设置            
  mode                  # 指定 deploy 的模式                 
   global                # 每个集群节点都只有一个容器                 
   replicated            # 用户可以指定集群中容器的数量(默认)             
   placement             # 控制容器部署是位置             
 replicas              # deploy 的 mode 为 replicated 时, 指定容器副本的数量,说白了就是服务下运行几个容器             
 resources             # 资源限制                
  limits                # 设置容器的资源限制                     
   cpus: "0.5"           # 设置该容器最多只能使用 50% 的 CPU                      
   memory: 50M           # 设置该容器最多只能使用 50M 的内存空间                 
  reservations          # 设置为容器预留的系统资源(随时可用)                     
 cpus: "0.2"           # 为该容器保留 20% 的 CPU


部署服务
部署服务使用 docker stack deploy,其中 -c 参数指定 compose 文件名。
$ docker stack deploy -c docker-compose.yml wordpress

打开浏览器,输入任意节点的IP地址:8080,即可看到各节点运行状态。
在这里插入图片描述
-----在浏览器新的标签页输入 任一节点IP 即可看到 WordPress 安装界面,安装完成之后,输入 任一节点IP 即可看到 WordPress 页面。
查看服务
$ docker stack ls
NAME SERVICES
wordpress 3

移除服务
要移除服务,使用 docker stack down

$ docker stack down wordpress
Removing service wordpress_db
Removing service wordpress_visualizer
Removing service wordpress_wordpress
Removing network wordpress_overlay
Removing network wordpress_default
该命令不会移除服务所使用的 数据卷,如果你想移除数据卷请使用
docker volume rm

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_33406021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值