设为首页 收藏本站
查看: 1140|回复: 0

[经验分享] Docker三剑客之Docker Machine

[复制链接]
发表于 2019-2-21 10:44:42 | 显示全部楼层 |阅读模式
  Docker Machine是什么
  是Docker 官方提供的一个工具,它可以帮助我们在远程的机器上安装Docker,或者在虚拟机host 上直接安装虚拟机并在虚拟机中安装Docker。
  我们还可以通过docker-machine 命令来管理这些虚拟机和Docker
  安装docker-machine命令
base=https://github.com/docker/machine/releases/download/v0.14.0 &&  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&  sudo install /tmp/docker-machine /usr/local/bin/docker-machine  官网地址:https://docs.docker.com/machine/install-machine/#install-machine-directly
  查看版本
# ll /usr/local/bin/docker-machine
-rwxr-xr-x 1 root root 28034848 6月  26 12:07 /usr/local/bin/docker-machine
# docker-machine -version
docker-machine version 0.14.0, build 89b8332  使用docker machine
  docker machine可以通过多种后端驱动来管理不同的资源,包括虚拟机,本机主机和平台等。
  管理本地主机:看下官网给的例子:
docker-machine create \
  --driver generic \
  --generic-ip-address=203.0.113.81 \
  --generic-ssh-key ~/.ssh/id_rsa \
  vm  参数

  •   --generic-engine-port: Port to use for Docker Daemon (Note: This flag does not work with boot2docker).  docker引擎的端口,默认是2376
  •   --generic-ip-address: required IP Address of host.   docker宿主机的IP地址
  •   --generic-ssh-key: Path to the SSH user private key.  SSH私钥文件路径
  •   --generic-ssh-user: SSH username used to connect.  SSH连接的用户名,该用户必须在目标宿主机上已经创建,且具有免密码的sudo权限
  •   --generic-ssh-port: Port to use for SSH.  SSH端口,默认是22
  使用docker machine的前提:


  •   在目标主机上创建一个用户并加入sudo 组
  •   为该用户设置 sudo 操作不需要输入密码
  •   把本地用户的 ssh public key 添加到目标主机上
  例如:我在测试环境中有两台机器,host1(172.16.2.14)、host2(172.16.2.3)。host1安装了docker和docker-machine。现在hosts2是一台centos7.2的云主机。
  现在我要通过docker machine在host2上安装docker引擎。
  host1 和 host2上都有ansible用户,且都有sudo权限,host1 ansible用户可以直接ssh 到host2
$ docker-machine create -d generic --generic-ssh-key ~/.ssh/id_rsa  --generic-ip-address=172.16.2.3 --generic-ssh-user=ansible testRunning pre-create checks...
Creating machine...
(test) Importing SSH key...
(test) Couldn't copy SSH public key : unable to copy ssh key: open /home/ansible/.ssh/id_rsa.pub: no such file or directory
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with centos...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env test[ansible@OPS01-LINTEST02 .ssh]$ docker-machine ls
NAME   ACTIVE   DRIVER    STATE     URL                     SWARM   DOCKER        ERRORS
test   -        generic   Running   tcp://172.16.2.3:2376           v18.05.0-ce  docker-machina 命令
  active:查看当前激活状态的Docker主机
$ docker-machine active
No active host found  config:查看到激活Docker主机的连接信息
$ docker-machine config test
--tlsverify
--tlscacert="/home/ansible/.docker/machine/machines/test/ca.pem"
--tlscert="/home/ansible/.docker/machine/machines/test/cert.pem"
--tlskey="/home/ansible/.docker/machine/machines/test/key.pem"
-H=tcp://172.16.2.3:2376  create:创建一个Docker主机
  格式:
docker-machine create [options] [arg...]--driver, -d "none" :指定驱动类型
--engine-install-url “https://get.docker.com”:配置Docker主机时候的安装URL
--engine-insecure-registry option :以键值对格式指定所创建Docker引擎的参数
--engine-registry-mirror option:指定使用注册仓库镜像
--engine-lable option:为所创建的Docker引擎添加标签
--engine-storage-driver:存储后端驱动类型
--engine-env option:指定环境变量
--swarm:指定使用Swarm
--swarm-image “swarm:latest”: 使用Swarm时采用的镜像
--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-machine create -d virtualbox \
--engine-strorage-driver overlay \
--engine-lable name=testmachine \
--engine-lable year=2018 \
--engine-opt dns=8.8.8.8 \
--engine-env HTTP_PROXY=http://proxy.com:3128 \
--engine-insecure-registry registry.private.cpm \
mydocermachine  解释:
  使用overlay类型的存储驱动
  带有name=testmachine 和 year=2018两个标签
  引擎采用8.8.8.8作为默认DNS
  环境变量中指定http代理服务http://proxy.com:3128
  允许使用不带验证的注册仓库服务registry.private.com
  env
  显示连接到某个主机时需要的环境变量
$ docker-machine env test
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://172.16.2.3:2376"
export DOCKER_CERT_PATH="/home/ansible/.docker/machine/machines/test"
export DOCKER_MACHINE_NAME="test"
# Run this command to configure your shell:
# eval $(docker-machine env test)  inspect:以json格式输出指定Docker主机的详细信息
$ docker-machine inspect test
{
    "ConfigVersion": 3,
    "Driver": {
        "IPAddress": "172.16.2.3",
        "MachineName": "test",
        "SSHUser": "ansible",
        "SSHPort": 22,
        "SSHKeyPath": "/home/ansible/.docker/machine/machines/test/id_rsa",
        "StorePath": "/home/ansible/.docker/machine",
        "SwarmMaster": false,
        "SwarmHost": "",
        "SwarmDiscovery": "",
        "EnginePort": 2376,
        "SSHKey": "/home/ansible/.ssh/id_rsa"
    },
    "DriverName": "generic",
    "HostOptions": {
        "Driver": "",
        "Memory": 0,
        "Disk": 0,
        "EngineOptions": {
            "ArbitraryFlags": [],
            "Dns": null,
            "GraphDir": "",
            "Env": [],
            "Ipv6": false,
            "InsecureRegistry": [],
            "Labels": [],
            "LogLevel": "",
            "StorageDriver": "",
            "SelinuxEnabled": false,
            "TlsVerify": true,
            "RegistryMirror": [],
            "InstallURL": "https://get.docker.com"
        },
        "SwarmOptions": {
            "IsSwarm": false,
            "Address": "",
            "Discovery": "",
            "Agent": false,
            "Master": false,
            "Host": "tcp://0.0.0.0:3376",
            "Image": "swarm:latest",
            "Strategy": "spread",
            "Heartbeat": 0,
            "Overcommit": 0,
            "ArbitraryFlags": [],
            "ArbitraryJoinFlags": [],
            "Env": null,
            "IsExperimental": false
        },
        "AuthOptions": {
            "CertDir": "/home/ansible/.docker/machine/certs",
            "CaCertPath": "/home/ansible/.docker/machine/certs/ca.pem",
            "CaPrivateKeyPath": "/home/ansible/.docker/machine/certs/ca-key.pem",
            "CaCertRemotePath": "",
            "ServerCertPath": "/home/ansible/.docker/machine/machines/test/server.pem",
            "ServerKeyPath": "/home/ansible/.docker/machine/machines/test/server-key.pem",
            "ClientKeyPath": "/home/ansible/.docker/machine/certs/key.pem",
            "ServerCertRemotePath": "",
            "ServerKeyRemotePath": "",
            "ClientCertPath": "/home/ansible/.docker/machine/certs/cert.pem",
            "ServerCertSANs": [],
            "StorePath": "/home/ansible/.docker/machine/machines/test"
        }
    },
    "Name": "test"
}  ip: 获取指定Docker主机IP
$ docker-machine ip test
172.16.2.3  kill:直接杀死指定的Docker主机,generic类型的docker主机不支持,虚拟化平台的支持
$ docker-machine kill test
Killing "test"...
generic driver does not support kill  例如:virtualbox创建的docker机器支持kill命令
~ docker-machine kill machine-test
Killing "machine-test"...
Machine "machine-test" was killed.  ls:列出所有管理的主机,支持通过--filter来过滤, 支持的过滤器包括:名称正则表达式、驱动类型、Swarm管理节点名称、状态等
$ docker-machine ls
NAME         ACTIVE   DRIVER    STATE     URL                       SWARM   DOCKER        ERRORS
aliyun-ecs   -        generic   Running   tcp://47.52.229.25:2376           v18.05.0-ce   
test         -        generic   Running   tcp://172.16.2.3:2376             v18.05.0-ce$ docker-machine ls --filter state=Running
NAME         ACTIVE   DRIVER    STATE     URL                       SWARM   DOCKER        ERRORS
aliyun-ecs   -        generic   Running   tcp://47.52.229.25:2376           v18.05.0-ce   
test         -        generic   Running   tcp://172.16.2.3:2376             v18.05.0-ce



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675244-1-1.html 上篇帖子: docker 报错 devmapper : Thin Pool-bearwxc的博客 下篇帖子: docker安装kong
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表