当前位置: 首页 > 工具软件 > docker-osx > 使用案例 >

Mac Windows Linux 上docker-machine 安装及使用以及参数

郑嘉年
2023-12-01

docker-machine

由docker官方提出的,用于在各种平台上快速创建具有docker服务的虚拟机的技术,甚至可以通过指定driver来定制虚拟机的实现原理(一般是virtualbox)
Docker Machine 是安装和管理 Docker 的工具。它有命令行工具:docker-machine。

安装

1.MACOS安装
    可以直接在dockerhub上下载桌面版 Desktop for Mac for mac  (https://docs.docker.com/docker-for-mac/) 与 最新的VirtualBox(https://download.virtualbox.org/virtualbox/6.0.10/VirtualBox-6.0.10-132072-OSX.dmg)  后面这个是为了虚拟化

2. windows安装
    可以直接在dockerhub上下载桌面版 Desktop for Mac for windows https://docs.docker.com/docker-for-windows/ 与最新的Microsoft Hyper-V (https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/index) 后面这个是为了虚拟化

3. linux安装
     1.curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine 
     2. chmod +x /tmp/docker-machine 
     3. cp /tmp/docker-machine /usr/local/bin/docker-machine
     下面需要检查安装virtulenv
     4.vim  /etc/yum.repos.d/virtualbox.repo 
        [virtualbox]
        name=Oracle Linux / RHEL / CentOS-$releasever / $basearch - VirtualBox
        baseurl=http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch
        enabled=1
        gpgcheck=0
        repo_gpgcheck=0
        gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
    5. yum search VirtualBox // 查找具体安装版本
    6. yum install -y VirtualBox-6.0  #安装指定版本 注意内核版本要一致
    7. /sbin/vboxconfig   //重新加载virtualbox服务
    8.docker-machine create --driver virtualbox default //创建默认测试
    9.//接下来配置环境变量,方便后面直接操作主机
        docker-machine env default
        eval $(docker-machine env default)
        docker-machine env default

命令及其使用等

docker-machine command
active //查看活跃的 Docker 主机
config //输出连接的配置信息
create //创建一个 Docker 主机
env //显示连接到某个主机需要的环境变量
inspect //输出主机更多信息
ip //获取主机地址
kill //停止某个主机
ls //列出所有管理的主机
provision //重新设置一个已存在的主机
regenerate-certs //为某个主机重新生成 TLS 认证信息
restart //重启主机
rm //删除某台主机
ssh SSH //到主机上执行命令
scp //在主机之间复制文件
mount //挂载主机目录到本地
start // 启动一个主机
status // 查看主机状态
stop //停止一个主机
upgrade //更新主机 Docker 版本为最新
url //获取主机的 URL
version //输出 docker-machine 版本信息
help //输出帮助信息

linux使用等 几乎等同于mac使用

docker-machine env default //查看设置的default虚拟主机环境变量等 亦也可修改

docker-machine ssh default // 链接default虚拟主机
 
使用docker-machine create 后带参数:
    --generic-engine-port:                               用于Docker守护进程的端口(注意:此标志不适用于boot2docker)。  默认2376
    
    --generic-ip-address:                                主机所需IP地址。
    
    --generic-ssh-key:                                   SSH用户私钥的路径。
    
    --generic-ssh-user:                                  用于连接的SSH用户名。 默认root
    
    --generic-ssh-port:                                  用于SSH的端口。默认22
    
    --gengine-install-url "https://get.docker.com"       配置Docker主机时候的安装URL
    
    --gengine-opt option                                 以键值对格式指定所创建Docker引擎的参数
    
    --gengine-insecure-registry option                   以键值对格式指定所创建Docker引擎允许访问的不支持认证的注册仓库服务
    
    --gengine-registry-mirror option                     指定使用注册仓库镜像
    
    --gengine-label option                               为所创建的Docker引擎添加标签
    
    --gengine-storage-driver                             存储后端驱动类型
    
    --gengine-env option                                 指定环境变量
    
    --gswarm                                             指定使用Swarm
    
    --gswarm-image “swarm:latest”                        使用Swarm时候采用的镜像
    
    --gswarm-master                                      配置集群作为Swarm集群的master节点
    
    --gswarm-discovery                                   Swarm 集群的服务发现机制参数
    
    --gswarm-strategy “spread”                           Swarm默认调度策略
    
    --gswarm-opt option                                  任意传递给Swarm的参数
    
    --gswarm-host "tcp://0.0.0.0:3376"                   指定地址将监听Swarm master节点请求
    
    --gswarm-addr                                        从指定地址发送广播加入Swarm集群服务

mac使用

测试创建默认 使用virtualbox
    docker-machine create --driver virtualbox default
测试创建默认 通过导入VM将Boot2Docker VM转换为计算机。要转换Boot2Docker VM
    docker-machine create -d virtualbox --virtualbox-import-boot2docker-vm boot2docker-vm dafault
测试创建默认 配置VM磁盘的大小
    docker-machine create -d virtualbox --virtualbox-disk-size "100000" default

选项
    --virtualbox-boot2docker-url:          boot2docker镜像的URL。默认为最新的可用版本。
    --virtualbox-cpu-count:                用于创建VM的CPU数。默认为单CPU。
    --virtualbox-disk-size:                主机的磁盘大小(MB)。
    --virtualbox-host-dns-resolver:        使用主机DNS解析程序。(布尔值,默认为false)
    --virtualbox-hostonly-cidr:            仅主机适配器的CIDR。
    --virtualbox-hostonly-nicpromisc:      仅主机网络适配器混杂模式。可能的选项是deny,allow-vms,allow-all
    --virtualbox-hostonly-nictype:         仅主机网络适配器类型。可能的值为'82540EM'(英特尔PRO / 1000),'Am79C973'(PCnet-FAST III)和'virtio'半虚拟化网络适配器。
    --virtualbox-hostonly-no-dhcp:         禁用仅主机DHCP服务器
    --virtualbox-import-boot2docker-vm:    要导入的Boot2Docker VM的名称。
    --virtualbox-memory:                   主机的内存大小(MB)。
    --virtualbox-nat-nictype:              指定NAT网络适配器类型。可能的值为'82540EM'(英特尔PRO / 1000),'Am79C973'(PCnet-FAST III)和'virtio'半虚拟化网络适配器。
    --virtualbox-no-dns-proxy:             禁用代理到主机的所有DNS请求(布尔值,默认为false)
    --virtualbox-no-share:                 禁用主目录的安装
    --virtualbox-no-vtx-check:             在启动vm之前禁用检查硬件虚拟化的可用性
    --virtualbox-share-folder:             挂载指定的目录而不是默认的home位置。
    --virtualbox-ui-type:                  指定UI类型:(gui	SDL	无头	分离)

环境变量和默认值
    CLI选项	                                环境变量	                             默认
    --virtualbox-boot2docker-url	        VIRTUALBOX_BOOT2DOCKER_URL	         最新的boot2docker网址
    --virtualbox-cpu-count	                VIRTUALBOX_CPU_COUNT	             1
    --virtualbox-disk-size	                VIRTUALBOX_DISK_SIZE	             20000
    --virtualbox-host-dns-resolver	        VIRTUALBOX_HOST_DNS_RESOLVER	     false
    --virtualbox-hostonly-cidr	            VIRTUALBOX_HOSTONLY_CIDR	         192.168.99.1/24
    --virtualbox-hostonly-nicpromisc	    VIRTUALBOX_HOSTONLY_NIC_PROMISC	     deny
    --virtualbox-hostonly-nictype	        VIRTUALBOX_HOSTONLY_NIC_TYPE	     82540EM
    --virtualbox-hostonly-no-dhcp	        VIRTUALBOX_HOSTONLY_NO_DHCP	         false
    --virtualbox-import-boot2docker-vm	    VIRTUALBOX_BOOT2DOCKER_IMPORT_VM	 boot2docker-vm
    --virtualbox-memory	                    VIRTUALBOX_MEMORY_SIZE	            1024
    --virtualbox-nat-nictype	            VIRTUALBOX_NAT_NICTYPE	            82540EM
    --virtualbox-no-dns-proxy	            VIRTUALBOX_NO_DNS_PROXY	            false
    --virtualbox-no-share	                VIRTUALBOX_NO_SHARE	                false
    --virtualbox-no-vtx-check	            VIRTUALBOX_NO_VTX_CHECK	            false
    --virtualbox-share-folder	            VIRTUALBOX_SHARE_FOLDER	            -
    --virtualbox-ui-type	                VIRTUALBOX_UI_TYPE	                headless

windows使用

测试创建默认
docker-machine create --driver hyperv vm

参数选项:
    --hyperv-boot2docker-url:          boot2docker ISO的URL。
    --hyperv-virtual-switch:           要使用的虚拟交换机的名称。
    --hyperv-disk-size:                主机的磁盘大小(MB)。
    --hyperv-memory:                   主机的内存大小(MB)。
    --hyperv-cpu-count:                主机的CPU数量。
    --hyperv-static-macaddress:        Hyper-V网络适配器的静态MAC地址。
    --hyperv-vlan-id:                  Hyper-V网络适配器的VLAN ID(如果有)。
    --hyperv-disable-dynamic-memory:   禁用动态内存管理。
环境变量和默认值
    CLI选项	                            环境变量	                             默认
    --hyperv-boot2docker-url      	    HYPERV_BOOT2DOCKER_URL   	         最新的boot2docker网址
    --hyperv-cpu-count           	    HYPERV_CPU_COUNT	                 1
    --hyperv-disk-size           	    HYPERV_DISK_SIZE	                 20000
    --hyperv-memory	                    HYPERV_MEMORY                        1024
    --hyperv-static-macaddress    	    HYPERV_STATIC_MACADDRESS	         未定义
    --hyperv-virtual-switch      	    HYPERV_VIRTUAL_SWITCH	             第一次发现
    --hyperv-vlan-id             	    HYPERV_VLAN_ID	                     未定义
    --hyperv-disable-dynamic-memory	    HYPERV_DISABLE_DYNAMIC_MEMORY	     false

远程部署docker环境

先配置好免密登陆
0) 测试docker-machine是否可行 创建一个默认的
    1. docker-machine create -d virtualbox default 或者 docker-machine create --driver virtualbox default
    
1) ssh -t rsa // 然后一直空格

2) sudo -i //进入root

3) ssh-copy-id <需要配置的远程主机ip>  // 示范 ssh-copy-id 192.168.33.119

4) 1.  //为本地下载更多镜像源,避免在创建machine时找不到软件包

5) 配置docker ca以及开放端口   //必须步骤
        1、创建ca文件夹,存放CA私钥和公钥
            mkdir -p /usr/local/ca
            cd /usr/local/ca/
            
        2、创建密码
            需要连续输入两次相同的密码
            openssl genrsa -aes256 -out ca-key.pem 4096
            
        3、依次输入密码、国家、省、市、组织名称等
            openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
            
        4、生成server-key.pem
            openssl genrsa -out server-key.pem 4096
            
        5、把下面的IP换成你自己服务器外网的IP或者域名
            openssl req -subj "/CN=192.168.33.224" -sha256 -new -key server-key.pem -out server.csr
            
        6、配置白名单
            0.0.0.0表示所有ip都可以连接(但只有拥有证书的才可以连接成功)
            echo subjectAltName = IP:192.168.33.224,IP:0.0.0.0 >> extfile.cnf
            
        7、执行命令,将Docker守护程序密钥的扩展使用属性设置为仅用于服务器身份验证
            echo extendedKeyUsage = serverAuth >> extfile.cnf
            
        8、执行命令,并输入之前设置的密码,生成签名证书
            openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out server-cert.pem -extfile extfile.cnf
            
        9、生成客户端的key.pem,到时候把生成好的几个公钥私钥拷出去即可
            openssl genrsa -out key.pem 4096
            
        10、执行命令
            openssl req -subj '/CN=client' -new -key key.pem -out client.csr
            
        11、执行命令,要使密钥适合客户端身份验证,请创建扩展配置文件
            echo extendedKeyUsage = clientAuth >> extfile.cnf
            
        12、生成cert.pem,需要输入前面设置的密码,生成签名证书
            openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out cert.pem -extfile extfile.cnf
            
        13、删除不需要的文件,两个证书签名请求
            rm -rfv client.csr server.csr
            
        14、修改权限,要保护您的密钥免受意外损坏,请删除其写入权限。要使它们只能被您读取,更改文件模式
            chmod -v 0400 ca-key.pem key.pem server-key.pem
            
        证书可以是对外可读的,删除写入权限以防止意外损坏
            chmod -v 0444 ca.pem server-cert.pem cert.pem
            
        15、归集服务器证书
            cp server-*.pem  /etc/docker/
            cp ca.pem /etc/docker/
            
        16、修改Docker配置,使Docker守护程序仅接受来自提供CA信任的证书的客户端的连接
            vim /lib/systemd/system/docker.service
            ExecStart=/usr/bin/dockerd 下面增加
        
            --tlsverify \
            
            --tlscacert=/etc/docker/ca.pem \
            
            --tlscert=/etc/docker/server-cert.pem \
            
            --tlskey=/etc/docker/server-key.pem \
            
            -H tcp://0.0.0.0:2376 \
        
            -H unix:///var/run/docker.sock \
            
        17、重新加载daemon并重启docker
            systemctl daemon-reload 
            systemctl restart docker
            
        18、开放2376端口 开启machine通讯端口  //重中之重
            1. firewall-cmd --add-port=2376/tcp --permanent
            2. firewall-cmd --reload
            
        19、重启docker
            service docker restart
        
    
    
6) 给远程部署(远程机器为centos7.4 若为同系统最好) docker-machine create -d generic --generic-ip-address=192.168.199.108 host108  
    
    或者添加用户参数 docker-machine create --driver generic  --generic-ssh-key=${HOME}/.ssh/id_rsa --generic-ssh-user=${HOME} --generic-ip-address=192.168.199.108  host108

7) 变更远程docker环境变量
    1.docker-machine env host108
    显示:
    
    2.eval $(docker-machine env host108)

8)可以ssh远程查看是否镜像与容器同步运行 // docker-machine创建前的本机镜像和容器不会同步 创建后的会自动同步

注意:1.一定要开放对方的2376端口 不然会报错 
     2. 可以在将要安装的机器上修改 vi /etc/sudoers 添加上
        {name}(docker-machine使用的名字)    ALL=(ALL) NOPASSWD: ALL 例如 liuxin ALL=(ALL) NOPASSWD: ALL 
     3. 若一旦设定了docker-machine主从关联之后 若从机关机 主机docker将不能更新/删除/下载等   会卡死   
        
 类似资料: