DOCKER 學習筆記7 Docker Machine 建立虛擬機實戰,以及錯誤總結


前言

通過以上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 來管理這些虛擬機的開機/關機/重啟 等操作。
image.png

所以,現在的 Machine 就充當了這個虛擬機管理的身份。可以用它來創建多個虛擬主機,並安裝 Docker Engine

我們可以使用這個 Machine 來管理這些虛擬機上面的 Docker Engine.

Docker Engine 與 Docker Machine 區別

Docker Engine

通常,我們說 Docker 的時候指的是 Docker Engine

如下面這張圖一樣,Docker Engine 是運行在 Linux 上的應用

  • 包含服務守護進程 daemon server
  • 與守護進程交互的 RestAPI
  • 我們平時輸入 docker run的命令行 CLI

image.png

Docker Machine

Docker Machine 是一個用於配置和管理 Dockerized 主機(上面有 Docker Engine 的主機)的工具。

image.png

開始安裝

Linux 版本

首先安裝Docker Engine

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


## 從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怎么選?
    image.png
    找到控制台,鏡像列表,復制你想要的鏡像即可。

  • ECS_REGION 購買區域 ?
    image.png
    這個若沒有要求則就不需要配置,若已經有服務器在指定的區域,那就配置,比如杭州就是cn-hangzhou 這個時候注意觀察地址欄的編號:https://ecs-buy.aliyun.com/wizard?/postpay/cn-hangzhou

  • ECS_VPC_ID 專用網絡節點 ?
    image.png
    要是已經有你已經買了服務器,就可以看到這些信息,就復制填寫一樣的,沒有則不用配置這一個

創建一個實例

注意:需要賬戶余額大於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 版本

請參見:https://blogs.chaobei.xyz/archives/docker6

安裝了 docker-toolbox 后 默認帶有 docker-machine

開始部署

這里遇到的問題是:部署虛擬主機我這台電腦已經啟動了Hyper-V (之前安裝的是docker for windows)而 virtualbox 與 Hyper-v是不能同時運行的,所以,這里有兩個解決方法:

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

使用 virtualbox (推薦)

hyperv 會在創建虛擬機時候存在大量問題,不推薦使用。若遇到這個問題,請參考 https://blogs.chaobei.xyz/archives/docker6 將docker for windows 換成 docker-toolbox

以下是我的采坑嘗試

virtualbox 需要安裝 Orcle VM Virtual BOX
image.png


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)"

下載boot2docker 鏡像

github https://github.com/boot2docker/boot2docker

下載這個鏡像的目的是:提高首次構建的速度。下載后移動到此位置。

image.png

使用 hyperv (不推薦)

這兒坑太多了。

錯誤總結

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 虛擬網卡導致的!!! 這兒存在太多問題,不建議使用hyperv 請使用 docker-toolbox

小結

通過本次學習,可以學習到如何在阿里雲通過 docker-machine 進行ECS的實例化以及部署DOCKER 過來使用,以及今后在本地進行DOCKER 的集群搭建的時候,要學會使用虛擬機,畢竟我們手頭沒有那么多主機嘛。

參考


免責聲明!

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



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