本篇是关于 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库中直接下载编译好的二进制文件即可

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

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

# docker-machine version
docker-machine version 0.16.0, build 702c267f

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

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

然后执行

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)

docker-machine create --driver virtualbox default

genernic

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

1.生成密钥

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:V7kl+8c0paW/yGFCA+TOvBoH86MtLdKBBZ432TwlrN0 root@centos1
The key's randomart image is:
+---[RSA 2048]----+
| .. |
| . oo . . |
| . o *o+ + . o|
| o *+=.E = +.|
| +oS+ooo o..|
| . .+.o .. +.|
| ..o= . o. +|
| . +*.. + o..|
| .oo. o . |
+----[SHA256]-----+

2.主机上安装密钥

# ssh-copy-id root@192.168.10.11

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

3.genernic安装docker

# 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.查看主机

# docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
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主机:

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

config

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

# docker-machine config centos2
--tlsverify
--tlscacert="/root/.docker/machine/machines/centos2/ca.pem"
--tlscert="/root/.docker/machine/machines/centos2/cert.pem"
--tlskey="/root/.docker/machine/machines/centos2/key.pem"
-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主机的虚拟机镜像:

# docker-machine create -d virtualbox \
--engine-storage-driver overlay \
--engine-label name=testmachine \
--engine-label year=2018 \
--engine-opt dns=8.8.8.8 \
--engine-env HTTP_PROXY=http://proxy.com:3128 \
--engine-insecure-registry registry.private.com \
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主机所需要的环境变量:

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

inspect

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

ip

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

# docker-machine ip centos2
192.168.10.11

kill

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

ls

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

# docker-machine ls --filter state=Running
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
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. Android系统Audio框架介绍【转】

    本文转载自:https://blog.csdn.net/yangwen123/article/details/39502689 音频基础知识声音有哪些重要属性呢? 响度(Loudness)响度就是人类 ...

  2. C#读取Word指定页的内容

    /// <summary> /// Word按页读取内容 /// </summary> /// <param name="page">页数< ...

  3. Typora 精美而强大的Markdown编辑器

    Typora 精美而强大的Markdown编辑器  转 https://www.jianshu.com/p/45e284645d30 Markdown编辑器千千万,可是有颜值.功能强并且免费的,就没有 ...

  4. postgre查询表和记录数,查表字段

    select relname as TABLE_NAME, reltuples as rowCounts from pg_class where relkind = 'r' and relnamesp ...

  5. asp设置cookies过期时间

    Response.Cookies("user_name").Expires=Date+1 '指定cookie保存时间 保留COOKIES一个小时 Response.Cookies( ...

  6. [转]3D渲染管线

    转自:http://tgerm.org/SRP/ 在3D中有两种渲染管线,分别是图形渲染管线和GPU渲染管线. 图形渲染管线 <Render-Time Rendering Third Editi ...

  7. doris: shell invoke .sql script for doris and passing values for parameters in sql script.

    1. background in most cases, we want to execute sql script  in doris  routinely. using azkaban, to l ...

  8. js Date.parse()时区问题

    比较两个时间,parse() 方法可解析一个日期时间字符串,并返回 1970/1/1 午夜距离该日期时间的毫秒数.Date.parse时间多了8小时. 正确的方法: var nowDate = Dat ...

  9. php 保留2位小数

    $num = 10.4567; //第一种:利用round()对浮点数进行四舍五入 echo round($num,); //10.46 //第二种:利用sprintf格式化字符串 $format_n ...

  10. 将WPF转为PDF

    https://blog.csdn.net/xgugu1210/article/details/51878104 https://www.cnblogs.com/zeoy/archive/2013/0 ...