docker之docker-machine用法

docker-machine 是docker官方提供的docker管理工具。
经过docker-machine能够轻松的作到:nginx

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

  搭建和管理多个docker 主机github

  搭建swarm集群docker

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

ip:192.168.56.102(hostonly)json

一、安装docker-machine:ubuntu

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

二、查看docker-machine版本:centos

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

三、在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驱动ssh

使用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)))
一、首先将192.168.101.14和主机192.168.56.102进行ssh链接认证:
[root@docker ~]# ssh-keygen
[root@docker ~]# ssh-copy-id root@192.168.56.102
二、建立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)
三、查看建立的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

四、建立容器:
[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
五、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环境变量就行,这种方式很好的隔离了本地和远程镜像和容器

相关文章
相关标签/搜索