docker-machine

Docker Engine 主要用来接收和处理docker命令请求的(Docker Engine==Docker引擎==Docker Engine的客户端==docker)

Docker我们一般理解的,都是C/S模型,用户通过docker client向docker daemon发送REST 请求.

Docker Engine包括这么几个部分:

1.Docker Daemon — docker 的守护进程,属于C/S中的server

2.Docker REST API — docker daemon向外暴露的REST 接口

3.Docker CLI — docker向外暴露的命令行接口(Command Line API)

因此,客户端访问服务端的方式有两种,一种是使用命令行工具,比如docker run, docker ps…等等.另一种就是直接通过调用REST API,比如发送一个curl http请求

Docker Machine是一个工具,用来在虚拟主机上安装Docker Engine,并使用 docker-machine命令来管理这些虚拟主机(Machine).是一个可以帮助我们在电脑上、在云端、在数据中心内创建 Docker 主机的应用

主要用来管理 docker化的 host (安装了Docker Engine的主机)

使用 docker-machine命令,你可以启动、查看、停止以及重启一个主机,升级Docker client和daemon,配置Machine 的 Docker client与你的主机进行通信

无论是Mac,Windows或是Linux,你都可以在其上安装Docker Machine,使用docker-machine命令来创建和管理大量的Docker hosts.
它会自动创建主机,在主机上安装Docker Engine,然后配置docker client.每个被管理的主机(“machine”)都是一个Docker 主机和一个配置过的client的组合.

docker Machine的具体使用场景:

1.你目前只有一个老版本的MacOSX(比如10.10.2)或者Windows系统,想在上边运行docker.

2.想在远程系统上创建Docker主机,比如想在网络上,云平台上,以及本地创建Docker host,你就需要Docker Machine.

3.docker在不同的linux上得安装方法不一样,通过这个工具可以提供统一的安装方法.

你可以使用Machine在一个或多个虚拟机上安装Docker Engine.这些虚拟机可以是在本地(当你使用Machine在VirtualBox安装和运行Docker Engine时)

也可以是远程的(使用Machine在云平台上创建Docker化的主机时).这些虚拟化的主机可以被认为是”machine”

Machine
解决因操作系统异构导致的安装 Docker 困难的问题,所有系统部署 Docker 都变得非常方便.

install machine

1
2
3
4
5
6
7
8
9
curl -L https://github.com/docker/machine/releases/download/\
v0.14.0/docker-machine-`uname -s`-`uname -m` \
>/tmp/docker-machine &&
chmod a+x /tmp/docker-machine
sudo cp /tmp/docker-machine /usr/local/bin/docker-machine
#如果超时,直接从网页中下载
https://github.com/docker/machine/releases/download/v0.12.1/docker-machine-Linux-x86_64
chmod a+x docker-machine-Linux-x86_64
sudo mv docker-machine-Linux-x86_64 /usr/local/bin/docker-machine

use machine

你也可以在VirtualBox等虚拟机上安装Docker engine到Docker中.在本地客户端,就好像所有的Docker 引擎运行在本地一样

  1. 需要先安装virtualbox这个软件
  2. 需要的是boot2docker.iso 只是一个普通的iso文件.
    Docker Machine使用boot2docker作为virtualbox的镜像 – boot2docker是一个运行Docker容器的轻量级Linux系统,完全在内存中运行
    不是下载此镜像:sudo docker pull boot2docker/boot2docker
    而是 将iso放到 /home/python/.docker/machine/cache/ 再运行
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    docker-machine create -d virtualbox dev
    # -driver virtualbox 表示我们在VirtualBox 的虚拟机里面部署 docker,代表的是驱动类型
    # 最后的参数"dev" 是虚拟机(Machine)的名称
    # http://os1h5rv4q.bkt.clouddn.com/docker_dev.jpg
    #用这个Machine可以配置本地Docker客户端,用到env命令完成
    docker-machine env dev
    # 目前已經建立出來的 docker VM
    docker-machine ls
    # Docker客户端将会使用设置的相同的环境变量通过Docker API与运行在上面的机器互相通信
    # 设置完成后,就可以在本地机器访问远程Docker
    eval $(docker-machine env dev)
    docker ps
    # 到指定的Docker Machine
    docker-machine ssh dev
    # 启动/停止/移除/查看状态 Machine
    docker-machine start/stop/rm/status dev

简单一个例子

1
2
3
4
5
6
7
8
9
10
docker-machine create -d virtualbox vm1
docker-machine create -d virtualbox vm2
docker-machine create -d virtualbox vm3
# 连接vm1
docker-machine ssh vm1
docker swarm init --advertise-addr 192.168.99.100(vm1:ip)
# 上面的命令会提示vm1是管理员,并生成如下命令
# 只需要连接vm2,vm3运行如下命令就可以成为node
docker swarm join --token SWMTKN-1-5b08c43sjxzeg2gk4xjcmfkrn41ap7i77okitjr7a45ja1czd5-0td3csojve9nsbwja1f0vzn4b 192.168.99.100:2377
在vm1中操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 在vm1查看 node数量
docker node ls
# 在vm1创建 docker service
docker service create --name=my_nginx nginx
docker service ls
# 更新 service
docker service update --publish-add 80 my_nginx
# 访问
192.168.99.100:30000
# docker service scale
# 启动多个服务
docker service scale my_nginx=10
docker service ls
# 查看 service 状态
docker service ps my_nginx # 可以看到10个服务分别在vm1,2,3执行
# 查看 log
docker service logs -f my_nginx
# Docker Swarm Visualizer 可视化工具
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
# 访问
192.168.99.100:8080
# 停止服务
docker service scale my_nginx=0
# 删除服务
docker service rm my_nginx
Share Comments