容器技術|Docker三劍客之docker-machine

接上一篇:容器技術|Docker三劍客之docker-compose

docker-machine是什麼?

ocker-machine就是docker公司官方提出的,用於在各種平臺上快速創建具有docker服務的虛擬機的技術,甚至可以通過指定driver來定製虛擬機的實現原理(一般是virtualbox)。

Docker 與 Docker Machine 的區別

Docker 是一個 Client-Server 架構的應用,Docker是大家對Docker Engine簡稱。

Docker包括以下三個部分:

  • 1、Docker daemon
  • 2、一套與 Docker daemon 交互的 REST API
  • 3、一個命令行客戶端
    下圖很清晰的展示了它們之間的關係:

Docker Machine 則是一個安裝和管理 Docker 的工具。它有自己的命令行工具:docker-machine。

docker-machine安裝

[root@master ~]# curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   617    0   617    0     0    390      0 --:--:--  0:00:01 --:--:--   390
100 26.7M  100 26.7M    0     0  1618k      0  0:00:16  0:00:16 --:--:-- 3622k
[root@master ~]# chmod +x /tmp/docker-machine 
[root@master ~]# cp /tmp/docker-machine /usr/local/bin/docker-machine
[root@master ~]# ll /usr/local/bin/docker-machine 
-rwxr-xr-x 1 root root 28034848 612 15:24 /usr/local/bin/docker-machine
[root@master ~]# docker-machine -v
docker-machine version 0.14.0, build 89b8332

docker-machine命令

[root@master ~]# docker-machine --help
Usage: docker-machine [OPTIONS] COMMAND [arg...]

Create and manage machines running Docker.

Version: 0.14.0, build 89b8332

Author:
  Docker Machine Contributors - <https://github.com/docker/machine>

Options:
  --debug, -D                   Enable debug mode
  --storage-path, -s "/root/.docker/machine"    Configures storage path [$MACHINE_STORAGE_PATH]
  --tls-ca-cert                 CA to verify remotes against [$MACHINE_TLS_CA_CERT]
  --tls-ca-key                  Private key to generate certificates [$MACHINE_TLS_CA_KEY]
  --tls-client-cert                 Client cert to use for TLS [$MACHINE_TLS_CLIENT_CERT]
  --tls-client-key              Private key used in client TLS auth [$MACHINE_TLS_CLIENT_KEY]
  --github-api-token                Token to use for requests to the Github API [$MACHINE_GITHUB_API_TOKEN]
  --native-ssh                  Use the native (Go-based) SSH implementation. [$MACHINE_NATIVE_SSH]
  --bugsnag-api-token               BugSnag API token for crash reporting [$MACHINE_BUGSNAG_API_TOKEN]
  --help, -h                    show help
  --version, -v                 print the version

Commands:
  active        Print which machine is active
  config        Print the connection config for machine
  create        Create a machine
  env           Display the commands to set up the environment for the Docker client
  inspect       Inspect information about a machine
  ip            Get the IP address of a machine
  kill          Kill a machine
  ls            List machines
  provision     Re-provision existing machines
  regenerate-certs  Regenerate TLS Certificates for a machine
  restart       Restart a machine
  rm            Remove a machine
  ssh           Log into or run a command on a machine with SSH.
  scp           Copy files between machines
  mount         Mount or unmount a directory from a machine with SSHFS.
  start         Start a machine
  status        Get the status of a machine
  stop          Stop a machine
  upgrade       Upgrade a machine to the latest version of Docker
  url           Get the URL of a machine
  version       Show the Docker Machine version or a machine docker version
  help          Shows a list of commands or help for one command

docker-machine active
顯示當前的活動主機

docker-machine config
顯示連接主機的配置

docker-machine create
創建一個主機

docker-machine env
設置當前的環境與哪個主機通信

docker-machine inspect
查看主機的詳細信息

docker-machine ip
查看主機的IP 

docker-machine kill
強制關閉一個主機

docker-machine ls 
查看所有的主機信息

docker-machine provision
重新配置現在主機

docker-machine regenerate-certs
爲主機重新生成證書

docker-machine restart
重啓主機

docker-machine rm
刪除主機

docker-machine ssh
以SSH的方式連接到主機上

docker-machine scp
遠程複製

docker-machine status
查看主機的狀態

docker-machine stop
停止一個正在運行的主機

docker-machine upgrade
升級主機的docker服務到最新版本

docker-machine version
查看docker-machine版本

常用實例操作

[root@master ~]# docker-machine create -d virtualbox testhost
[root@master ~]# docker-machine create --driver virtualbox testhost
#兩個命令的作用相同,創建一個名爲testhost的主機,驅動方式是virtualbox

[root@master ~]# docker-machine create -d virtualbox testhost
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"
#報錯提示沒有發現VBoxManage。因此,需要手工安裝,具體安裝操作如下。

[root@master ~]# vim  /etc/yum.repos.d/virtualbox.repo 
[virtualbox]
name=Oracle Linux / RHEL / CentOS-$releasever / $basearch - VirtualBox
baseurl=http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc

[root@master ~]# yum search VirtualBox   #查找具體安裝版本
已加載插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.163.com
 * epel: mirrors.ustc.edu.cn
 * extras: centos.ustc.edu.cn
 * updates: centos.ustc.edu.cn
============== N/S matched: VirtualBox ===================================
VirtualBox-4.3.x86_64 : Oracle VM VirtualBox
VirtualBox-5.0.x86_64 : Oracle VM VirtualBox
VirtualBox-5.1.x86_64 : Oracle VM VirtualBox
VirtualBox-5.2.x86_64 : Oracle VM VirtualBox
[root@master ~]# yum install -y VirtualBox-5.2  #安裝

[root@master ~]# /sbin/vboxconfig   #重新加載virtualbox服務
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
This system is currently not set up to build kernel modules.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
    kernel-devel kernel-devel-3.10.0-693.el7.x86_64
This system is currently not set up to build kernel modules.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
    kernel-devel kernel-devel-3.10.0-693.el7.x86_64

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.
#如果內核版本不一致,會出現上面的報錯,需要安裝相同的內核版本

[root@master ~]# rpm -ivh kernel-devel-3.10.0-693.el7.x86_64.rpm 
準備中...                          ################################# [100%]
正在升級/安裝...
   1:kernel-devel-3.10.0-693.el7   ################################# [100%]
[root@slave1 ~]# yum install gcc make perl -y
[root@slave1 ~]# rpm -qa kernel\*
kernel-tools-3.10.0-693.el7.x86_64
kernel-devel-3.10.0-693.el7.x86_64
kernel-tools-libs-3.10.0-693.el7.x86_64
kernel-3.10.0-693.el7.x86_64
kernel-headers-3.10.0-862.3.2.el7.x86_64
[root@slave1 ~]# /sbin/vboxconfig 
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: Starting VirtualBox services.

[root@centos7 ~]# docker-machine create --driver virtualbox testhost
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"
#這個報錯不用解釋了吧,沒有開啓虛擬化功能,直接打開

[root@centos7 ~]# docker-machine create --driver virtualbox default
Running pre-create checks...
(default) No default Boot2Docker ISO found locally, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v18.05.0-ce
(default) Downloading /root/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v18.05.0-ce/boot2docker.iso...
(default) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
Creating machine...
(default) Copying /root/.docker/machine/cache/boot2docker.iso to /root/.docker/machine/machines/default/boot2docker.iso...
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Found a new host-only adapter: "vboxnet0"
(default) 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 default
#可以先安裝個默認的虛擬機
[root@centos7 ~]# docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
default   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.05.0-ce   
[root@centos7 ~]# docker-machine status
Running
#接下來配置環境變量,方便後面直接操作主機
[root@centos7 ~]# docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell: 
# eval $(docker-machine env default)
[root@centos7 ~]#  eval $(docker-machine env default)
[root@centos7 ~]# docker-machine ssh default
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 18.05.0-ce, build HEAD : b5d6989 - Thu May 10 16:35:28 UTC 2018
Docker version 18.05.0-ce, build f150324

docker@default:~$ docker --version
Docker version 18.05.0-ce, build f150324
#正常進入虛擬機

實例

兩臺服務器
* 本地主機:192.168.22.177
* 遠程主機:192.168.22.175
可能大家還是不太明白,這個docker-machine到底有什麼用?docker容器的好處都知道了。
而docker-machine可以在本地佈署相應環境的同時完成遠程docker主機相同環境的佈署,減少重複的操作。

1、配置免密登錄

[root@test001 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:7Ue0bc08pEs+PonJqy7/hyxUhNO4uEegVizX4EJC8J8 root@centos7.3
The key's randomart image is:
+---[RSA 2048]----+
| .oo ...o +      |
|  . o..= = o     |
|   . .=.o + .  . |
|    .oo. + o oo+ |
|    .E  S o ooo.+|
|       . + .o.. .|
|        o + =+.  |
|       . . B.+.  |
|        +++oo..  |
+----[SHA256]-----+
[root@centos7 ~]# ssh-copy-id 192.168.22.175
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.22.175 (192.168.22.175)' can't be established.
ECDSA key fingerprint is SHA256:p6+FPeTxTUx37cwJWJP8cUE9NhcUHSvAppVPyj4aj8c.
ECDSA key fingerprint is MD5:89:6d:f7:46:11:45:2e:fd:21:87:42:bd:62:06:fe:fd.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.22.175's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.22.175'"
and check to make sure that only the key(s) you wanted were added.

[root@test001 ~]# ssh 192.168.22.175
Last login: Tue Apr 24 06:51:06 2018 from 192.168.22.170
[root@test002 ~]# ip add |grep 192.168.22
    inet 192.168.22.175/24 brd 192.168.22.255 scope global ens32

2、創建遠程主機

遠程主機需要安裝有docker環境
[root@test001 ~]# docker-machine create -d generic --generic-ip-address=192.168.22.175 --generic-ssh-user=root --engine-registry-mirror http://ef017c13.m.daocloud.io   dockerhost
Running pre-create checks...
Creating machine...
(dockerhost) No SSH key specified. Assuming an existing key at the default location.
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 dockerhost
[root@test001 ~]# docker-machine ls
NAME         ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
dockerhost   -        generic      Running   tcp://192.168.22.175:2376           v1.13.1   

3、配置環境變量

[root@centos7 ~]# docker-machine env dockerhost
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.22.175:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/dockerhost"
export DOCKER_MACHINE_NAME="dockerhost"
# Run this command to configure your shell: 
# eval $(docker-machine env dockerhost)
[root@test001 ~]# eval $(docker-machine env dockerhost)
[root@test001 ~]# docker-machine ssh dockerhost
Last login: Thu Jun 14 02:32:42 2018 from 192.168.22.177
[root@dockerhost ~]# docker --version
Docker version 1.13.1, build 94f4240/1.13.1

4、運行一個容器

[root@test001 ~]# docker run -d nginx:1.13
Unable to find image 'nginx:1.13' locally
Trying to pull repository docker.io/library/nginx ... 
sha256:b1d09e9718890e6ebbbd2bc319ef1611559e30ce1b6f56b2e3b479d9da51dc35: Pulling from docker.io/library/nginx
f2aa67a397c4: Pull complete 
3c091c23e29d: Pull complete 
4a99993b8636: Pull complete 
Digest: sha256:b1d09e9718890e6ebbbd2bc319ef1611559e30ce1b6f56b2e3b479d9da51dc35
Status: Downloaded newer image for docker.io/nginx:1.13
72efb659ec38d263519c894bf0b5eb3d5ca35af1e3d0e9522abbcc19d8739403
[root@test001 ~]# docker image ls
REPOSITORY          TAG     IMAGE ID       CREATED       SIZE
docker.io/nginx     1.13    ae513a47849c   6 weeks ago   109 MB
[root@test001 ~]# docker-machine ssh dockerhost
Last login: Thu Jun 14 02:58:51 2018 from 192.168.22.177
[root@dockerhost ~]# docker image ls
REPOSITORY          TAG      IMAGE ID      CREATED       SIZE
docker.io/nginx     1.13     ae513a47849c  6 weeks ago   109 MB
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章