前言

通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了。大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的NGINX MYSQL 等服务全部启动,而不是按照传统部署方式:

  • 安装JDK 配置环境变量
  • 安装MYSQL 启动服务
  • 安装NGINX 配置文件
  • 启动调试 。。。。

要是还有一台机器需要部署呢?你是不是也得按照这个顺序再来一遍,这也太麻烦了。

本节要学习的内容是DOCKER 三剑客第二 Docker Machine

Docker Machine

Docker Machine 是一个工具,可以让您在虚拟主机上安装 Docker Engine,并使用 Docker-Machine 命令管理主机。 你可以使用 Machine 在你本地的 Mac 或 Windows 机顶盒上,在你的公司网络上,在你的数据中心上,或者在像 Azure,AWS,DigitalOcean 这样的云提供商上创建 Docker 主机。

Docker Machine 使您能够在各种版本的 Linux 上提供多个远程 Docker 主机。

举个栗子

我们都使用过虚拟机 VM VirtualBOX 当然,我们在使用VM 的时候,就是在本机上建立了许多个虚拟机,可以运行好几个Centos,使用VM 来管理这些虚拟机的开机/关机/重启 等操作。

所以,现在的 Machine 就充当了这个虚拟机管理的身份。可以用它来创建多个虚拟主机,并安装 Docker Engine

我们可以使用这个 Machine 来管理这些虚拟机上面的 Docker Engine.

Docker Engine 与 Docker Machine 区别

Docker Engine

通常,我们说 Docker 的时候指的是 Docker Engine

如下面这张图一样,Docker Engine 是运行在 Linux 上的应用

  • 包含服务守护进程 daemon server
  • 与守护进程交互的 RestAPI
  • 我们平时输入 docker run的命令行 CLI

Docker Machine

Docker Machine 是一个用于配置和管理 Dockerized 主机(上面有 Docker Engine 的主机)的工具。

开始安装

首先安装Docker Engine

https://www.cnblogs.com/ChromeT/p/12272326.html

Linux


## 从github 拉取最新版本 (下载特慢,推荐迅雷复制下载地址后,上传服务器)
curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine

## 迅雷下载地址 (Linux/X86_64)搞清楚自己的服务器架构
https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-Linux-x86_64

## 赋予读取权限
chmod +x /usr/local/bin/docker-machine

## 检查安装信息
docker-machine version

使用Docker Machine 创建虚拟主机

docker-machine create --driver xxx name 创建虚拟主机

[root@mrclinux ~]# docker-machine create --driver virtualbox default
Running pre-create checks...
Error with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path"

注意!!!!

因为现在我用的服务器是阿里云ECS 共享型,所以这已经是一个虚拟机,VM是不支持虚拟机嵌套虚拟机的。所以,直接到后面看,通过配置阿里云驱动后使用docker-machine 创建和购买实例。

安装VM 也无济于事!!!!

[root@mrclinux ~]# docker-machine create --driver virtualbox default
Running 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"

aliyun 驱动

通过配置aliyun 的驱动,可以方便的创建阿里云实例,而不是创建虚拟机,其实要是在阿里云服务器创建虚拟机也不现实,毕竟内存就那么大,而且,还没有对应的IP分配给虚拟机。

GITHUB https://github.com/AliyunContainerService/docker-machine-driver-aliyunecs


## 下载驱动
curl -O https://docker-machine-aliyunecs-drivers.oss-cn-beijing.aliyuncs.com/docker-machine-driver-aliyunecs_linux-amd64.tgz

## 解压
tar -zxvf docker-machine-driver-aliyunecs_linux-amd64.tgz

## 复制到可执行目录下
cp bin/docker-machine-driver-aliyunecs.linux-amd64 /usr/local/bin/docker-machine-driver-aliyunecs

配置环境变量


## 打开环境变量文件

vi ~/.bashrc

## 加入以下内容(需要改变的地方我会说)

export ECS_ACCESS_KEY_ID='填你自己key id'
export ECS_ACCESS_KEY_SECRET='填你自己的key secret'
# 购买的镜像是1核0.5G内存的最小型实例
export ECS_INSTANCE_TYPE='ecs.t5-lc2m1.nano'
# 来个50M宽带
export ECS_INTERNET_MAX_BANDWIDTH='50'
# 购买的区域是石家庄
export ECS_REGION='cn-zhangjiakou'
# 设置的密码,一定要8~30位,有大小写字母,数字和乱七八糟的标点,不然会自动创建失败
export ECS_SSH_PASSWORD='7b6424B61c6C21~0%39F1C56'
# 磁盘只要20G
export ECS_SYSTEM_DISK_SIZE='20'
# 磁盘用便宜的高效云盘吧,任性选SSD也行
export ECS_SYSTEM_DISK_CATEGORY='cloud_efficiency'
# 选择的镜像是Ubuntu16.04
export ECS_IMAGE_ID='ubuntu_16_0402_64_20G_alibase_20180409.vhd'
# 专用网络的节点
export ECS_VPC_ID='vpc-8vbhii32tpugfcqbryqcn'
# 虚拟交换机的节点
export ECS_VSWITCH_ID='vsw-8vbweep4xrtamazp50775'
# ECS的标签
export ECS_TAGS='chen_docker'
# 安全组
export ECS_SECURITY_GROUP='sg-8vb5wwel08nyrih2lmtb'
# 石家庄a区
export ECS_ZONE='cn-zhangjiakou-a'
# 一定要是true
export ECS_IO_OPTIMIZED='true'

# Using mirrors from Aliyun
export MACHINE_DOCKER_INSTALL_URL=http://kubernetes.oss-cn-hangzhou.aliyuncs.com/docker_install.sh
export ENGINE_REGISTRY_MIRROR=https://registry.docker-cn.com

参考: https://blog.csdn.net/diyiday/article/details/93899190

配置说明

  • ECS_IMAGE_ID 镜像ID怎么选?

    找到控制台,镜像列表,复制你想要的镜像即可。

  • ECS_REGION 购买区域 ?

    这个若没有要求则就不需要配置,若已经有服务器在指定的区域,那就配置,比如杭州就是cn-hangzhou 这个时候注意观察地址栏的编号:https://ecs-buy.aliyun.com/wizard?/postpay/cn-hangzhou

  • ECS_VPC_ID 专用网络节点 ?

    要是已经有你已经买了服务器,就可以看到这些信息,就复制填写一样的,没有则不用配置这一个

创建一个实例

注意:需要账户余额大于100 不然创建不成功!!!!

docker-machine create -d aliyunecs <name>

[root@mrclinux ~]# docker-machine create -d aliyunecs mrctest
Running pre-create checks...
Creating machine...
(mrctest) mrctest | Creating key pair for instance ...
(mrctest) mrctest | Configuring security groups instance ...
(mrctest) mrctest | Creating instance with image centos_7_06_64_20G_alibase_20190711.vhd ...
(mrctest) mrctest | Create instance i-xxxxxxxx successfully
(mrctest) mrctest | Allocating Eip address for instance i-xxxxxxxx ...
(mrctest) mrctest | Associating Eip address eip-bp1hc5mty4iz4dnlb3o9b for instance i-xxxxxxxx  ...
(mrctest) mrctest | Starting instance i-xxxxxxxx ...
(mrctest) mrctest | Start instance i-xxxxxxxx successfully
(mrctest) mrctest | Waiting SSH service xxxxxxxx  is ready to connect ...
(mrctest) mrctest | Uploading SSH keypair to xxxxxxxx  ...
(mrctest) mrctest | Created instance i-xxxxxxxx successfully with public IP address xxxxxxxx  and private IP address xxxxxxxx
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 mrctest

查看实例列表

docker-machine ls

[root@mrclinux ~]# docker-machine ls
NAME                ACTIVE   DRIVER      STATE     URL                        SWARM   DOCKER     ERRORS
mrctest             -        aliyunecs   Running   tcp://xxx.xxx.xxx.199:2376           v19.03.5   

连接使用实例

docker-machine ssh name
通过 SSH 连接后,这就和一个普通的主机没有什么区别了。

[root@mrclinux ~]# docker-machine ssh mrctest
Last login: Tue Feb 11 18:06:17 2020 from xxxxxxxx

Welcome to Alibaba Cloud Elastic Compute Service !

[root@mrctest ~]# docker version
Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea
 Built:             Wed Nov 13 07:25:41 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.5
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.12
  Git commit:       633a0ea
  Built:            Wed Nov 13 07:24:18 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
[root@mrctest ~]# exit
logout

实例销毁

docker-machine rm <name>


[root@mrclinux ~]# docker-machine rm mrctest
About to remove mrctest
WARNING: This action will delete both local reference and remote instance.
Are you sure? (y/n): y
(mrctest) mrctest | Remove instance i-bp15uqp37s1r2ei0f5z5 ...
(mrctest) mrctest | Deleting instance: i-bp15uqp37s1r2ei0f5z5
Successfully removed mrctest

WINDOWS 10 版本

首先安装Docker-windows 版本

请参见:https://blogs.chaobei.xyz/archives/docker6

下载Docker-machine

git https://github.com/docker/machine/releases
https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-Windows-x86_64.exe

选择合适的版本进行下载,推荐使用迅雷,可以加速下载

配置docker-machine

将下载后的文件重命名为docker-machine.exe 移到与Docker-Desktop 同一文件夹下。


PS C:\WINDOWS\system32> docker-machine.exe version
docker-machine.exe version 0.16.2, build bd45ab13
PS C:\WINDOWS\system32>

开始部署

这里遇到的问题是:部署虚拟主机我这台电脑已经启动了Hyper-V 而 virtualbox 与 Hyper-v是不能同时运行的,所以,这里有两个解决方法:

  • 禁用掉 hyperv 使用virtualbox
  • 直接使用 hyperv

使用 virtualbox (不推荐)

因为安装了Docker Desktop, 桌面版使用的就是Windows 自带的虚拟机 hyperv
若使用禁用的方式,则不妥!

以下是我的采坑尝试

virtualbox 需要安装 Orcle VM Virtual BOX


PS C:\Users\17639> docker-machine create -d virtualbox  vm
Running pre-create checks...
Error with pre-create check: "This computer is running Hyper-V. VirtualBox won't boot a 64bits VM when Hyper-V is activated. Either use Hyper-V as a driver, or disable the Hyper-V hypervisor. (To skip this check, use --virtualbox-no-vtx-check)"

使用 hyperv (推荐)

如果使用 hyperv 需要在windows 10 上开启

Hyper-V 作为可选功能内置于 Windows -- 无需下载 Hyper-V。

检查要求

Windows 10 企业版、专业版或教育版
具有二级地址转换 (SLAT) 的 64 位处理器。
CPU 支持 VM 监视器模式扩展(Intel CPU 的 VT-c 技术)。
最少 4 GB 内存。
请勿在 Windows 10 家庭版上安装 Hyper-V 角色。

使用 PowerShell 启用 Hyper-V

以管理员身份打开 PowerShell 控制台。
运行以下命令:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

如果无法找到此命令,请确保你以管理员身份运行 PowerShell。
安装完成后,请重启。

开启功能

开启后提示重启,若已经安装过Docker-Desktop 则默认是打钩的

打开hyperv 配置网络

配置网络,则类似于桥接,需要让虚拟机共享你电脑的网络实现联网。

https://docs.docker.com/machine/drivers/hyper-v/

hyperv 创建虚拟机

注意:需要使用管理员权限打开PowerShell !!!!!


PS C:\WINDOWS\system32> docker-machine create --driver hyperv vm                           Running pre-create checks...                                                                                       ng machine...
(vm) Copying C:\Users\17639\.docker\machine\cache\boot2docker.iso to C:\Users\17639\.docker\machine\machines\vm\boot2docker.iso...
(vm) Creating SSH key...
(vm) Creating VM...
(vm) Using switch "Docker"
(vm) Creating VHD
(vm) Starting VM...
(vm) Waiting for host to start...
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: C:\Program Files\Docker\Docker\resources\bin\docker-machine.exe env vm

创建成功,接下来的操作,留给你们自己了。

错误总结

PS C:\Users\17639> docker-machine create -d virtualbox  --virtualbox-no-vtx-check  vm
Running pre-create checks...
Creating machine...
(vm) Copying C:\Users\17639\.docker\machine\cache\boot2docker.iso to C:\Users\17639\.docker\machine\machines\vm\boot2docker.iso...
(vm) Creating VirtualBox VM...
(vm) Creating SSH key...
(vm) Starting the VM...
(vm) Check network to re-create if needed...
(vm) Windows might ask for the permission to create a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(vm) Found a new host-only adapter: "VirtualBox Host-Only Ethernet Adapter #2"
(vm) Windows might ask for the permission to configure a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(vm) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
Error creating machine: Error in driver during machine creation: Unable to start the VM: C:\Program Files\Oracle\VirtualBox\VBoxManage.exe startvm vm --type headless failed:
VBoxManage.exe: error: Call to WHvSetupPartition failed: ERROR_SUCCESS (Last=0xc000000d/87) (VERR_NEM_VM_CREATE_FAILED)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole

Details: 00:00:01.538449 Power up failed (vrc=VERR_NEM_VM_CREATE_FAILED, rc=E_FAIL (0X80004005))

这个是因为我使用了virtualbox 而没有禁用掉hyperv 所导致的结果


PS C:\WINDOWS\system32> docker-machine create --driver hyperv vm
Running pre-create checks...
Error with pre-create check: "no External vswitch found. A valid vswitch must be available for this command to run. Check https://docs.docker.com/machine/drivers/hyper-v/"

这里的意思是没有配置虚拟网卡导致的!! 见上面 》打开hyperv 配置网络

小结

通过本次学习,可以学习到如何在阿里云通过 docker-machine 进行ECS的实例化以及部署DOCKER 过来使用,以及今后在本地进行DOCKER 的集群搭建的时候,要学会使用虚拟机,毕竟我们手头没有那么多主机嘛。

参考

  • 官网: https://docs.docker.com/machine/get-started/
  • 驱动: https://docs.docker.com/machine/drivers/hyper-v/
  • windows 10 开启hyper https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v?redirectedfrom=MSDN

DOCKER 学习笔记7 Docker Machine 在阿里云实例化ECS 以及本地Windows 实例化虚拟机实战的更多相关文章

  1. docker学习笔记一-docker安装与卸载

    环境查看 # 1 查询当前centOS的版本,官方要求版本为7以上 uname -r 查询系统内核 cat /etc/os-release 系统版本 安装 # 1.卸载旧版本 yum remove d ...

  2. DOCKER 学习笔记7 Docker Machine 建立虚拟机实战,以及错误总结

    前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ...

  3. DOCKER 学习笔记8 Docker Swarm 集群搭建

    前言 在前面的文章中,已经介绍如何在本地通过Docker Machine 创建虚拟Docker 主机,以及也可以在本地Windows 创建虚拟主机,也是可以使用的.这一节,我们将继续学习 Docker ...

  4. Docker学习笔记2: Docker 概述

    一.什么是Docker Docker是基于Go语言实现的云开源项目. Docker 的主要目标是:"Bulid,Ship and  Run Any App ,AnyWhere" , ...

  5. Docker学习笔记(1) — docker 常用命令

    1. docker version显示 Docker 版本信息.2. docker info显示 Docker 系统信息,包括镜像和容器数.3. docker searchdocker search ...

  6. Docker学习笔记之docker volume 容器卷的那些事(一)

    预览目录 volume 方式 相关用例 使用方式 使用 volume driver bind mount 方式 相关用例 使用方式 配置selinux标签 配置macOS的安装一致性 tmpfs 方式 ...

  7. Docker学习笔记之Docker的Build 原理

    0x00 概述 使用 Docker 时,最常用的命令无非是 docker container 和 docker image 相关的子命令,当然最初没有管理类命令(或者说分组)的时候,最常使用的命令也无 ...

  8. Docker学习笔记之Docker应用于服务化开发

    0x00 概述 上一节里我们谈到了小型的独立项目如何使用 Docker Compose 来搭建程序的运行环境,对于由多人或多部门参与的中大型服务化架构的项目,仅由一个 Docker Compose 项 ...

  9. Docker学习笔记之Docker的数据管理和存储

    0x00 概述 数据是应用程序重要的产出,所以很好的管理和存储数据,是对应用程序劳动结果的尊重.特别是在大数据时代,所有的数据都是重要的资产,保护好数据是每个开发者必须掌握的技能.我们知道,在 Doc ...

随机推荐

  1. $Poj3208$ 启示录 数位统计$DP$

    Poj  AcWing Description Sol  这题长得就比较像数位$DP$叭. 所以先用$DP$进行预处理,再基于拼凑思想,通过"试填法"求出最终的答案. 设$F[i] ...

  2. $CF311B\ Cats\ Transport$ 斜率优化

    AcWing Description Sol 设f[i][j]表示前i个饲养员接走前j只猫咪的最小等待时间. 要接到j猫咪,饲养员的最早出发时间是可求的,设为d: $ d[j]=Tj-\sum_{k= ...

  3. 小白学 Python 爬虫(32):异步请求库 AIOHTTP 基础入门

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  4. jsp 知识点总结

    JSP 入门案例(计算器的实现) 对于jsp 学习的一些总结 1.使用Dreamweaver 搭建网页 计算器 第一个数字 符号 + - * / 第二个数字 <form id="for ...

  5. 1072 开学寄语 (20分)C语言

    下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面.理发.整衣,然后思过.读书.锻炼.明智.开悟 ...

  6. js中的事件冒泡

    事件冒泡和阻止事件冒泡: 事件冒泡的原理:从实际操作的元素(事件)向上级父元素一级一级执行下去,直到达到document/window,冒泡过程结束.例如:假设我有一个 div 盒子,里面嵌套了1个子 ...

  7. 性能数据的准备-Jmeter

    性能测试的一般流程: 收集性能需求——>编写性能脚本——>执行性能测试——>分析测试报告——>系统性能调优 在收集性能需求后,我们会思考: 负载测试时并发时需要多少数据?例:登 ...

  8. java8中的stream流遍历

    比较for循环.迭代器.java8Stream流遍历的不同 package cnom.test.testUtils; import java.io.Serializable; import java. ...

  9. 我们为什么会删除不了集群的 Namespace?

    作者 | 声东  阿里云售后技术专家 导读:阿里云售后技术团队的同学,每天都在处理各式各样千奇百怪的线上问题.常见的有网络连接失败.服务器宕机.性能不达标及请求响应慢等.但如果要评选的话,什么问题看起 ...

  10. vmware workstation12在安装VMware tools时出现问题:A previous installation of VMware Tools has been detected 解决

    win10安装的vmware workstation12在安装VMware tools时出现问题: root@lc:/root/vmware-tools-distrib# ./vmware-insta ...