Docker学习—Machine
前言
前面《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支持机器驱动程序
- 亚马逊网络服务
- 微软Azure
- 数字海洋
- 外标
- 泛型
- Google Compute Engine
- Linode(非官方插件,Docker不支持)
- Microsoft Hyper-V
- OpenStack的
- 机架空间
- IBM软层
- 甲骨文VirtualBox
- VMware vCloud Air
- VMware融合
- VMware vSphere
- VMware Workstation(非官方插件,Docker不支持)
- Grid 5000(非官方插件,Docker不支持)
- Scaleway(非官方插件,Docker不支持)
- Hetzner Cloud(非官方插件,Docker不支持)
- ArvanCloud(非官方插件,Docker不支持)
二、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/
Docker学习—Machine的更多相关文章
- Docker学习—Swarm
		前言: 前一篇<Docker学习-Machine>中对Machine 进行了学习,本篇继续学习Swarm,那么Swarm是什么呢,有什么用呢?接下来一步步了解. 一.什么是Docker-S ... 
- DOCKER 学习笔记7 Docker Machine 在阿里云实例化ECS 以及本地Windows 实例化虚拟机实战
		前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ... 
- DOCKER 学习笔记7 Docker Machine 建立虚拟机实战,以及错误总结
		前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ... 
- Docker学习总结
		本文作为总结性文章,不会详细讲解Docker.但会把已学习的.了解的内容按照由易到难的顺序串起来,更多的是帮助Docker新手快速的了解Docker,知道目前处在哪个阶段,接下来该学些什么,避免碰太多 ... 
- docker学习笔记-1
		docker学习笔记一:安装 mac安装docker docker官方文档上有这么一段话: Because the Docker daemon uses Linux-specific kernel f ... 
- DOCKER学习心得
		原文:DOCKER学习心得 前言: Docker的主要学习心得来源于<docker技术入门与实战> --2019.1.1->2019.1.5 la 着重从基础部分--实例分析-- ... 
- Docker学习—Compose
		前言 前面<Docker学习-DockerFile>文中介绍了dockerfile相关的语法,及使用方式:接下来了解docker三剑客之一的 Compose:接下来详细学习. 一.dock ... 
- Docker学习笔记 — 配置国内免费registry mirror
		Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror 
- Windows 下安装使用docker swarm machine docker toolbox
		下载docker 集成安装环境 http://get.daocloud.io/#install-toolbox 这个网站很不错,下载 这个集成了 docker docker-machine ,还有gi ... 
随机推荐
- Centos7系统下Docker开启认证的远程端口2376配置教程
			docker开启2375会存在安全漏洞 暴露了2375端口的Docker主机.因为没有任何加密和认证过程,知道了主机IP以后,,任何人都可以管理这台主机上的容器和镜像,以前贪图方便,只开启了没有认证的 ... 
- 如何让矢量瓦片配图神器maputnik支持 geoserver
			关键词:maputnik.geoserver.矢量地图.矢量瓦片.mapbox.mapboxgl.地图配图.地图配色 一直想搞一个类似百度.高德地图那样的矢量地图配图工具 百度个性化地图配图工具: 高 ... 
- day23 Pyhton学习 昨日回顾.re模块.序列化模块
			一.昨日回顾 #__file__查看当前文件所在的绝对路径 #time 时间模块 time.time 获取当前时间戳时间 字符串->time.strptime->结构化->mktim ... 
- day69:Vue:组件化开发&Vue-Router&Vue-client
			目录 组件化开发 1.什么是组件? 2.局部组件 3.全局组件 4.父组件向子组件传值 5.子组件往父组件传值 6.平行组件传值 Vue-Router的使用 Vue自动化工具:Vue-Client 组 ... 
- 转 RabbitMQ 入门教程(PHP版) 使用rabbitmq-delayed-message-exchange插件实现延迟功能
			延迟任务应用场景 场景一:物联网系统经常会遇到向终端下发命令,如果命令一段时间没有应答,就需要设置成超时. 场景二:订单下单之后30分钟后,如果用户没有付钱,则系统自动取消订单. 场景三:过1分钟给新 ... 
- spring boot:多个filter/多个interceptor/多个aop时设置调用的先后顺序(spring boot 2.3.1)
			一,filter/interceptor/aop生效的先后顺序? 1,filter即过滤器,基于servlet容器,处于最外层, 所以它会最先起作用,最后才停止 说明:filter对所有访问到serv ... 
- linux  mount挂载命令
			[root@localhost src]# mount 查询系统中已经挂载的设备 [root@localhost src]# mount -a 依据配置文件 /etc/fstab的内容,自动挂载 
- ThreadLocal与Thread与Runable之间的关系
			ThreadLocal继承Object,相当于没继承任何特殊的. ThreadLocal没有实现任何接口. ThreadLocal并不是一个Thread,而是Thread的局部变量 
- PS模式编辑
			5.1PS灰度模式 (1)灰度模式:最多包含256种灰度的8位图像. (2)模式含义:不同模式对颜色的分类甚至种类都不一样,可以理解为格式不一样. (3)灰度模式:可以在去RGB格式下去色处理达到利斯 ... 
- php7.1安装openssl扩展
			1,进入到PHP源码目录中的ext中的openssl目录 2,phpize 3,./configure --with-openssl --with-php-config=/usr/local/php/ ... 
