本篇是关于 docker 三剑客中的 docker machine。

注:环境为 CentOS7,docker 19.03。

docker-machine 是 docker 官方三剑客项目之一,它是一个命令行工具。利用 docker-machine 我们可以快速创建一个 docker 环境。同时它支持多种云计算环境,让用户能在多种平台上安装和维护 docker 运行环境。

上图是 docker-machine 的原理图,它连接不同类型的操作平台是通过对应驱动来实现的, ⽬前已经集成了包括AWS、 IBM、 Google, 以及OpenStack、 VirtualBox、 vSphere等多种云平台的⽀持。

安装 docker-machine

在 linux 上安装 docker-machine 只需要从官方的release库中直接下载编译好的二进制文件即可

  1. base=https://github.com/docker/machine/releases/download/v0.16.0 &&
  2. curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  3. sudo mv /tmp/docker-machine /usr/local/bin/docker-machine
  4. chmod +x /usr/local/bin/docker-machine

安装完成后,查看其版本信息:

  1. # docker-machine version
  2. docker-machine version 0.16.0, build 702c267f

docker-machine 支持命令的补全,需要下载 machine 库中的bash文件

  1. base=https://raw.githubusercontent.com/docker/machine/v0.16.0
  2. for i in docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.bash
  3. do
  4. sudo wget "$base/contrib/completion/bash/${i}" -P /etc/bash_completion.d
  5. done

然后执行

  1. source /etc/bash_completion.d/docker-machine-prompt.bash

要启用 docker-machine shell 提示,请添加$(__docker_machine_ps1)到 PS1 设置中 ~/.bashrc。PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '

使用 docker-machine

安装 docker

docker-machine 支持多种环境的安装,这里我们介绍几种

virtualbox

docker-machine 支持通过 virtualbox 驱动安装并配置 docker 主机,前提是我需要安装 virtualbox (https://www.virtualbox.org/wiki/Downloads)

  1. docker-machine create --driver virtualbox default

genernic

genernic 方式可以通过 ssh 直接在远程上安装 docker,但在这之前先要配置 ssh 认证

1.生成密钥

  1. # ssh-keygen
  2. Generating public/private rsa key pair.
  3. Enter file in which to save the key (/root/.ssh/id_rsa):
  4. Enter passphrase (empty for no passphrase):
  5. Enter same passphrase again:
  6. Your identification has been saved in /root/.ssh/id_rsa.
  7. Your public key has been saved in /root/.ssh/id_rsa.pub.
  8. The key fingerprint is:
  9. SHA256:V7kl+8c0paW/yGFCA+TOvBoH86MtLdKBBZ432TwlrN0 root@centos1
  10. The key's randomart image is:
  11. +---[RSA 2048]----+
  12. | .. |
  13. | . oo . . |
  14. | . o *o+ + . o|
  15. | o *+=.E = +.|
  16. | +oS+ooo o..|
  17. | . .+.o .. +.|
  18. | ..o= . o. +|
  19. | . +*.. + o..|
  20. | .oo. o . |
  21. +----[SHA256]-----+

2.主机上安装密钥

  1. # ssh-copy-id root@192.168.10.11

这样一来本机就可以不需要密码登陆远程主机了。

3.genernic安装docker

  1. # docker-machine create --driver generic --generic-ip-address 192.168.10.11 --generic-ssh-key ~/.ssh/id_rsa --generic-ssh-user=root centos2

注:如果主机上没有安装 docker,这一过程的等待时间就会较长。

4.查看主机

  1. # docker-machine ls
  2. NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
  3. centos2 - generic Running tcp://192.168.10.11:2376 v19.03.1

其他平台

其他平台的安装方式这里就不再详细说明,需要的话可以查阅 https://docs.docker.com/machine。

docker-machine 命令

docker-machine 提供一系列的子命令,对应不同的功能。



下面介绍这些命令的具体用法

active

格式为 docker-machine active [arg...]。⽀持-timeout, -t "10" 选项, 代表超时时间, 默认为10s。 查看当前激活状态的Docker主机。 激活状态意味着当前的DOCKER_HOST环境变量指向该主机。 例如, 下⾯命令列出当前激活主机为dev主机:

  1. # docker-machine ls
  2. NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
  3. centos2 - generic Running tcp://192.168.10.11:2376 v19.03.1

config

格式为 docker-machine config [OPTIONS] [arg...]。⽀持 --swarm参数, 表⽰打印Swarm集群信息, ⽽不是Docker信息。 查看到Docker主机的连接配置信息。 例如, 下⾯显⽰dev主机的连接信息:

  1. # docker-machine config centos2
  2. --tlsverify
  3. --tlscacert="/root/.docker/machine/machines/centos2/ca.pem"
  4. --tlscert="/root/.docker/machine/machines/centos2/cert.pem"
  5. --tlskey="/root/.docker/machine/machines/centos2/key.pem"
  6. -H=tcp://192.168.10.11:2376

create

格式为 docker-machine create [OPTIONS] [arg...]。 创建⼀个Docker主机环境。 ⽀持的选项包括:

  • --driver, -d "virtualbox": 指定驱动类型;
  • --engine-install-url "https://get.docker.com": 配置Docker主机时的安装URL;
  • --engine-opt option: 以键值对格式指定所创建Docker引擎的参数;
  • --engine-insecure-registry option: 以键值对格式指定所创建Docker引擎允许访问的不⽀持认证的注册仓库服务;
  • --engine-registry-mirror option: 指定使⽤注册仓库镜像;
  • --engine-label option: 为所创建的Docker引擎添加标签;
  • --engine-storage-driver: 存储后端驱动类型;
  • --engine-env option: 指定环境变量;
  • --swarm: 配置Docker主机加⼊到Swarm集群中;
  • --swarm-image"swarm: latest": 使⽤Swarm时候采⽤的镜像;
  • --swarm-master: 配置机器作为Swarm集群的master节点;
  • --swarm-discovery: Swarm集群的服务发现机制参数;
  • --swarm-strategy“spread”: Swarm默认调度策略;
  • --swarm-opt option: 任意传递给Swarm的参数;
  • --swarm-host "tcp: //0.0.0.0: 3376": 指定地址将监听Swarm master节点请求;
  • --swarm-addr: 从指定地址发送⼴播加⼊Swarm集群服务。

例如, 通过如下命令可以创建⼀个Docker主机的虚拟机镜像:

  1. # docker-machine create -d virtualbox \
  2. --engine-storage-driver overlay \
  3. --engine-label name=testmachine \
  4. --engine-label year=2018 \
  5. --engine-opt dns=8.8.8.8 \
  6. --engine-env HTTP_PROXY=http://proxy.com:3128 \
  7. --engine-insecure-registry registry.private.com \
  8. mydockermachine

所创建Docker主机虚拟机中的Docker引擎将:

  • 使⽤overlay类型的存储驱动;·带有name=testmachine和year=2015两个标签;
  • 引擎采⽤8.8.8.8作为默认DNS;
  • 环境变量中指定HTTP代理服务http://proxy.com:3128。
  • 允许使⽤不带验证的注册仓库服务registry.private.com。

env

格式为 docker-machine env [OPTIONS] [arg...]。显⽰连接到某个主机需要的环境变量。 ⽀持的选项包括:

·-swarm: 显⽰Swarm集群配置;

·-shell: 指定所⾯向的Shell环境, 默认为当前⾃动探测;

·-unset, -u: 取消对应的环境变量;

·-no-proxy: 添加对象主机地址到NO_PROXY环境变量。

例如, 显⽰连接到default主机所需要的环境变量:

  1. # docker-machine env centos2
  2. export DOCKER_TLS_VERIFY="1"
  3. export DOCKER_HOST="tcp://192.168.10.11:2376"
  4. export DOCKER_CERT_PATH="/root/.docker/machine/machines/centos2"
  5. export DOCKER_MACHINE_NAME="centos2"
  6. # Run this command to configure your shell:
  7. # eval $(docker-machine env centos2)

inspect

格式为 docker-machine inspect [OPTIONS] [arg...]。以json格式输出指定Docker主机的详细信息。 ⽀持 -format, -f 选项使⽤指定的Go模板格式化输出。

ip

获取指定Docker主机地址。 例如, 获取 centos2 主机的地址, 可以⽤如下命令:

  1. # docker-machine ip centos2
  2. 192.168.10.11

kill

直接杀死指定的Docker主机。指定Docker主机会强⾏停⽌。

ls

列出所有管理的主机。 格式为 docker-machine ls [OPTIONS] [arg...]。可以通过--filter只输出某些Docker主机, ⽀持过滤器包括名称正则表达式、 驱动类型、 Swarm管理节点名称、 状态等。 例如:

  1. # docker-machine ls --filter state=Running
  2. NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
  3. centos2 - generic Running tcp://192.168.10.11:2376 v19.03.1

⽀持选项包括:

  • --quiet, -q: 减少⽆关输出信息;
  • --filter [--filter option--filter option]: 只输出符合过滤条件主机;
  • -timeout, -t "10": 命令执⾏超时时间, 默认为10s;
  • -format, -f: 使⽤所指定的Go模板格式化输出。

docker 实践七:docker-machine的更多相关文章

  1. centos7+ docker 实践部署docker及配置direct_lvm

    转载于博客园:http://www.cnblogs.com/Andrew-XinFei/p/6245330.html 前言 Docker现在在后端是那么的火热..尤其当笔者了解了docker是什么.能 ...

  2. Docker实践 - 安装Docker并在容器里运行tomcat

    安装Docker yum install docker 本文使用的系统是centos7,ubuntu使用以下命令 sudo apt-get update sudo apt-get install do ...

  3. Docker实践3: Docker常用命令(未完)

    查看容器及运行进程 docker ps 查看容器内部信息 docker inspect container_id 进入容器 docker attach container_id 退出容器 docker ...

  4. Docker实践,来自沪江、滴滴、蘑菇街架构师的交流分享

    架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 第一期主题:容器实践.Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是CI/CD,DevOps,微服务的重要 ...

  5. Docker实践之01-入门介绍

    目录 一.Docker概述 镜像 容器 仓库 二.安装Docker 1.在CentOS上安装Docker 2.在Ubuntu上安装Docker 3.启动docker 4.建立Docker用户组 5.测 ...

  6. Docker三剑客之Docker Machine

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

  7. Docker教程:dokcer machine的概念和安装

    http://blog.csdn.net/pipisorry/article/details/50920982 Docker machine介绍 做为Docker容器集群管理三剑客之一的Docker ...

  8. Docker实践之02-使用镜像及定制

    目录 一.获取镜像 二.使用镜像启动容器实例 三.列出镜像 四.删除本地镜像 五.定制镜像 通过commit命令定制镜像 通过Dockerfile定制镜像 docker build的工作原理 dock ...

  9. Docker(五):Docker 三剑客之 Docker Machine

    上篇文章Docker(四):Docker 三剑客之 Docker Compose介绍了 Docker Compose,这篇文章我们来了解 Docker Machine . Docker Machine ...

随机推荐

  1. postgresql大数据查询加索引和不加索引耗时总结

    1.创建测试表 CREATE TABLE big_data(  id character varying(50) NOT NULL,  name character varying(50),  dat ...

  2. heatmap.js 参数说明

      blur:每个点都是两个圆组成的,分别为内圆和外圆:外圆越大,看起来这个点越模糊,内圆部分比较清晰:外圆的颜色比较固定且与内圆颜色不同,内圆的颜色由value确定:blur决定外圆与内圆的占比大小 ...

  3. 迭代硬阈值类算法总结||IHT/NIHT/CGIHT/HTP

    迭代硬阈值类(IHT)算法总结 斜风细雨作小寒,淡烟疏柳媚晴滩.入淮清洛渐漫漫. 雪沫乳花浮午盏,蓼茸蒿笋试春盘.人间有味是清欢. ---- 苏轼 更多精彩内容请关注微信公众号 "优化与算法 ...

  4. Js-事件分发与DOM事件流

    原文地址:https://www.jianshu.com/p/dc1520327022 Js事件分发与DOM事件流 对JavaScript分发事件不熟悉,网上查阅相关资料整理后,记录一下对Javasc ...

  5. Flutter -------- dio网络请求

    dio是Flutter中文网开源的一个强大的Dart Http请求库,支持Restful API.FormData.拦截器.请求取消.Cookie管理.文件上传/下载.超时等... 1.添加依赖# d ...

  6. C++中的break、continue、goto语句

    break.continue.goto break用于提前结束循环.只能打断一层循环.是把一层循环全部结束掉.continue则是提前结束循环内单次,继续循环下一步.

  7. VsCode写Python代码!这代码简直和大神一样规范!太漂亮了!

    VsCode写Python代码!这代码简直和大神一样规范!太漂亮了!    转 https://www.jianshu.com/p/636306763d89 VsCode虽然没有Pycharm的功能齐 ...

  8. openresty开发系列10--openresty的简单介绍及安装

    openresty开发系列10--openresty的简单介绍及安装 一.Nginx优点 十几年前,互联网没有这么火,软件外包开发,信息化建设,帮助企业做无纸化办公,收银系统,工厂erp,c/s架构偏 ...

  9. Python3基础 for-else break、continue跳出循环示例

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  10. 【442】Remote control GUP Linux

          参考:上传文件到GPU服务器并运行文件 参考:WinSCP 参考:Python远程调试图文教程(一)之Pycharm Remote Debug 参考:教程 | 使用 PyCharm 连接服 ...