一、概述

Docker Machine 是 Docker 官方提供的一个工具,它可以帮助我们在远程的机器上安装 Docker,或者在虚拟机 host 上直接安装虚拟机并在虚拟机中安装 Docker。我们还可以通过 docker-machine 命令来管理这些虚拟机和 Docker。

八、docker machine_docker

使用 docker-machine 命令,您可以启动,检查,停止和重新启动托管主机,也可以升级 Docker 客户端和守护程序,以及配置 Docker 客户端与您的主机进行通信。

八、docker machine_nginx_02

· 用于演示学习用途:例如在你的windows主机或者MAC、linux主机上,Docker Machine可以通过相关驱动(Hyper-V,VirtualBox),快速的创建多台docker虚拟机。

· 可以通过互联网云服务商的相关API接口,在Azure,AWS或Digital Ocean等云上创建你的docker云主机。

二、安装

macOS:

base=https:///docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/usr/local/bin/docker-machine &&
chmod +x /usr/local/bin/docker-machine

linux:

base=https:///docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
chmod +x /usr/local/bin/docker-machine

windows

base=https:///docker/machine/releases/download/v0.16.0 &&
mkdir -p "$HOME/bin" &&
curl -L $base/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" &&
chmod +x "$HOME/bin/docker-machine.exe"

查看版本

[root@docker tmp]# docker-machine --version
docker-machine version 0.16.0, build 702c267f

三、实例

1、远程机器安装docker

配置128和130免密登录

192.168.10.128:
ssh-keygen
ssh-copy-id root@192.168.10.130

docker-machine create -d generic --generic-ip-address=192.168.10.130 --generic-ssh-key ~/.ssh/id_rsa --generic-ssh-user=root docker130

create 命令本是要创建虚拟主机并安装 Docker,因为本例中的目标主机已经存在,所以仅安装 Docker。-d 是 --driver 的简写形式,主要用来指定使用什么驱动程序来创建目标主机。Docker Machine 支持在云服务器上创建主机,就是靠使用不同的驱动来实现了。本例中使用 generic 就可以了。接下来以 --generic 开头的三个参数主要是指定操作的目标主机和使用的账户。最后一个参数 docker130 是虚拟机的名称,Docker Machine 会用它来设置目标主机的名称。

八、docker machine_nginx_03

八、docker machine_nginx_04

使用docker-machine连接到130,配置加速
docker-machine ssh docker130
[root@docker130 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["******************"], #阿里云加速地址
"bip": "10.10.20.1/24",
"live-restore": true,
"graph": "/data/docker"
}
systemctl daemon-reload
systemctl restart docker
docker run -d --name=nginx nginx
可以使用exit退出ssh连接

[root@docker dockerfile]# docker-machine env docker130
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.10.130:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/docker130"
export DOCKER_MACHINE_NAME="docker130"
# Run this command to configure your shell:
# eval $(docker-machine env docker130) ##直接提示可以使用这种命令管理docker130,而不必ssh
###进入docker130
[root@docker ~]# eval $(docker-machine env docker130)
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 04661cdce581 3 days ago 141MB
##退出docker130
[root@docker ~]# eval $(docker-machine env -u)
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 11 months ago 209MB
mongo 4.2-bionic 3f3daf863757 18 months ago 388MB
redis 5.0.9 a4d3716dbb72 18 months ago 98.3MB
nginx latest 602e111c06b6 18 months ago 127MB
mysql 8.0.18 ed1ffcb5eff3 22 months ago 456MB
centos v7.4 76d6bc25b8a5 3 years ago 200MB
progrium/stress latest db646a8f4087 7 years ago 282MB

docker-machine start/stop/restart docker130 ##可以直接管理服务器docker130

###算是多了一种安装方案,虽然在ansible面前毫无优势

2、安装虚拟机加docker

虚拟机额外开启

八、docker machine_2d_05

安装依赖

yum -y install epel-release
yum-config-manager --add-repo https://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo
yum makecache fast
yum install gcc make patch dkms qt libgomp kernel-headers kernel-devel fontforge binutils glibc-headers glibc-devel kernel -y
yum search virtualbox
yum -y install VirtualBox-5.2
reboot
rcvboxdrv setup

docker-machine create --driver virtualbox docker001

八、docker machine_2d_06

卡在github下载boot2docker.iso

网上找了一个地址下载
链接:https://pan.baidu.com/s/1h6qXJfb1yOiqwgw5HuzZEQ
提取码:69ij
把文件复制到这个目录下/root/.docker/machine/cache/
[root@docker cache]# docker-machine create --driver virtualbox docker001
Running pre-create checks...
Creating machine...
(docker001) Copying /root/.docker/machine/cache/boot2docker.iso to /root/.docker/machine/machines/docker001/boot2docker.iso...
(docker001) Creating VirtualBox VM...
(docker001) Creating SSH key...
(docker001) Starting the VM...
(docker001) Check network to re-create if needed...
(docker001) Found a new host-only adapter: "vboxnet0"
(docker001) 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 docker001

[root@docker cache]# docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
docker001 - virtualbox Running tcp://192.168.99.100:2376 v19.03.12
docker130 - generic Running tcp://192.168.10.130:2376 v20.10.10

八、docker machine_github_07

[root@docker machines]# docker-machine ssh docker001
( '>')
/) TC (\ Core is distributed with ABSOLUTELY NO WARRANTY.
(/-_--_-\) www.tinycorelinux.net

docker@docker001:~$ docker run -d -P --name=nginx nginx
curl localhost:32768 ##这里面可以直接访问
在128机器:curl 192.168.99.100:32768也可以直接访问
但是在物理机浏览器直接访问curl 192.168.99.100:32768是没法访问的,估计得用nginx做代理

##至于怎么删除这玩意

docker-machine rm docker001 ##移除一个虚拟机,如果是virtualbox,会顺便把创建的虚拟机也关闭

制作方便,可以集群的时候搞一下

3、常用命令

//创建虚拟机
docker-machine create [OPTIONS] [arg...]
//移除虚拟机
docker-machine rm [OPTIONS] [arg...]
//登录虚拟机
docker-machine ssh [arg...]
//docker客户端配置环境变量
docker-machine env [OPTIONS] [arg...]
//检查机子信息
docker-machine inspect
//查看虚拟机列表
docker-machine ls [OPTIONS] [arg...]
//查看虚拟机状态
docker-machine status [arg...] //一个虚拟机名称
//启动虚拟机
docker-machine start [arg...] //一个或多个虚拟机名称
//停止虚拟机
docker-machine stop [arg...] //一个或多个虚拟机名称
//重启虚拟机
docker-machine restart [arg...] //一个或多个虚拟机名称
docker-machine ip #这个命令也能让你知道你当前管理的主机IP