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環境變量就行,這種方式很好的隔離了本地和遠程鏡像和容器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM