docker之docker-machine用法详解

 更新时间:2020年11月12日 14:22:32   作者:wadeson  
这篇文章主要介绍了docker之docker-machine用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

docker-machine 是docker官方提供的docker管理工具。

通过docker-machine可以轻松的做到:

  在Windows平台和MAC平台安装和运行docker

  搭建和管理多个docker 主机

  搭建swarm集群

环境win下面安装的virtualbox,virtualbox安装的centos7,网络模式NAT+hostonly

ip:192.168.56.102(hostonly)

1、安装docker-machine:

curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&
chmod +x /tmp/docker-machine &&
sudo cp /tmp/docker-machine /usr/local/bin/docker-machine

2、查看docker-machine版本:

# docker-machine version
[root@docker ~]# docker-machine version
docker-machine version 0.13.0, build 9ba6da9

3、在centos7环境下创建machine:

[root@localhost ~]# docker-machine create -d virtualbox default
Creating CA: /root/.docker/machine/certs/ca.pem
Creating client certificate: /root/.docker/machine/certs/cert.pem
Running pre-create checks...
Error with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path"

但是却报错了,以为virtualbox安装的centos7环境支持的是virtualbox驱动,才发现环境安装支持virtualbox驱动

使用virtualbox驱动需要安装virtualbox,而Ubuntu的解决方法为:

于是采用generic驱动,具体介绍查看官网:https://docs.docker.com/machine/drivers/generic/

[root@localhost ~]# docker-machine create -d generic --generic-ip-address=192.168.56.102 --generic-ssh-key ~/.ssh/id_rsa --

generic-ssh-user=root vm
Running pre-create checks...
Creating machine...
(vm) Importing SSH key...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Error creating machine: Error detecting OS: Too many retries waiting for SSH to be available. Last error: Maximum number of retries (60) exceeded
  --generic-ip-address=192.168.56.102:这里的ip是指本机,如果需要为其他远程docker主机安装可以改为其他docker主机ip(这里是本地创建docker-machine)

依然报错,这是由于docker-machine为本机创建machine时也需要进行ssh认证:

[root@localhost ~]# ssh-keygen
[root@localhost ~]# ssh-copy-id root@192.168.56.102

将密码发给自己,然后重新继续创建machine:

[root@localhost ~]# docker-machine create -d generic --generic-ip-address=192.168.56.102 --generic-ssh-key ~/.ssh/id_rsa --generic-ssh-user=root vm
Running pre-create checks...
Creating machine...
(vm) Importing SSH key...
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 vm

于是终于创建machine成功了

查看docker-machine:

[root@localhost ~]# docker-machine ls 
NAME ACTIVE DRIVER STATE  URL       SWARM DOCKER  ERRORS
vm  -  generic Running tcp://192.168.56.102:2376   v17.09.0-ce 

查看vm的环境变量:

[root@localhost ~]# docker-machine env vm
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.56.102:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/vm"
export DOCKER_MACHINE_NAME="vm"
# Run this command to configure your shell: 
# eval $(docker-machine env vm)

加载环境变量:

[root@localhost ~]# eval $(docker-machine env vm)

利用ssh登录到machine中:

[root@localhost ~]# docker-machine ssh --help
Usage: docker-machine ssh [arg...]
Log into or run a command on a machine with SSH.
Description:
Arguments are [machine-name] [command]
[root@localhost ~]# docker-machine ssh vm
Last login: Sat Nov 4 17:55:53 2017 from 192.168.56.102
[root@vm ~]# 

现在在本地环境创建一个容器启动:

[root@localhost ~]# docker run -d --name=nginx nginx
[root@localhost ~]# docker ps -a
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS    NAMES
6e62975fab90  nginx    "nginx -g 'daemon ..." About a minute ago Up 59 seconds  80/tcp    nginx

然后ssh远程到docker-machine中:

[root@localhost ~]# docker-machine ssh vm   
Last login: Sat Nov 4 18:13:27 2017 from 192.168.56.102
[root@vm ~]# docker ps -a
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS    NAMES
6e62975fab90  nginx    "nginx -g 'daemon ..." About a minute ago Up About a minute 80/tcp    nginx

可以看见docker主机和docker-machine主机里面的容器id相同

利用docker-machine能够安装docker和创建容器

上面是本地为自己创建machine,现在为远程的docker主机创建docker-machine:
环境:centos7,192.168.101.14,vmware下面安装的docker以及docker-machine,为192.168.56.102这台docker主机创建machine:
(两个ip不同进行了转发所以可以访问(前面是vm下面的nat的静态ip,后面是virtualbox的两张网卡(nat和host only)))

1、首先将192.168.101.14和主机192.168.56.102进行ssh连接认证:

[root@docker ~]# ssh-keygen
[root@docker ~]# ssh-copy-id root@192.168.56.102

2、创建machine:

[root@docker ~]# docker-machine create -d generic --generic-ip-address=192.168.56.102 --generic-ssh-key ~/.ssh/id_rsa --generic-ssh-user=root default
Creating CA: /root/.docker/machine/certs/ca.pem
Creating client certificate: /root/.docker/machine/certs/cert.pem
Running pre-create checks...
Creating machine...
(default) Importing SSH key...
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 default

执行环境变量,进入到machine环境:

[root@docker ~]# docker-machine env default
[root@docker ~]# eval $(docker-machine env default)

3、查看创建的machine:

[root@docker ~]# docker-machine ls
NAME  ACTIVE DRIVER STATE  URL       SWARM DOCKER  ERRORS
default -  generic Running tcp://192.168.56.102:2376   v17.09.0-ce 

可以看见在192.168.101.14环境上为远程主机192.168.56.102创建的machine

4、创建容器:

[root@docker ~]# docker run -d --name=nginx nginx(本地没有nginx镜像)
b1f08986f6d5dbb1ede699e915bde734bab278fbe70f93af06ec2267fae2fef3
[root@docker ~]# docker ps -a
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS    NAMES
b1f08986f6d5  nginx    "nginx -g 'daemon ..." 4 seconds ago  Up 3 seconds  80/tcp    nginx
5、ssh到machine:
[root@docker ~]# docker-machine ssh default
Last login: Sat Nov 4 18:51:49 2017 from 192.168.56.1
[root@default ~]# docker ps -a
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS    NAMES
b1f08986f6d5  nginx    "nginx -g 'daemon ..." 23 seconds ago  Up 22 seconds  80/tcp    nginx

现在查看远程主机是否创建了容器:

[root@localhost ~]# docker ps -a
could not read CA certificate "/root/.docker/machine/machines/default/ca.pem": open /root/.docker/machine/machines/default/ca.pem: no such file or directory

报错原因:

由于刚刚在192.168.56.102为自己设置了machine,保留了之前machine的环境变量,虽然现在删除了,但是设置了环境变量,将刚刚设置的环境变量取消:

[root@localhost ~]# unset DOCKER_TLS_VERIFY
[root@localhost ~]# unset DOCKER_CERT_PATH
[root@localhost ~]# unset DOCKER_MACHINE_NAME
[root@localhost ~]# unset DOCKER_HOST

然后重新查看:

[root@localhost ~]# docker ps -a
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS    NAMES
b1f08986f6d5  nginx    "nginx -g 'daemon ..." 8 minutes ago  Up 8 minutes  80/tcp    nginx

可以发现,为远程主机创建容器成功

现在192.168.101.14上面存在镜像centos_nginx:v4,而远程主机192.168.56.102没有该镜像,现在创建容器,看是否远程主机能够创建成功?

[root@docker ~]# docker pull registry.cn-hangzhou.aliyuncs.com/wadeson/jsonhc:v4
[root@docker ~]# docker images
REPOSITORY           TAG     IMAGE ID   CREATED    SIZE
nginx            latest    b72d63324dbb  13 hours ago  108MB
registry.cn-hangzhou.aliyuncs.com/wadeson/jsonhc v4     6c5128aaff05  2 days ago   464MB

然后在远程主机查看:

[root@localhost ~]# docker images
REPOSITORY           TAG     IMAGE ID   CREATED    SIZE
nginx            latest    b72d63324dbb  13 hours ago  108MB
registry.cn-hangzhou.aliyuncs.com/wadeson/jsonhc v4     6c5128aaff05  2 days ago   464MB

可以看见两主机的镜像同步,也是容器也是同步的

vm下面的docker可以为virtualbox下面的docker创建容器
而更多的是本地可以为云等其他环境创建容器,通过docker-machine

在这之前192.168.101.14的images都不见了,那是因为设置machine环境变量:

unset DOCKER_TLS_VERIFY
unset DOCKER_CERT_PATH
unset DOCKER_MACHINE_NAME
unset DOCKER_HOST

执行上面将machine的环境变量取消就可以返回原来的环境了:

[root@docker ~]# docker images
REPOSITORY           TAG     IMAGE ID   CREATED    SIZE
centos_init          v1     383ff3502443  26 hours ago  448MB
centos_nginx          v8     6f792dc07c35  2 days ago   464MB
centos_nginx          v7     9e875385d6be  2 days ago   464MB
centos_nginx          v6     959fdf4d4288  2 days ago   464MB
centos_nginx          v5     5c1131306686  2 days ago   464MB
registry.cn-hangzhou.aliyuncs.com/wadeson/jsonhc v4     6c5128aaff05  2 days ago   464MB
192.168.101.14:5000/centos_nginx     v4     6c5128aaff05  2 days ago   464MB
centos_nginx          v4     6c5128aaff05  2 days ago   464MB
centos_nginx          v3     0e49a2c0562f  2 days ago   464MB
centos_nginx          v2     2031faf8894a  2 days ago   464MB
centos_nginx          v1     78d18f16e757  3 days ago   464MB
registry           latest    2ba7189700c8  9 days ago   33.3MB
ubuntu            latest    747cb2d60bbe  3 weeks ago   122MB
centos            latest    196e0ce0c9fb  7 weeks ago   197MB

而如果需要返回machine环境就继续执行machine环境变量就行,这种方式很好的隔离了本地和远程镜像和容器

到此这篇关于docker之docker-machine用法详解的文章就介绍到这了,更多相关docker machine 用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 教你如何利用docker-maven-plugin自动化部署

    教你如何利用docker-maven-plugin自动化部署

    本文通过两个例子给大家讲解如何利用docker-maven-plugin自动化部署,给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-09-09
  • 基于docker部署skywalking实现全链路监控功能

    基于docker部署skywalking实现全链路监控功能

    这篇文章主要介绍了基于docker部署skywalking实现全链路监控,skywalking提供了在很多不同的场景下用于观察和监控分布式系统的方式,文中给大家介绍如何快速部署skywalking全链路监控,感兴趣的朋友一起看看吧
    2022-03-03
  • docker自定义镜像构建php7的方法

    docker自定义镜像构建php7的方法

    这篇文章主要介绍了docker自定义镜像构建php7的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 详解Docker 容器基础系统镜像打包

    详解Docker 容器基础系统镜像打包

    这篇文章主要介绍了详解Docker 容器基础系统镜像打包,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 基于docker的caffe环境搭建方法

    基于docker的caffe环境搭建方法

    这篇文章主要介绍了基于docker的caffe环境搭建方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Docker 入门快速上手指南

    Docker 入门快速上手指南

    本篇文章主要介绍了详解Docker 快速上手指南,记录 Docker 中的常用操作、指令,使得大家能够快速地使用 Docker。
    2017-03-03
  • Docker 部署 MongoDB容器的方法

    Docker 部署 MongoDB容器的方法

    Docker就可以帮助我们将开发的应用程序,以及该程序的依赖包都打包在一个文件里,下面通过本文给大家分享Docker 部署 MongoDB的详细教程,感兴趣的朋友一起看看吧
    2021-06-06
  • 解决nacos启动时防火墙开启8848的坑

    解决nacos启动时防火墙开启8848的坑

    最近操作Nacos时遭遇8848端口无法访问的问题,尝试通过安全组和firewall配置仍无法解决,最终发现,firewall对Docker使用专门的作用域,需要在相应作用域下开放端口,务必检查firewall中针对Docker的设置,确保8848端口在正确的作用域内被允许通行
    2022-10-10
  • Docker快速部署国产达梦数据库的实现示例

    Docker快速部署国产达梦数据库的实现示例

    本文主要介绍了Docker快速部署国产达梦数据库的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 使用docker搭建gitlab详解

    使用docker搭建gitlab详解

    本篇文章主要介绍了使用docker搭建gitlab详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02

最新评论