前言

 前面《Docker学习—Compose》文中介绍了Compose的使用方式;接下来继续了解docker三剑客之一的 Machine;

一、Docker Machine简介

 1、什么是Docker Machine?

  Docker Machine是一个可以在虚拟主机上安装Docker引擎,并使用Docker Machine命令管理主机的工具。您可以使用计算机在本地Mac或Windows box、公司网络、数据中心或云提供商(如Azure、AWS)上创建Docker主机。

  Docker Machine是一个工具,可以让您在虚拟主机上安装Docker Engine,使用Docker Machine命令,您可以启动、检查、停止和重新启动托管主机,升级Docker客户端和守护程序,并配置Docker客户端与主机对话。

 2、为什么要用Docker Machine?

  Docker Machine有这两个广泛的用例。

  • 在旧的桌面系统,想在Mac或Windows上运行Docker

  

  如果您主要在旧版Mac或Windows笔记本电脑或桌面上工作,但不符合新的Docker desktop for Mac和Docker desktop for Windows apps的要求,则需要Docker Machine在本地运行Docker Engine。

  • 想在远程系统上配置Docker主机

  

  Docker引擎在Linux系统上本机运行。如果您的主系统是Linux机器,并且希望运行docker命令,您只需下载并安装docker Engine。但是,如果你想在一个网络上、云端甚至本地提供多个Docker主机,你需要Docker Machine。

 3、Docker Engine和Docker Machine有什么区别?

  通常说“ Docker”时,通常指的是Docker Engine,由Docker守护程序组成的客户端-服务器应用程序,用于指定与守护程序交互的接口的REST API和与守护程序进行对话的命令行界面(CLI)客户端(通过REST API包装器)。

  Docker Engine从CLI接受命令,

  例如 :docker run <image> 启动容器运行镜像;docker ps 列出正在运行的容器;docker image ls 列出镜像列表等

  

  Docker Machine是用于调配和管理Docker主机(带有Docker Engine的主机)的工具。通常,您在本地系统上安装Docker Machine。Docker Machine有自己的命令行客户端 docker-machine和Docker Engine客户端docker。您可以使用Machine在一个或多个虚拟系统上安装Docker Engine。这些虚拟系统可以是本地的(如在Mac或Windows上使用Machine在VirtualBox中安装并运行Docker Engine时),也可以是远程的(如在Mac上使用Cloud在云提供商上配置Docker主机时)。可以将Dockeri主机本身视为(有时也称为托管的“机器”)。

  4、Docker Machine支持机器驱动程序

二、Docker Machine应用示例

 本次示例采用windows docker 中使用Docker Machine来实现虚拟环境(hyper-v)中dcoker环境 生成

 1、安装Docker Machine:

  • MacOS中使用:
$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/usr/local/bin/docker-machine &&
chmod +x /usr/local/bin/docker-machine
  • Linux中运行:
$ 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
  • Windows中使用Git BASH 执行命令:
$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
mkdir -p "$HOME/bin" &&
curl -L $base/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" &&
chmod +x "$HOME/bin/docker-machine.exe"

 2、查看安装版本:docker-machine version

  

  3、设置hyper-网络代理

  进入Hyper-V 管理器添加虚拟交换器如下图:

  

 4、使用docker-machine创建docker环境:在Git BASH执行以下命令

命令:docker-machine create -d hyperv --hyperv-virtual-switch <NameOfVirtualSwitch> <nameOfNode>
示例:docker-machine create -d hyperv --hyperv-virtual-switch docker_Virtual_Switch worker1

  该命令下载安装了Docker守护程序的轻量级Linux发行版(boot2docker)并在hyperv中创建名为<nameOfNode>的实例运行。  具体docker-machine命令还需要进一步学习

  结果如下: 则创建docker环境成功

 

 5、进入创建docker环境:

--进入worker1环境
$ eval $("C:\Users\cwsheng\bin\docker-machine.exe" env worker1)
--查看worker1中运行容器
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

三、Docker Machine命令   

Options:
--debug, -D 启用调试模式
--storage-path, -s "C:\Users\cwsheng\.docker\machine" 配置存储路径 [$MACHINE_STORAGE_PATH]
--tls-ca-cert 验证远程CA [$MACHINE_TLS_CA_CERT]
--tls-ca-key 生成证书的私钥 [$MACHINE_TLS_CA_KEY]
--tls-client-cert 用于TLS的客户端证书 [$MACHINE_TLS_CLIENT_CERT]
--tls-client-key 客户端TLS身份验证中使用的私钥[$MACHINE_TLS_CLIENT_KEY]
--github-api-token 用于请求Github API的令牌 [$MACHINE_GITHUB_API_TOKEN]
--native-ssh 使用本机(基于Go的)SSH实现 [$MACHINE_NATIVE_SSH]
--bugsnag-api-token 用于崩溃报告的BugSnag API令牌 [$MACHINE_BUGSNAG_API_TOKEN]
--help, -h 显示帮助列表
--version, -v 显示版本 Commands:
active 输出活动状态的机器
config 输出指定机器的连接配置
create 创建一个机器
env 显示docker客户端环境设置的命令
inspect 查看机器相关信息
ip 获取机器的IP地址
kill 杀死一台机器
ls 显示机器列表
provision 重现提供现有机器
regenerate-certs 为机器重新生成TLS证书
restart 重启机器
rm 移除机器
ssh 在使用SSH的机器上登录或运行命令
scp 在机器之间复制文件
mount 从具有SSHFS的计算机上装载或卸载目录
start 启动机器
status 获取机器状态
stop 暂停机器
upgrade 将计算机升级到Docker的最新版本
url 获取机器的URL
version 显示Docker Machine版本
help 显示命令的帮组列表

 重点关注创建时相关参数设置:

Options:
--driver, -d "virtualbox" Driver to create machine with. [$MACHINE_DRIVER]
--engine-env [--engine-env option --engine-env option] Specify environment variables to set in the engine
--engine-insecure-registry [--engine-insecure-registry option --engine-insecure-registry option] Specify insecure registries to allow with the created engine
--engine-install-url "https://get.docker.com" Custom URL to use for engine installation [$MACHINE_DOCKER_INSTALL_URL]
--engine-label [--engine-label option --engine-label option] Specify labels for the created engine
--engine-opt [--engine-opt option --engine-opt option] Specify arbitrary flags to include with the created engine in the form flag=value
--engine-registry-mirror [--engine-registry-mirror option --engine-registry-mirror option] Specify registry mirrors to use [$ENGINE_REGISTRY_MIRROR]
--engine-storage-driver Specify a storage driver to use with the engine
--swarm Configure Machine to join a Swarm cluster
--swarm-addr addr to advertise for Swarm (default: detect and use the machine IP)
--swarm-discovery Discovery service to use with Swarm
--swarm-experimental Enable Swarm experimental features
--swarm-host "tcp://0.0.0.0:3376" ip/socket to listen on for Swarm master
--swarm-image "swarm:latest" Specify Docker image to use for Swarm [$MACHINE_SWARM_IMAGE]
--swarm-join-opt [--swarm-join-opt option --swarm-join-opt option] Define arbitrary flags for Swarm join
--swarm-master Configure Machine to be a Swarm master
--swarm-opt [--swarm-opt option --swarm-opt option] Define arbitrary flags for Swarm master
--swarm-strategy "spread" Define a default scheduling strategy for Swarm
--tls-san [--tls-san option --tls-san option] Support extra SANs for TLS certs
#####根据driver不同参数不同######
--virtualbox-boot2docker-url The URL of the boot2docker image. Defaults to the latest available version [$VIRTUALBOX_BOOT2DOCKER_URL]
--virtualbox-cpu-count "1" number of CPUs for the machine (-1 to use the number of CPUs available) [$VIRTUALBOX_CPU_COUNT]
--virtualbox-disk-size "20000" Size of disk for host in MB [$VIRTUALBOX_DISK_SIZE]
--virtualbox-host-dns-resolver Use the host DNS resolver [$VIRTUALBOX_HOST_DNS_RESOLVER]
--virtualbox-hostonly-cidr "192.168.99.1/24" Specify the Host Only CIDR [$VIRTUALBOX_HOSTONLY_CIDR]
--virtualbox-hostonly-nicpromisc "deny" Specify the Host Only Network Adapter Promiscuous Mode [$VIRTUALBOX_HOSTONLY_NIC_PROMISC]
--virtualbox-hostonly-nictype "82540EM" Specify the Host Only Network Adapter Type [$VIRTUALBOX_HOSTONLY_NIC_TYPE]
--virtualbox-hostonly-no-dhcp Disable the Host Only DHCP Server [$VIRTUALBOX_HOSTONLY_NO_DHCP]
--virtualbox-import-boot2docker-vm The name of a Boot2Docker VM to import [$VIRTUALBOX_BOOT2DOCKER_IMPORT_VM]
--virtualbox-memory "1024" Size of memory for host in MB [$VIRTUALBOX_MEMORY_SIZE]
--virtualbox-nat-nictype "82540EM" Specify the Network Adapter Type [$VIRTUALBOX_NAT_NICTYPE]
--virtualbox-no-dns-proxy Disable proxying all DNS requests to the host [$VIRTUALBOX_NO_DNS_PROXY]
--virtualbox-no-share Disable the mount of your home directory [$VIRTUALBOX_NO_SHARE]
--virtualbox-no-vtx-check Disable checking for the availability of hardware virtualization before the vm is started [$VIRTUALBOX_NO_VTX_CHECK]
--virtualbox-share-folder Mount the specified directory instead of the default home location. Format: dir:name [$VIRTUALBOX_SHARE_FOLDER]
--virtualbox-ui-type "headless" Specify the UI Type: (gui|sdl|headless|separate) [$VIRTUALBOX_UI_TYPE]

四、参考

  machine官方说明:https://docs.docker.com/machine/

  hyper-v驱动使用说明:https://docs.docker.com/machine/drivers/hyper-v/

最新文章

  1. 【BZOJ-1009】GT考试 KMP+DP+矩阵乘法+快速幂
  2. Customizing Navigation Bar and Status Bar
  3. 从clone()谈protected
  4. Sybase常用函数
  5. Android如何获得手机power_profile.xml文件
  6. Jenkins 忘记admin密码拯救方法
  7. docker-machine on azure
  8. windows下eclipse实现操作虚拟机ubantu中的hdfs hbase
  9. Object.defineProperty的理解
  10. 使用kubeadm 安装 kubernetes 1.12.0
  11. 微软Power BI报表服务器学习总览
  12. rectangle,boundingRect和Rect
  13. vue 获取后端数据打印结果undefined问题
  14. android开发(34) 自定义 listView的分割线( 使用xml drawable画多条线)
  15. SpringMVC接受JSON参数详解及常见错误总结
  16. python之BeautifulSoup模块
  17. 【qboi冲刺NOIP2017复赛试题4】 全套题目+题解+程序
  18. Window环境配置Mongodb
  19. static变量 方法 类 和final
  20. 【CentOS 6.5】 Qt Creator 启动失败

热门文章

  1. Linux init 详解(0,1,2,3,4,5,6)
  2. laravel 500错误的一种可能
  3. [Docker] redis 全配置
  4. java9系列第二篇-资源自动关闭的语法增强
  5. 【idea&amp;spring mvc】搭建简易的spring mvc项目(基于maven)!
  6. linux wget指定下载目录和重命名
  7. Spring源码解析之基础应用(三)
  8. C++ Primer第5版 第三章课后练习
  9. HTML &lt;big&gt; 标签
  10. Signal 第一个简单Demo