Py学习  »  docker

容器技术|Docker三剑客之docker-machine

柚子露 • 5 年前 • 319 次点击  

上一篇: 容器技术|Docker三剑客之Compose

Docker-machine是什么?

docker-machine就是docker公司官方提出的,用于在各种平台上快速创建具有docker服务的虚拟机的技术,甚至可以通过指定driver来定制虚拟机的实现原理(一般是virtualbox)。

Docker 与 Docker Machine 的区别

Docker 是一个 Client-Server 架构的应用,Docker是大家对Docker Engine简称。

Docker包括以下三个部分:

1、Docker daemon2、一套与 Docker daemon 交互的 REST API3、一个命令行客户端下图很清晰的展示了它们之间的关系:

Docker Machine 是安装和管理 Docker 的工具。它有命令行工具:docker-machine。

docker-machine安装

[root@master ~]# curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed100   617    0   617    0     0    390      0 --:--:--  0:00:01 --:--:--   390100 26.7M  100 26.7M    0     0  1618k      0  0:00:16  0:00:16 --:--:-- 3622k[root@master ~]# chmod +x /tmp/docker-machine [root@master ~]# cp /tmp/docker-machine /usr/local/bin/docker-machine[root@master ~]# ll /usr/local/bin/docker-machine -rwxr-xr-x 1 root root 28034848 6月  12 15:24 /usr/local/bin/docker-machine[root@master ~]# docker-machine -vdocker-machine version 0.14.0, build 89b8332

docker-machine命令

[root@master ~]# docker-machine --helpUsage: docker-machine [OPTIONS] COMMAND [arg...]Create and manage machines running Docker.Version: 0.14.0, build 89b8332Author:  Docker Machine Contributors - <https://github.com/docker/machine>Options:  --debug, -D                    Enable debug mode  --storage-path, -s "/root/.docker/machine"    Configures storage path [$MACHINE_STORAGE_PATH]  --tls-ca-cert                 CA to verify remotes against [$MACHINE_TLS_CA_CERT]  --tls-ca-key                     Private key to generate certificates [$MACHINE_TLS_CA_KEY]  --tls-client-cert                 Client cert to use for TLS [$MACHINE_TLS_CLIENT_CERT]  --tls-client-key                 Private key used in client TLS auth [$MACHINE_TLS_CLIENT_KEY]  --github-api-token                 Token to use for requests to the Github API [$MACHINE_GITHUB_API_TOKEN]  --native-ssh                    Use the native (Go-based) SSH implementation. [$MACHINE_NATIVE_SSH]  --bugsnag-api-token                 BugSnag API token for crash reporting [$MACHINE_BUGSNAG_API_TOKEN]  --help, -h                    show help  --version, -v                    print the versionCommands:  active        Print which machine is active  config        Print the connection config for machine  create        Create a machine  env            Display the commands to set up the environment for the Docker client  inspect        Inspect information about a machine  ip            Get the IP address of a machine  kill            Kill a machine  ls            List machines  provision        Re-provision existing machines  regenerate-certs    Regenerate TLS Certificates for a machine  restart        Restart a machine  rm            Remove a machine  ssh            Log into or run a command on a machine with SSH.  scp            Copy files between machines  mount            Mount or unmount a directory from a machine with SSHFS.  start            Start a machine  status        Get the status of a machine  stop            Stop a machine  upgrade        Upgrade a machine to the latest version of Docker  url            Get the URL of a machine  version        Show the Docker Machine version or a machine docker version  help            Shows a list of commands or help for one commanddocker-machine active#显示当前的活动主机docker-machine config#显示连接主机的配置docker-machine create#创建一个主机docker-machine env#设置当前的环境与哪个主机通信docker-machine inspect#查看主机的详细信息docker-machine ip#查看主机的IP docker-machine kill#强制关闭一个主机docker-machine ls #查看所有的主机信息docker-machine provision#重新配置现在主机docker-machine regenerate-certs#为主机重新生成证书docker-machine restart#重启主机docker-machine rm#删除主机docker-machine ssh#以SSH的方式连接到主机上docker-machine scp#远程复制docker-machine status#查看主机的状态docker-machine stop#停止一个正在运行的主机docker-machine upgrade#升级主机的docker服务到最新版本docker-machine version#查看docker-machine版本

常用实例操作

[root@master ~]# docker-machine create -d virtualbox testhost[root@master ~]# docker-machine create --driver virtualbox testhost#两个命令的作用相同,创建一个名为testhost的主机,驱动方式是virtualbox[root@master ~]# docker-machine create -d virtualbox testhostCreating CA: /root/.docker/machine/certs/ca.pemCreating client certificate: /root/.docker/machine/certs/cert.pemRunning pre-create checks...Error with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path"#报错提示没有发现VBoxManage。因此,需要手工安装,具体安装操作如下。

安装Virtualbox驱动

1、配置Yum源[root@master ~]# vim  /etc/yum.repos.d/virtualbox.repo [virtualbox]name=Oracle Linux / RHEL / CentOS-$releasever / $basearch - VirtualBoxbaseurl=http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearchenabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc2、查看可安装的版本[root@master ~]# yum search VirtualBox   #查找具体安装版本已加载插件:fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.163.com * epel: mirrors.ustc.edu.cn * extras: centos.ustc.edu.cn * updates: centos.ustc.edu.cn============== N/S matched: VirtualBox ===================================VirtualBox-4.3.x86_64 : Oracle VM VirtualBoxVirtualBox-5.0.x86_64 : Oracle VM VirtualBoxVirtualBox-5.1.x86_64 : Oracle VM VirtualBoxVirtualBox-5.2.x86_64 : Oracle VM VirtualBox[root@master ~]# yum install -y VirtualBox-5.2  #安装3、加载virtualbox[root@master ~]# /sbin/vboxconfig   #重新加载virtualbox服务vboxdrv.sh: Stopping VirtualBox services.vboxdrv.sh: Building VirtualBox kernel modules.This system is currently not set up to build kernel modules.Please install the Linux kernel "header" files matching the current kernelfor adding new hardware support to the system.The distribution packages containing the headers are probably:    kernel-devel kernel-devel-3.10.0-693.el7.x86_64This system is currently not set up to build kernel modules.Please install the Linux kernel "header" files matching the current kernelfor adding new hardware support to the system.The distribution packages containing the headers are probably:    kernel-devel kernel-devel-3.10.0-693.el7.x86_64There were problems setting up VirtualBox.  To re-start the set-up process, run  /sbin/vboxconfigas root.#如果内核版本不一致,会出现上面的报错,需要安装相同的内核版本4、安装对应的内核版本[root@master ~]# rpm -ivh kernel-devel-3.10.0-693.el7.x86_64.rpm 准备中...                          ################################# [100%]正在升级/安装...   1:kernel-devel-3.10.0-693.el7   ################################# [100%][root@slave1 ~]# yum install gcc make perl -y[root@slave1 ~]# rpm -qa kernel\*kernel-tools-3.10.0-693.el7.x86_64kernel-devel-3.10.0-693.el7.x86_64kernel-tools-libs-3.10.0-693.el7.x86_64kernel-3.10.0-693.el7.x86_64kernel-headers-3.10.0-862.3.2.el7.x86_64[root@slave1 ~]# /sbin/vboxconfig vboxdrv.sh: Stopping VirtualBox services.vboxdrv.sh: Building VirtualBox kernel modules.vboxdrv.sh: Starting VirtualBox services.

重新安装




    
[root@centos7 ~]# docker-machine create --driver virtualbox testhostRunning pre-create checks...Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory"#这个报错不用解释了吧,没有开启虚拟化功能,直接打开[root@centos7 ~]# docker-machine create --driver virtualbox defaultRunning pre-create checks...(default) No default Boot2Docker ISO found locally, downloading the latest release...(default) Latest release for github.com/boot2docker/boot2docker is v18.05.0-ce(default) Downloading /root/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v18.05.0-ce/boot2docker.iso...(default) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%Creating machine...(default) Copying /root/.docker/machine/cache/boot2docker.iso to /root/.docker/machine/machines/default/boot2docker.iso...(default) Creating VirtualBox VM...(default) Creating SSH key...(default) Starting the VM...(default) Check network to re-create if needed...(default) Found a new host-only adapter: "vboxnet0"(default) Waiting for an IP...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 boot2docker...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#可以先安装个默认的虚拟机[root@centos7 ~]# docker-machine lsNAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORSdefault   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.05.0-ce   [root@centos7 ~]# docker-machine statusRunning

接下来配置环境变量,方便后面直接操作主机

[root@centos7 ~]# docker-machine env defaultexport DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.100:2376"export DOCKER_CERT_PATH="/root/.docker/machine/machines/default"export DOCKER_MACHINE_NAME="default"# Run this command to configure your shell: # eval $(docker-machine env default)[root@centos7 ~]#  eval $(docker-machine env default)#连接虚拟主机[root@centos7 ~]# docker-machine ssh default                        ##         .                  ## ## ##        ==               ## ## ## ## ##    ===           /"""""""""""""""""\___/ ===      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~           \______ o           __/             \    \         __/              \____\_______/ _                 _   ____     _            _| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ ||_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|Boot2Docker version 18.05.0-ce, build HEAD : b5d6989 - Thu May 10 16:35:28 UTC 2018Docker version 18.05.0-ce, build f150324docker@default:~$ docker --versionDocker version 18.05.0-ce, build f150324#正常进入虚拟机

实例

两台服务器本地主机:192.168.22.177远程主机:192.168.22.175可能大家还是不太明白,这个docker-machine到底有什么用?docker容器的好处都知道了。而docker-machine可以在本地布署相应环境的同时完成远程docker主机相同环境的布署,减少重复的操作。

1、配置免密登录
[root@test001 ~]# ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'.Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:SHA256:7Ue0bc08pEs+PonJqy7/hyxUhNO4uEegVizX4EJC8J8 root@centos7.3The key's randomart image is:+---[RSA 2048]----+| .oo ...o +      ||  . o..= = o     ||   . .=.o + .  . ||    .oo. + o oo+ ||    .E  S o ooo.+||       . + .o.. .||        o + =+.  ||       . . B.+.  ||        +++oo..  |+----[SHA256]-----+[root@centos7 ~]# ssh-copy-id 192.168.22.175/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"The authenticity of host '192.168.22.175 (192.168.22.175)' can't be established.ECDSA key fingerprint is SHA256:p6+FPeTxTUx37cwJWJP8cUE9NhcUHSvAppVPyj4aj8c.ECDSA key fingerprint is MD5:89:6d:f7:46:11:45:2e:fd:21:87:42:bd:62:06:fe:fd.Are you sure you want to continue connecting (yes/no)? yes/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keysroot@192.168.22.175's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh '192.168.22.175'"and check to make sure that only the key(s) you wanted were added.[root@test001 ~]# ssh 192.168.22.175Last login: Tue Apr 24 06:51:06 2018 from 192.168.22.170[root@test002 ~]# ip add |grep 192.168.22    inet 192.168.22.175/24 brd 192.168.22.255 scope global ens32
2、创建远程主机

远程主机需要安装有docker环境

[root@test001 ~]# docker-machine create -d generic --generic-ip-address=192.168.22.175 --generic-ssh-user=root --engine-registry-mirror http://ef017c13.m.daocloud.io   dockerhostRunning pre-create checks...Creating machine...(dockerhost) No SSH key specified. Assuming an existing key at the default location.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 dockerhost[root@test001 ~]# docker-machine lsNAME         ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORSdockerhost   -        generic      Running   tcp://192.168.22.175:2376           v1.13.1   
3、配置环境变量
[root@centos7 ~]# docker-machine env dockerhostexport DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.22.175:2376"export DOCKER_CERT_PATH="/root/.docker/machine/machines/dockerhost"export DOCKER_MACHINE_NAME="dockerhost"# Run this command to configure your shell: # eval $(docker-machine env dockerhost)[root@test001 ~]# eval $(docker-machine env dockerhost)[root@test001 ~]# docker-machine ssh dockerhostLast login: Thu Jun 14 02:32:42 2018 from 192.168.22.177[root@dockerhost ~]# docker --versionDocker version 1.13.1, build 94f4240/1.13.1
4、运行一个容器
[root@test001 ~]# docker run -d nginx:1.13Unable to find image 'nginx:1.13' locallyTrying to pull repository docker.io/library/nginx ... sha256:b1d09e9718890e6ebbbd2bc319ef1611559e30ce1b6f56b2e3b479d9da51dc35: Pulling from docker.io/library/nginxf2aa67a397c4: Pull complete 3c091c23e29d: Pull complete 4a99993b8636: Pull complete Digest: sha256:b1d09e9718890e6ebbbd2bc319ef1611559e30ce1b6f56b2e3b479d9da51dc35Status: Downloaded newer image for docker.io/nginx:1.1372efb659ec38d263519c894bf0b5eb3d5ca35af1e3d0e9522abbcc19d8739403[root@test001 ~]# docker image lsREPOSITORY          TAG     IMAGE ID       CREATED       SIZEdocker.io/nginx     1.13    ae513a47849c   6 weeks ago   109 MB[root@test001 ~]# docker-machine ssh dockerhostLast login: Thu Jun 14 02:58:51 2018 from 192.168.22.177[root@dockerhost ~]# docker image lsREPOSITORY          TAG      IMAGE ID      CREATED       SIZEdocker.io/nginx     1.13     ae513a47849c  6 weeks ago   109 MB#由此可以发现,利用docker-machine可以减少重复操作,便于环境的创建

关于Docker容器技术的基础知识点,可以阅读下面的文章 :

Docker容器技术入门(一)

Docker容器技术入门(二)


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/zu1NtzPCy6
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/20819
 
319 次点击